MOCO (MySQL Operator for Kubernetes) 是一款功能強大的雲端原生工具,旨在簡化 Kubernetes 內的 MySQL 叢集管理。 它可以自動執行配置、擴展、備份和維護等關鍵任務,確保高可用性和可靠性。 MOCO 利用 Kubernetes 資源來有效地建立、監控和管理您的 MySQL 部署。
MOCO 支援特定的 MySQL 和 Kubernetes 版本。 目前相容於 MySQL 8.0.28、8.0.37、8.0.39、8.0.40、8.4.3,Kubernetes 1.29、1.30、1.31。
MOCO 如何運作
MOCO 使用 Kubernetes StatefulSets 設定 MySQL 叢集。這涉及:
部署服務
MOCO部署以下服務:
部署類型
備份與復原
MOCO 有助於定期完整備份和增量備份儲存在與 Amazon S3 相容的物件儲存中。 特點包括:
物件儲存桶
儲存桶是S3物件的管理單元。 MOCO 將備份儲存在指定的儲存桶中。 請注意,MOCO 不會自動刪除舊備份;您需要為此配置儲存桶生命週期管理。
更多詳細資訊可在提供的連結中找到。
處理有問題的 Pod
MOCO 自動偵測並隔離資料不一致的 MySQL 節點(錯誤的 Pod),防止複製問題。 如果需要,也可以手動刪除。
複製管理
MOCO利用半同步複製來確保資料一致性,確保主節點在提交交易之前將更改寫入副本。 透過將副本提升為主副本,故障轉移可實現自動化,從而最大程度地減少中斷。 MOCO 還監控複製延遲以保持同步和效能。
有狀態與無狀態
由於 MySQL 的持久性儲存需求,MOCO 部署本質上是有狀態的。 Kubernetes StatefulSets 確保:
快速入門
有兩種安裝方式:
使用原始清單:
<code class="language-bash">curl -fsLO https://github.com/cybozu-go/moco/releases/latest/download/moco.yaml kubectl apply -f moco.yaml</code>
使用 Helm Chart:
<code class="language-bash">helm repo add moco https://cybozu-go.github.io/moco/ helm repo update helm install --create-namespace --namespace moco-system moco moco/moco</code>
透過 config/
目錄 (kustomize) 支援清單自訂。
叢集建立
一個新叢集指定一個可寫實例作為主實例;所有其他都是唯讀副本。 以下 YAML 建立一個具有 pod 反親和性和資源限制的三節點叢集:
<code class="language-yaml">apiVersion: moco.cybozu.com/v1beta2 kind: MySQLCluster metadata: namespace: default name: test spec: replicas: 3 podTemplate: spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app.kubernetes.io/name operator: In values: - mysql - key: app.kubernetes.io/instance operator: In values: - test topologyKey: "kubernetes.io/hostname" containers: - name: mysqld image: ghcr.io/cybozu-go/moco/mysql:8.4.3 resources: limits: cpu: "10" memory: "10Gi" volumeClaimTemplates: - metadata: name: mysql-data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi</code>
其他範例清單位於範例目錄中。
群集使用
kubectl moco
外掛程式(在 GitHub 版本上提供)提供對 MOCO MySQL 執行個體的外部存取。 服務(moco-test-primary.foo.svc
命名空間中 moco-test-replica.foo.svc
叢集的 test
和 foo
)允許網路存取。
叢集狀態監控
使用 kubectl get mysqlcluster
和 kubectl describe mysqlcluster
監控叢集運作狀況、可用性和最近的事件。
日誌存取
使用kubectl logs
存取mysqld錯誤和慢速查詢日誌。
切換與故障轉移
MOCO 處理自動切換和故障轉移以確保高可用性。 可以透過kubectl moco switchover CLUSTER_NAME
進行手動切換。
恢復錯誤的副本
使用kubectl delete
刪除錯誤副本的PVC和Pod。
參考:https://www.php.cn/link/2bbc1cc8fd0e5f9e0b91f01828c87814
以上是Kubernetes 的 MySQL Operator MOCO 入門第 1 部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!