高可用是分布式應用的重要要求,在ACK Serverless叢集中,您可以通過K8s原生調度語義實現分布式應用的跨可用性區域打散,以達到高可用部署的要求。本文檔介紹如何在Container Service Serverless 版上部署有狀態的高可用MySQL叢集。
前提條件
已建立ACK Serverless叢集(含多個虛擬節點)。具體操作,請參見建立叢集。
已開啟虛擬節點調度策略。具體操作,請參見開啟叢集虛擬節點調度策略。
已安裝csi-provisioner組件且版本 >= v1.22.9。
步驟一:從Github拉取用於建立K8s資源的YAML檔案
執行以下命令,複製程式碼程式庫。
git clone https://github.com/AliyunContainerService/serverless-k8s-examples.git
執行以下命令,進入工作目錄,並查看目錄下YAML檔案清單。
cd serverless-k8s-examples/stateful-mysql ls -al
預期輸出:
README.md secret.yaml stateful-mysql.yaml storageclass.yaml
其中
secret.yaml
用於建立Secret,storageclass.yaml
用於建立StorageClass,stateful-mysql.yaml
用於建立MySQL StatefulSet。
步驟二:建立NameSpace、Secret、StorageClass
執行以下命令,建立命名空間
mysql
。kubectl create namespace mysql
預期輸出:
namespace/mysql created
執行以下命令,建立MySQL Secret,用於儲存MySQL密碼。
kubectl apply -n mysql -f secret.yaml
預期輸出:
secret/mysql-secret created
以下為該Secret的YAML檔案。
執行以下命令,建立StorageClass。
kubectl apply -f storageclass.yaml
預期輸出:
storageclass.storage.k8s.io/fast-storageclass created
以下為該StorageClass的YAML檔案。
步驟三:配置Pod可用性區域打散,建立MySQL StatefulSet
執行以下命令,建立MySQL StatefulSet。本樣本將建立一個通過配置虛擬節點Pod可用性區域打散,在多個可用性區域上均勻分布的StatefulSet。關於如何配置虛擬節點Pod可用性區域打散,請參見實現虛擬節點Pod可用性區域打散以及親和調度。
kubectl apply -n mysql -f stateful-mysql.yaml
預期輸出:
statefulset.apps/dbc1 created
以下為該StatefulSet的YAML檔案。
步驟四:驗證MySQL叢集中的Pod部署情況
執行以下命令,驗證StatefulSet是否已成功建立。
kubectl get statefulset -n mysql
預期輸出:
NAME READY AGE dbc1 3/3 7m21s
執行以下命名,查看Pod詳細資料。
kubectl -n mysql get po -o wide
預期輸出:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES dbc1-0 1/1 Running 0 2m28s 10.1.214.213 virtual-kubelet-cn-hangzhou-j <none> <none> dbc1-1 1/1 Running 0 106s 10.3.146.113 virtual-kubelet-cn-hangzhou-h <none> <none> dbc1-2 1/1 Running 0 64s 10.4.232.78 virtual-kubelet-cn-hangzhou-g <none> <none>
其中NODE列為Pod所在節點,節點名稱中包含可用性區域的資訊。從節點名稱中可以看到Pod被打散到不同的可用性區域中。