Linux中國

在 Kubernetes 集群中運行 WordPress

作為一名開發者,我會嘗試留意那些我可能不會每天使用的技術的進步。了解這些技術至關重要,因為它們可能會間接影響到我的工作。比如由 Docker 推動的、近期正在興起的容器化技術,可用於上規模地託管 Web 應用。從技術層面來講,我並不是一個 DevOps,但當我每天構建 Web 應用時,多去留意這些技術如何去發展,會對我有所裨益。

這種進步的一個絕佳的例子,是近一段時間高速發展的容器編排平台。它允許你輕鬆地部署、管理容器化應用,並對它們的規模進行調整。目前看來,容器編排的流行工具有 Kubernetes (來自 Google)Docker SwarmApache Mesos。如果你想較好的了解上面那些技術以及它們的區別,我推薦你看一下這篇文章

在這篇文章中,我們將會從一些簡單的操作開始,了解一下 Kubernetes 平台,看看如何將一個 WordPress 網站部署在本地機器上的一個單節點集群中。

安裝 Kubernetes

Kubernetes 文檔中有一個很好的互動教程,涵蓋了很多東西。但出於本文的目的,我只會介紹在 MacOS 中 Kuberentes 的安裝和使用。

我們要做的第一件事是在你的本地主機中安裝 Kubernetes。我們將使用一個叫做 MiniKube 的工具,它專門用於在你的機器上方便地設置一個用於測試的 Kubernetes 集群。

根據 Minikube 文檔,在我們開始之前,有一些先決條件。首先要保證你已經安裝了一個 Hypervisor (我將會使用 Virtualbox)。接下來,我們需要安裝 Kubernetes 命令行工具(也就是 kubectl)。如果你在用 Homebrew,這一步非常簡單,只需要運行命令:

$ brew install kubectl

現在我們可以真正 安裝 Minikube 了:

$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.21.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

最後,我們要啟動 Minicube 創建一個虛擬機,來作為我們的單節點 Kubernetes 集群。現在我要說一點:儘管我們在本文中只在本地運行它,但是在真正的伺服器上運行 Kubernetes 集群時,後面提到的大多數概念都會適用。在多節點集群上,「主節點」將負責管理其它工作節點(虛擬機或物理伺服器),並且 Kubernetes 將會在集群中自動進行容器的分發和調度。

$ minikube start --vm-driver=virtualbox

安裝 Helm

現在,本機中應該有一個正在運行的(單節點)Kubernetes 集群了。我們現在可以用任何方式來與 Kubernetes 交互。如果你想現在可以體驗一下,我覺得 kubernetesbyexample.com 可以很好地向你介紹 Kubernetes 的概念和術語。

雖然我們可以手動配置這些東西,但實際上我們將會使用另外的工具,來將我們的 WordPress 應用部署到 Kubernetes 集群中。Helm 被稱為「Kubernetes 的包管理工具」,它可以讓你輕鬆地在你的集群中部署預構建的軟體包,也就是「 圖表 chart 」。你可以把圖表看做一組專為特定應用(如 WordPress)而設計的容器定義和配置。首先我們在本地主機上安裝 Helm:

$ brew install kubernetes-helm

然後我們需要在集群中安裝 Helm。 幸運的是,只需要運行下面的命令就好:

$ helm init

安裝 WordPress

現在 Helm 已經在我們的集群中運行了,我們可以安裝 WordPress 圖表。運行:

$ helm install --namespace wordpress --name wordpress --set serviceType=NodePort stable/wordpress  

這條命令將會在容器中安裝並運行 WordPress,並在容器中運行 MariaDB 作為資料庫。它在 Kubernetes 中被稱為「Pod」。一個 Pod 基本上可視為一個或多個應用程序容器和這些容器的一些共享資源(例如存儲卷,網路等)的組合的抽象。

我們需要給這個部署一個名字和一個命名空間,以將它們組織起來並便於查找。我們同樣會將 serviceType 設置為 NodePort 。這一步非常重要,因為在默認設置中,服務類型會被設置為 LoadBalancer。由於我們的集群現在沒有負載均衡器,所以我們將無法在集群外訪問我們的 WordPress 站點。

在輸出數據的最後一部分,你會注意到一些關於訪問你的 WordPress 站點的有用的命令。運行那些命令,你可以獲取到我們的 WordPress 站點的外部 IP 地址和埠:

$ export NODE_PORT=$(kubectl get --namespace wordpress -o jsonpath="{.spec.ports[0].nodePort}" services wordpress-wordpress)
$ export NODE_IP=$(kubectl get nodes --namespace wordpress -o jsonpath="{.items[0].status.addresses[0].address}")
$ echo http://$NODE_IP:$NODE_PORT/admin

你現在訪問剛剛生成的 URL(忽略 /admin 部分),就可以看到 WordPress 已經在你的 Kubernetes 集群中運行了!

擴展 WordPress

Kubernetes 等服務編排平台的一個偉大之處,在於它將應用的擴展和管理變得易如反掌。我們看一下應用的部署狀態:

$ kubectl get deployments --namespace=wordpress

kubectl get deployments

可以看到,我們有兩個部署,一個是 Mariadb 資料庫,一個是 WordPress 本身。現在,我們假設你的 WordPress 開始承載大量的流量,所以我們想將這些負載分攤在多個實例上。我們可以通過一個簡單的命令來擴展 wordpress-wordpress 部署:

$ kubectl scale --replicas 2 deployments wordpress-wordpress --namespace=wordpress

再次運行 kubectl get deployments,我們現在應該會看到下面的場景:

kubectl get deployments

你剛剛擴大了你的 WordPress 站點規模!超級簡單,對不對?現在我們有了多個 WordPress 容器,可以在它們之中對流量進行負載均衡。想了解 Kubernetes 擴展的更多信息,參見這篇指南

高可用

Kubernetes 等平台的的另一大特色在於,它不單單能進行方便的擴展,還可以通過自愈組件來提供高可用性。假設我們的一個 WordPress 部署因為某些原因失效了,那 Kubernetes 會立刻自動替換掉這個部署。我們可以通過刪除我們 WordPress 部署的一個 pod 來模擬這個過程。

首先運行命令,獲取 pod 列表:

$ kubectl get pods --namespace=wordpress

kubectl get pods

然後刪除其中一個 pod:

$ kubectl delete pod wordpress-wordpress-876183909-jqc8s --namespace=wordpress

如果你再次運行 kubectl get pods 命令,應該會看到 Kubernetes 立刻換上了新的 pod (3l167)。

kubectl get pods

更進一步

我們只是簡單了解了 Kubernetes 能完成工作的表面。如果你想深入研究,我建議你查看以下功能:

你在容器平台上運行過 WordPress 嗎?有沒有使用過 Kubernetes(或其它容器編排平台),有沒有什麼好的技巧?你通常會怎麼擴展你的 WordPress 站點?請在評論中告訴我們。

作者簡介:

Gilbert 喜歡構建軟體。從 jQuery 腳本到 WordPress 插件,再到完整的 SaaS 應用程序,Gilbert 一直在創造優雅的軟體。 他粗昂做的最有名的的產品,應該是 Nivo Slider.

via: https://deliciousbrains.com/running-wordpress-kubernetes-cluster/

作者:Gilbert Pellegrom 譯者:StdioA 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國