MySQL Operator 封面圖:在 Kubernetes 上部署高可用 MySQL

MySQL Operator:在 Kubernetes 叢集部署高可用 MySQL InnoDB Cluster

內容概述

MySQL Operator 是由 Oracle 官方開發的 Kubernetes Operator,專為管理 MySQL InnoDB Cluster 設計。它能自動化部署、升級、備份與監控等工作,讓開發者與系統管理員能更輕鬆地在 Kubernetes 上運行高可用的 MySQL 叢集。

應用場景

  • 雲原生應用:需要在 Kubernetes 上部署可擴展且高可用的 MySQL 資料庫。
  • DevOps 團隊:希望透過 CI/CD 流程自動化資料庫部署與管理。
  • 多租戶平台:需要為不同租戶提供獨立且可管理的 MySQL 叢集。

技術特點

  • 完整生命週期管理:自動處理部署、升級、備份與恢復等任務。
  • 支援 InnoDB Cluster:利用 MySQL Group Replication 提供高可用性。
  • 整合 MySQL Router:簡化應用程式的連線管理。
  • 自動 TLS 憑證管理:支援自簽憑證,提升安全性。
  • 可擴展性:透過 Helm 或 YAML 自訂部署設定。

其他整合

  • Helm Chart:官方提供 Helm Chart,簡化部署流程。
  • 私有映像庫支援:可從私有映像庫部署 Operator 與叢集。
  • 備份與還原:支援備份 MySQL 資料並從備份中還原。

安裝步驟

本文查核時 MySQL Operator 的最新版本標籤為 26.10.0-2.3.1,以下指令皆以此版本為準。

使用 kubectl 安裝

1. 部署 CRDs(Custom Resource Definitions):

kubectl apply -f https://raw.githubusercontent.com/mysql/mysql-operator/26.10.0-2.3.1/deploy/deploy-crds.yaml

2. 部署 MySQL Operator:

kubectl apply -f https://raw.githubusercontent.com/mysql/mysql-operator/26.10.0-2.3.1/deploy/deploy-operator.yaml

3. 確認 Operator 是否運行:

kubectl get deployment -n mysql-operator mysql-operator

使用 Helm 安裝

1. 新增 Helm 倉庫並更新:

helm repo add mysql-operator https://mysql.github.io/mysql-operator/
helm repo update

2. 安裝 MySQL Operator:

helm install mysql-operator mysql-operator/mysql-operator --namespace mysql-operator --create-namespace

注意:新版 Operator 在第一次啟動後會固定其管理範圍(全域或指定命名空間),之後無法直接修改,需要移除後重新安裝。安裝前請先決定 deployment.namespaces 等設定。

存取和操作

建立 MySQL InnoDB Cluster

1. 建立包含 root 使用者憑證的 Secret:

kubectl create secret generic mypwds \
  --from-literal=rootUser=root \
  --from-literal=rootHost=% \
  --from-literal=rootPassword="sakila"

範例密碼 sakila 取自官方文件,正式環境請務必改成高強度密碼。

2. 建立 InnoDBCluster 資源(mycluster.yaml):

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: mycluster
spec:
  secretName: mypwds
  tlsUseSelfSigned: true
  instances: 3
  router:
    instances: 1

3. 部署叢集:

kubectl apply -f mycluster.yaml

4. 監控叢集狀態:

kubectl get innodbcluster --watch

狀態從 PENDING 變為 ONLINE,且 ONLINE 數量為 3,代表 3 個 MySQL 實例與 1 個 MySQL Router 都已就緒。

連接至 MySQL 叢集

Operator 會自動建立 Kubernetes Service,供應用程式連接:

kubectl get service mycluster

您可以使用 kubectl port-forward 搭配 MySQL 用戶端進行連接:

kubectl port-forward service/mycluster mysql
Forwarding from 127.0.0.1:3306 -> 6446
Forwarding from [::1]:3306 -> 6446

mysql -h127.0.0.1 -P3306 -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
...

小技巧

  • 備份與還原:參考官方手冊的「Handling MySQL Backups」章節設定備份,並定期測試還原流程。
  • 自訂設定:透過修改 Helm values.yaml 或 YAML 檔案,自訂叢集設定。
  • 查看日誌:依官方手冊的「Viewing Logs」章節查看 Operator 與 MySQL 實例的日誌,及早發現問題。
  • 私有映像庫:內網環境可將映像檔複製到私有映像庫後再部署。

適用規模與維運成本

  • 適用規模:已經有穩定運作的 Kubernetes 叢集,且需要高可用 MySQL 的團隊。InnoDB Cluster 範例需要 3 個 MySQL 實例加上 MySQL Router,資源需求明顯高於單一 MySQL。
  • 儲存:MySQL 實例的資料存放在 PersistentVolume,叢集需要能提供可靠的持久化儲存;儲存的效能與可靠性直接影響資料庫。
  • 維運成本:需要同時熟悉 Kubernetes 與 MySQL Group Replication;升級 Operator 與 MySQL、備份還原演練、故障排除都需要投入人力。
  • 替代方案:小型專案或測試環境,單一 MySQL 容器或雲端代管資料庫(如各家雲端的託管 MySQL 服務)通常更簡單;是否值得自建,取決於團隊的維運能力。

教學影片

影片來源:MySQL/YouTube

參考連結

成本與風險摘要

  • 適用對象與規模:有 Kubernetes 維運經驗、需要高可用 MySQL 的團隊。
  • 成本(硬體、訂閱、授權):MySQL Operator 採 UPL 1.0 授權,免費;主要成本是 3 個以上 MySQL 實例的運算資源與持久化儲存。
  • 維護時間:中到高;需要規劃升級、備份與還原演練。
  • 資安注意事項:不要使用範例密碼;root 帳號的 rootHost % 允許任意來源連線,正式環境應限制來源並另建應用程式專用帳號;資料庫 Service 不要直接對外開放。
  • 常見誤區:以為有 Operator 就不需要備份;沒有測試過還原流程;在沒有可靠持久化儲存的叢集上部署資料庫。
  • 不建議使用的情況:小型網站或單機環境、團隊沒有 Kubernetes 維運人力時。
  • 測試日期與版本號:資料查核日期:2026-10-28;依官方 README 對照 MySQL Operator 26.10.0-2.3.1(範例為作者早期實作,本次未重新實機測試)。
返回頂端