引言
WordPress
WordPress 是全球最流行的內容管理系統(CMS),自 2003 年發布以來,已成為網站建設的首選工具。其廣泛的插件和主題生態系統使用戶能夠輕松擴展功能和美化外觀。活躍的社區提供豐富的資源和支持,進一步降低了開發和維護的難度。
憑借易用性、靈活性和強大的社區支持,WordPress 已成為全球數百萬用戶的共同選擇,在網站建設領域占據了重要地位。
什么是 KubeBlocks
KubeBlocks 是一個可以管理多種數據庫和有狀態中間件的 K8s operator,支持管理 MySQL、PostgreSQL、Redis、MongoDB、Kafka、ClickHouse、Elasticsearch 等 30 余種數據庫。其原理是定義一組通用和抽象的 API(CRDs)來描述各種引擎的共同屬性,在其之上,數據庫廠商和開發者可以通過插件來描述不同引擎的差異。
為什么要用 KubeBlocks 來管理 WordPress
在使用 WordPress Bitnami 鏡像時,雖然內置的 MariaDB 提供了一個開箱即用的數據庫解決方案,但存在幾方面的缺陷:
- 高可用性限制:Bitnami 鏡像中的 MariaDB 通常是單節點部署,如果節點出現問題會導致網站服務中斷;內置的 MariaDB 也不具備自動故障轉移機制。
- 資源競爭:MariaDB 的數據庫和網站服務部署在同一個 Pod 中,會產生資源競爭,存在資源分配難題。
- 擴展性差:雖然 MariaDB 可以進行一定程度的擴展,但水平擴展(通過增加更多數據庫實例來提升性能和容量)相對復雜,需要額外的管理和配置工具。
- 監控與管理:內置的 MariaDB 缺乏完善的監控和管理工具,難以及時發現和解決性能問題或故障。
而使用 KubeBlocks 來部署提供 WordPress 數據庫服務,可以很好解決 MariaDB 的缺陷:
- 高可用性:可以分別為 WordPress 和數據庫配置高可用方案,提高整體系統的可靠性。
- 資源隔離:WordPress 和數據庫運行在不同的 Pod 中,資源隔離性更好,避免了資源競爭。
- 拓展性強:可以獨立擴展 WordPress 和數據庫的副本數,分別調整它們的資源配置。
- 快捷管理:KubeBlocks 可以快速一鍵部署 WordPress 所需數據庫集群,無需額外操作,且內置數據庫的備份和監控功能,能提高管理效率。
快速部署
安裝 KubeBlocks
KubeBlocks 提供了專屬的 kbcli 命令行管理工具,如果您沒有安裝 KubeBlocks,也能通過幾行命令輕松安裝KubeBlocks。
安裝前,請確保您的環境滿足 KubeBlocks 的環境要求。
-
安裝 kbcli。
curl -fsSL https://kubeblocks.io/installer/install_cli.sh | bash
-
安裝 KubeBlocks。
kbcli kubeblocks install
-
檢查 KubeBlocks 是否安裝成功。
kbcli kubeblocks status
您也可參考官方安裝文檔,查看具體操作說明。
- 安裝 kbcli
- 安裝 KubeBlocks
一鍵部署高可用數據庫集群
在部署 WordPress 之前,首先需要部署一個數據庫集群用于管理 WordPress 的后臺數據,可使用 kbcli 或者 kubectl 部署集群。
-
創建高可用集群。
這里我們使用 KubeBlocks apecloud-mysql addon 創建一個 MySQL 數據庫作為 WordPress 的數據庫。使用 kbcli 快速部署一個具有高可用多副本且達到生產環境水平的 MySQL 數據庫集群。
設置集群參數 replicas=3,以啟用數據庫 RaftGroup 模式,創建一個 MySQL 三副本集群。
# 啟用 addon(默認開啟) kbcli addon install apecloud-mysql # 部署集群 可以設置參數,如 --set replicas=3 表示三副本 kbcli cluster create apecloud-mysql --cluster-definition=apecloud-mysql --set replicas=3
-
查看集群狀態,等待所有相關 Pod 變為 running 狀態:
kubectl get pods
-
獲取訪問地址。
可通過 services 訪問已創建的 MySQL 集群,也可通過 Pod 直接訪問。本文以通過 services 訪問為例。
執行以下命令,獲取 service 地址,即
apecloud-mysql.default(命名空間).svc.cluster.local (默認后綴)
。kubectl get services
WordPress 部署
配置數據庫
-
根據實際需要,可以在數據庫中創建若干用戶,以便于 WordPress 進行角色管理。下面我們將創建一個 myadmin 用戶作為 WordPress 安裝時的主用戶。
使用以下命令以 root 身份連接 MySQL 數據庫。
kbcli cluster connect apecloud-mysql
-
進入數據庫后,執行以下 SQL 語句創建用戶并賦予權限,可根據需要設置數據庫權限。
CREATE USER 'myadmin'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'myadmin'@'%'; FLUSH PRIVILEGES; create database wordpress;
注意
可根據需求選擇創建 secret,用于 WordPress 安裝時引用,以避免明文傳輸密碼。
-
執行如下命令創建
mysql-secret
,設置鍵mariadb-password=password
,安裝時 WordPress 會優先將該密碼鍵值作為數據庫密碼,注意密碼的鍵名必須為mariadb-password
。用戶名不會從該 secret 中讀取。kubectl create secret generic mysql-secret --from-literal=mariadb-password=password
一鍵安裝 WordPress
-
使用 helm install 命令安裝 WordPress,同時配置前面所述參數。
helm install my-release oci://registry-1.docker.io/bitnamicharts/wordpress \ --set mariadb.enabled=false \ --set externalDatabase.host=apecloud-mysql.default.svc.cluster.local \ --set externalDatabase.database=wordpress \ --set externalDatabase.port=3306 \ --set externalDatabase.user="myadmin" --set externalDatabase.existingSecret="mysql-secret" \ --set replicaCount=2
參數說明:
mariadb.enabled
:需設置為false
,將禁用 MariaDB 的安裝,以使用外部數據庫服務。host
:我們可以使用前面的 MySQL service 地址來訪問 MySQL 服務,如:apecloud-mysql.default.svc.cluster.local
。user
,database
,port
:根據實際情況設置。existingSecret
:推薦使用該方式傳輸密碼。可引用前面創建的 secret 來傳輸密碼,以避免明文傳輸這些內容。注意 secret 必須包含連接密碼,設置了existingSecret
后,password 會被忽略。password
:可選設置。本文推薦使用existingSecret
引用前面創建的 secret 來傳輸密碼,避免明文傳輸。此外,設置了existingSecret
后,password
將被忽略。replicaCount
:代表 WordPress 實例啟動 Pod 數量。
-
查看 Pod 運行情況 ,確保所有 Pod ready 且處于 running 狀態 :
kubectl get pods
-
進入 WordPress 容器,可遠程連接數據庫,查看 WordPress 數據庫信息。
kubectl exec -it wordpress-584444f68b-sxcss -- bash mysql -h apecloud-mysql.default.svc.cluster.local -u Wordpress
至此,你已經成功部署了 WordPress 和對應的數據庫集群。
高可用性能測試
本文將通過刪除其中一個 Pod 來模擬故障。
kubectl delete pod apecloud-mysql-0
可以看到 Pod apecloud-mysql-0
現在 ready 狀態是 3/4,其中 MySQL 容器無法使用。
但并不影響正常連接數據庫,且可以看到 apecloud-mysql-1
成為了 leader(默認是 apecloud-mysql-0
),這是 KubeBlocks 強大故障轉移能力的體現之一。
數據庫擴容測試
當出現性能瓶頸等情況,或許需要對數據庫節點進行資源擴容,KubeBlocks 提供了非常方便的擴容命令,可使用 kbcli vsclae 命令輕松擴充計算資源。
kbcli cluster vscale mycluster --components=apecloud-mysql --cpu=500m --memory=500Mi
更多數據庫參數設置可以參考官方文檔。