容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和叢集

RadonDB發表於2022-03-25

作者:程潤科 資料庫研發工程師

編輯:張莉梅 高階文件工程師

視訊:錢芬 高階測試工程師

本文將演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes 2.X(Operator)的步驟,快速實現 MySQL 高可用叢集部署,以及部署叢集的校驗和解除安裝方式。

部署版本為 RadonDB MySQL Kubernetes 2.1.2

部署準備

  • Kubernetes 叢集
  • MySQL 客戶端工具

部署過程

步驟 1: 新增 Helm 倉庫

新增 Helm 倉庫 radondb

helm repo add radondb https://radondb.github.io/radondb-mysql-kubernetes/

校驗倉庫資訊,可檢視到名為 radondb/mysql-operator 的 chart。

$ helm search repo
NAME                            CHART VERSION   APP VERSION                     DESCRIPTION                 
radondb/mysql-operator          0.1.0           v2.1.2                          Open Source,High Availability Cluster,based on MySQL                     

步驟 2: 部署 Operator

以下指定 release 名為 demo , 建立一個名為 demo-mysql-operator 的 Deployment[1]。

helm install demo radondb/mysql-operator

在這一步中,預設將同時建立叢集所需的 CRD[2]。

步驟 3: 部署 RadonDB MySQL 叢集

執行以下指令,以預設引數為 CRD mysqlclusters.mysql.radondb.com 建立一個例項,即建立 RadonDB MySQL 叢集。

kubectl apply -f https://github.com/radondb/radondb-mysql-kubernetes/releases/latest/download/mysql_v1alpha1_mysqlcluster.yaml

自定義叢集部署引數,可參考 配置引數[3]。

部署校驗

校驗 RadonDB MySQL Operator

檢視 demo 的 Deployment 和對應監控服務,回顯如下資訊則部署成功。

$ kubectl get deployment,svc
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
demo-mysql-operator   1/1     1            1           7h50m

NAME                             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/mysql-operator-metrics   ClusterIP   10.96.142.22    <none>        8443/TCP   8h

校驗 RadonDB MySQL 叢集

執行如下命令,將檢視到如下 CRD。

$ kubectl get crd | grep mysql.radondb.com
backups.mysql.radondb.com                             2021-11-02T07:00:01Z
mysqlclusters.mysql.radondb.com                       2021-11-02T07:00:01Z
mysqlusers.mysql.radondb.com                          2021-11-02T07:00:01Z

以預設部署為例,執行如下命令將檢視到名為 sample-mysql 的三節點 RadonDB MySQL 叢集及用於訪問節點的服務。

$ kubectl get statefulset,svc
NAME           READY   AGE
sample-mysql   3/3     7h33m

NAME                             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/sample-follower          ClusterIP   10.96.131.84    <none>        3306/TCP   7h37m
service/sample-leader            ClusterIP   10.96.111.214   <none>        3306/TCP   7h37m
service/sample-mysql             ClusterIP   None            <none>        3306/TCP   7h37m

訪問叢集

在 Kubernetes 叢集內,支援使用 service_name 或者 clusterIP 方式,訪問 RadonDB MySQL。

RadonDB MySQL 提供 Leader 和 Follower 兩種服務,分別用於客戶端訪問主從節點。Leader 服務始終指向主節點(可讀寫),Follower 服務始終指向從節點(只讀)。

file

RadonDB MySQL 叢集架構圖

以下為客戶端與資料庫在同一 Kubernetes 叢集內,訪問 RadonDB MySQL 的方式。

當客戶端的與資料庫部署在不同 Kubernetes 叢集,請參考 Kubernetes 訪問叢集中的應用程式[4],配置埠轉發、負載均衡等連線方式。

ClusterIP 方式

RadonDB MySQL 的高可用讀寫 IP 指向 Leader 服務的 clusterIP,高可用只讀 IP 指向 Follower 服務的 clusterIP

mysql -h <clusterIP> -P <mysql_Port> -u <user_name> -p

以下示例使用者名稱為 radondb_usr, Leader 服務的 clusterIP 為 10.10.128.136 ,連線示例如下:

mysql -h 10.10.128.136 -P 3306 -u radondb_usr -p

service_name 方式

Kubernetes 叢集的 Pod 之間支援通過 service_name 方式訪問 RadonDB MySQL。

service_name 方式不適用於從 Kubernetes 叢集的物理機訪問資料庫 Pod。
連線 Leader 服務(RadonDB MySQL 主節點)

mysql -h <leader_service_name>.<namespace> -u <user_name> -p

使用者名稱為 radondb_usr,release 名為 sample,RadonDB MySQL 名稱空間為 default ,連線示例如下:

mysql -h sample-leader.default -u radondb_usr -p

連線 Follower 服務(RadonDB MySQL 從節點)

mysql -h <follower_service_name>.<namespace> -u <user_name> -p

使用者名稱為 radondb_usr,release 名為 sample,RadonDB MySQL 名稱空間

為 default ,連線示例如下:

mysql -h sample-follower.default -u radondb_usr -p  

解除安裝

解除安裝 Operator

解除安裝當前名稱空間下 release 名為 demo 的 RadonDB MySQL Operator。

helm delete demo

解除安裝叢集

解除安裝 release 名為 sample RadonDB MySQL 叢集。

kubectl delete mysqlclusters.mysql.radondb.com sample

解除安裝自定義資源

kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlclusters.mysql.radondb.com
kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlusers.mysql.radondb.com
kubectl delete customresourcedefinitions.apiextensions.k8s.io backups.mysql.radondb.com

引用參考

  1. Deploymenthttps://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/
  2. CRDhttps://kubernetes.io/zh/docs/concepts/extend-kubernetes/api-extension/custom-resources/
  3. 配置引數https://github.com/radondb/radondb-mysql-kubernetes/blob/main/docs/zh-cn/config_para.md
  4. Kubernetes 訪問叢集中的應用程式https://kubernetes.io/zh/docs/tasks/access-application-cluster/

*相關部署視訊可至 RadonDB 開源社群 B 站賬號觀看(搜尋:RadonDB)

相關文章