Skip to content

initchu/mysql-operator

Repository files navigation

Kubernetes MySQL 操作员

介绍

Kubernetes MySQL 操作员是一个用于在 Kubernetes 集群内管理 MySQL InnoDB 集群设置的操作员。 它管理完整的生命周期,包括设置和维护,涵盖自动化升级和备份。

Kubernetes MySQL 操作员由 Oracle 的 MySQL 团队为您提供。

问题和拉取请求

与所有 MySQL 项目一样,问题(包括错误和功能请求)都在此处跟踪:

通过 GitHub 提交的拉取请求也会在 bugs.mysql.com 上跟踪;相关信息请参见 CONTRIBUTING

许可证

版权所有 (c) 2020, 2025, Oracle 和/或其附属公司.

许可证信息可以在 LICENSE 文件中找到。 此分发版本可能包含由第三方开发的材料。有关这些材料的许可证 和署名通知,请参阅 LICENSE 文件。

Kubernetes MySQL 操作员安装

使用 kubectl 和清单文件

首先部署自定义资源定义 (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

或者,您可以使用 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 集群安装

使用 kubectl

要创建 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

使用 Helm

使用默认设置或自定义设置创建 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

连接到 MySQL InnoDB 集群

在 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 或参见文档获取更多信息。

使用 MySQL Shell

此示例使用 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 操作员做贡献,请参见:

About

MySQL Operator for k8s

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published