如何使用 Oracle 的 Operator 在 Kubernetes 上运行 MySQL

如何使用 Oracle 的 Operator 在 Kubernetes 上运行 MySQL
最新回答
花舞花落泪

2026-10-21 17:16:53

在 Kubernetes 上使用 Oracle 的 MySQL Operator 运行 MySQL 数据库,可按照以下步骤操作:

1. 安装 MySQL Operator

使用 Helm 是安装 Operator 最便捷的方式。

  • 添加 Helm 仓库:
$ helm repo add mysql-operator
https://mysql.github.io/mysql-operator/
  • 更新仓库数据库:
$ helm repo update
  • 安装 Operator 到新命名空间:
$ helm install mysql-operator mysql-operator/mysql-operator --namespace mysql-operator --create-namespace

安装完成后,可通过helm list -n mysql-operator确认部署状态。

2. 创建根用户凭证密钥

每个数据库集群需关联一个包含 MySQL root 用户凭据的 Kubernetes Secret。

  • 创建 Secret 清单文件(secret.yaml):
apiVersion: v1kind: Secretmetadata: name: mysql-root-userstringData: rootHost: "%" rootUser: "root" rootPassword: "P@$$w0rd"
  • 应用清单:
$ kubectl apply -f secret.yaml3. 创建 MySQL 集群

通过自定义资源 InnoDBCluster 定义集群配置。

  • 创建集群清单文件(mysql.yaml):
apiVersion: mysql.oracle.com/v2kind: InnoDBClustermetadata: name: mysql-clusterspec: secretName: mysql-root-user instances: 3 tlsUseSelfSigned: true router: instances: 1
  • 关键参数说明:

    spec.secretName:必须与 Secret 名称一致。

    spec.instances:副本数量(最多 10 个)。

    spec.router.instances:MySQL Router 实例数(用于流量负载均衡)。

  • 应用清单:
$ kubectl apply -f mysql.yaml4. 验证集群状态

初始化需几分钟,通过以下命令检查 Pod 状态:

$ kubectl get pods

正常状态应显示所有副本和 Router 实例为 Running,例如:

NAME READY STATUS RESTARTS AGEmysql-cluster-0 2/2 Running 0 2mmysql-cluster-router-6b68f9b5cb-wbqm5 1/1 Running 0 2m5. 连接集群
  • 内部连接:Operator 会创建 Kubernetes Service,主机名格式为:

    <cluster-name>.<namespace-name>.svc.cluster.local

    示例集群的主机名为 mysql-cluster.default.svc.cluster.local,应用程序配置端口 3306 及 Secret 中定义的凭据即可连接。

  • 外部连接:使用 kubectl port-forward 临时暴露端口:

    $ kubectl port-forward service/mysql-cluster 3306

    通过本地工具(如 MySQL Client)连接:

    $ mysql -h127.0.0.1 -u root -p
6. 高级配置
  • 自定义 MySQL 配置:在 InnoDBCluster 清单中通过 mycnf 字段覆盖配置:

    spec: mycnf: | [mysqld] max_connections=500 innodb_ft_min_token_size=5
  • 调整存储容量:默认存储为 2Gi,可通过 datadirVolumeClaimTemplate 修改:

    spec: datadirVolumeClaimTemplate: resources: requests: storage: 10Gi

    注意:不支持就地扩容,需手动迁移数据。

  • 固定 MySQL 版本:通过 version 和 router.version 字段锁定版本:

    spec: version: 8.0.31 router: version: 8.0.31
7. 总结

Oracle 的 MySQL Operator 简化了 Kubernetes 环境下 MySQL 集群的部署与管理,支持自动化初始化、备份、升级及高可用配置。通过自定义资源 InnoDBCluster 可灵活调整副本数、存储、网络等参数,同时保留对 MySQL 和 Kubernetes 环境的完全控制权。