Kubernetes 是目前主流的容器調度平臺,為了提高應用系統可用性和可靠性,經常采用多副本部署方式,其中 MySQL 數據庫也常常使用多副本的方式進行部署,以保證高可用性和數據可靠性。
下面我們通過實踐演示,在 Kubernetes 中如何部署一個多副本 MySQL 集群。
首先,我們需要編寫 MySQL 的 Deployment 和 Service 部署文件:
apiVersion: apps/v1 kind: Deployment metadata: name: mysql spec: selector: matchLabels: app: mysql replicas: 3 template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD value: "123456" ports: - containerPort: 3306 volumeMounts: - name: mysql-storage mountPath: /var/lib/mysql volumes: - name: mysql-storage emptyDir: {} --- apiVersion: v1 kind: Service metadata: name: mysql spec: ports: - name: mysql port: 3306 targetPort: 3306 selector: app: mysql
Deployment
部署描述了 MySQL 的副本數、鏡像版本、環境變量和數據卷等信息,Service
部署則定義了MySQL的網絡訪問端口和副本選擇器。
接下來,使用 kubectl apply 執行部署文件,創建 MySQL 多副本集群:
$ kubectl apply -f mysql.yaml deployment.apps/mysql created service/mysql created
通過kubectl get
命令可以查看 MySQL 部署狀態:
$ kubectl get pod,svc -l app=mysql NAME READY STATUS RESTARTS AGE pod/mysql-5f497d58bb-jctxv 1/1 Running 0 22s pod/mysql-5f497d58bb-rxxcx 1/1 Running 0 22s pod/mysql-5f497d58bb-xprgl 1/1 Running 0 22s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/mysql ClusterIP 10.0.0.43 <none> 3306/TCP 22s
在 MySQL 容器中,可以通過以下命令查看當前狀態下,MySQL 集群的節點數:
$ mysql -u root -p123456 -e "SELECT @@server_id, @@hostname;" -h mysql.default.svc.cluster.local +-------------+----------+ | @@server_id | @@hostname | +-------------+----------+ | 1 | mysql-5f497d58bb-xprgl | | 2 | mysql-5f497d58bb-rxxcx | | 3 | mysql-5f497d58bb-jctxv | +-------------+----------+
通過這個命令可以看到,當前 MySQL 集群共有三個節點,每個節點都有一個不同的 server_id 和 hostname。
最后,我們可以在 Kubernetes 中測試 MySQL 集群的可用性,比如在一個應用中使用 MySQL 數據庫來存儲和讀取數據。
通過 Kubernetes 的多副本部署,我們可以提供更高可用性的 MySQL 數據庫服務,同時通過使用“服務發現”機制,我們可以實現應用和數據庫的自動調度和管理。