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 StatefulSet を使用して MySQL クラスターをプロビジョニングします。これには以下が含まれます:
導入サービス
MOCO は次のサービスを展開しています:
展開タイプ
バックアップと復元
MOCO は、Amazon S3 互換のオブジェクト ストレージに保存される定期的な完全バックアップおよび増分バックアップを容易にします。 機能は次のとおりです:
オブジェクト ストレージ バケット
バケットはオブジェクトの S3 管理単位です。 MOCO は、指定されたバケット内にバックアップを保存します。 MOCO は古いバックアップを自動的に削除しないことに注意してください。これにはバケットのライフサイクル管理を構成する必要があります。
詳細については、提供されたリンクをご覧ください。
問題のあるポッドの処理
MOCO は、一貫性のないデータ (誤ったポッド) を持つ MySQL ノードを自動的に検出して隔離し、レプリケーションの問題を防ぎます。 必要に応じて手動で削除することも可能です。
レプリケーション管理
MOCO はデータの一貫性のために半同期レプリケーションを利用し、トランザクションをコミットする前にプライマリ ノードがレプリカに変更を書き込むことを保証します。 レプリカをプライマリに昇格させることでフェールオーバーが自動化され、中断が最小限に抑えられます。 MOCO は、同期とパフォーマンスを維持するためにレプリケーションの遅延も監視します。
ステートフルとステートレス
MOCO デプロイメントは、MySQL の永続ストレージ要件により、本質的にステートフルです。 Kubernetes StatefulSet は以下を保証します:
クイックスタート
2 つのインストール方法が利用可能です:
生のマニフェストの使用:
<code class="language-bash">curl -fsLO https://github.com/cybozu-go/moco/releases/latest/download/moco.yaml kubectl apply -f moco.yaml</code>
Helm チャートの使用:
<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) を介してサポートされています。
クラスターの作成
新しいクラスターは、1 つの書き込み可能なインスタンスをプライマリとして指定します。他のものはすべて読み取り専用レプリカです。 次の YAML は、ポッドの反アフィニティとリソース制限を備えた 3 ノードのクラスターを作成します。
<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>
追加のサンプル マニフェストは、example ディレクトリにあります。
クラスターの使用状況
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 とポッドを削除します。
参考:https://www.php.cn/link/2bbc1cc8fd0e5f9e0b91f01828c87814
以上がKubernetes 用 MySQL Operator MOCO の入門パート 1の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。