Kubernetes MySQL 操作员是一个用于在 Kubernetes 集群内管理 MySQL InnoDB 集群设置的操作员。 它管理完整的生命周期,包括设置和维护,涵盖自动化升级和备份。
Kubernetes MySQL 操作员由 Oracle 的 MySQL 团队为您提供。
与所有 MySQL 项目一样,问题(包括错误和功能请求)都在此处跟踪:
通过 GitHub 提交的拉取请求也会在 bugs.mysql.com 上跟踪;相关信息请参见 CONTRIBUTING。
版权所有 (c) 2020, 2025, Oracle 和/或其附属公司.
许可证信息可以在 LICENSE 文件中找到。
此分发版本可能包含由第三方开发的材料。有关这些材料的许可证
和署名通知,请参阅 LICENSE 文件。
首先部署自定义资源定义 (CRDs):
$> kubectl apply -f https://raw.githubusercontent.com/mysql/mysql-operator/9.4.0-2.2.5/deploy/deploy-crds.yaml然后部署 Kubernetes MySQL 操作员:
$> kubectl apply -f https://raw.githubusercontent.com/mysql/mysql-operator/9.4.0-2.2.5/deploy/deploy-operator.yaml通过检查 mysql-operator 命名空间中的部署来验证操作员是否正在运行:
$> kubectl get deployment -n mysql-operator mysql-operator
NAME READY UP-TO-DATE AVAILABLE AGE
mysql-operator 1/1 1 1 1h或者,您可以使用 Helm;它是 Kubernetes 的包管理器。
安装 Helm 仓库:
$> helm repo add mysql-operator https://mysql.github.io/mysql-operator/
$> helm repo update然后使用刚刚添加的仓库部署操作员:
$> helm install mysql-operator mysql-operator/mysql-operator --namespace mysql-operator --create-namespace这将从 DockerHub 部署最新的 Kubernetes MySQL 操作员,并使用所有默认设置;尽管部署 可以通过各种选项进行自定义以覆盖内置默认值。部署的名称是 mysql-operator。详情请参见文档。
要创建 MySQL InnoDB 集群,首先创建一个包含用于在集群中执行管理任务的 MySQL root 用户凭据的密钥。例如:
$> kubectl create secret generic mypwds \
--from-literal=rootUser=root \
--from-literal=rootHost=% \
--from-literal=rootPassword="sakila"定义您的 MySQL InnoDB 集群,该集群引用密钥。例如:
apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
name: mycluster
spec:
secretName: mypwds
tlsUseSelfSigned: true
instances: 3
router:
instances: 1假设保存为 mycluster.yaml,部署它:
$> kubectl apply -f mycluster.yaml此示例创建一个包含三个 MySQL Server 实例和一个 MySQL Router 实例的 InnoDB 集群。 可以使用以下命令观察该过程:
$> kubectl get innodbcluster --watch
NAME STATUS ONLINE INSTANCES ROUTERS AGE
mycluster PENDING 0 3 1 2m6s
...
mycluster ONLINE 3 3 1 10s使用默认设置或自定义设置创建 MySQL InnoDB 集群安装。
以下是一个使用所有默认设置为名为 mycluster 的集群创建安装的示例:
$> helm install mycluster mysql-operator/mysql-innodbcluster或者进行自定义,此示例从命令行设置选项:
$> helm install mycluster mysql-operator/mysql-innodbcluster \
--namespace mynamespace \
--create-namespace \
--set credentials.root.user='root' \
--set credentials.root.password='supersecret' \
--set credentials.root.host='%' \
--set serverInstances=3 \
--set routerInstances=1在 Kubernetes 集群内创建了一个 MySQL InnoDB 集群 Service:
$> kubectl get service mycluster
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mycluster ClusterIP 10.110.228.51 <none> 3306/TCP,33060/TCP,6446/TCP,6448/TCP,6447/TCP,6449/TCP,6450/TCP 26h这些端口代表 MySQL 协议和 X 协议的读写端口和只读端口。
使用 describe 或参见文档获取更多信息。
此示例使用 container-registry.oracle.com/mysql/community-operator 镜像创建一个名为 myshell 的新容器,并立即执行 MySQL Shell:
$> kubectl run --rm -it myshell --image=container-registry.oracle.com/mysql/community-operator -- mysqlsh
If you don't see a command prompt, try pressing enter.
MySQL JS> \connect root@mycluster
Creating a session to 'root@mycluster'
Please provide the password for 'root@mycluster': ******
MySQL mycluster JS>使用 root@mycluster 连接假设使用默认命名空间;完整形式是 {innodbclustername}.{namespace}.svc.cluster.local。
每个 MySQL 实例都安装了 MySQL Shell,可在故障排除时使用。
Kubernetes 端口转发从您的本地机器创建重定向,以使用 MySQL 客户端,如 mysql 或 MySQL Workbench。
例如,使用 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.
...提示时,输入创建密钥时使用的密码。
请参阅官方文档:
如需其他下载和源代码,请访问:
为 Kubernetes MySQL 操作员做贡献,请参见:
- 参见 CONTRIBUTING