应用 MySQL Operator 的最新发布 CRD 来创建一个新的 MySQL Operator 部署,以替换旧的部署。 新的 Operator 启动并准备就绪后,旧的 Operator 将终止,这不会导致停机。
kubectl apply -f https://raw.githubusercontent.com/mysql/mysql-operator/trunk/deploy/deploy-crds.yaml
kubectl apply -f https://raw.githubusercontent.com/mysql/mysql-operator/trunk/deploy/deploy-operator.yaml
这只会更新 MySQL Operator,而不会更新关联的 MySQL InnoDB 集群。
在 URL 中使用 trunk
引用最新的 Kubernetes 版 MySQL Operator 版本,因为 Github 会在发布时更新。 或者,将 URL 中的 trunk
替换为特定的 标记的发布版本。
这假设您已经升级了 MySQL Operator。
我们建议使用 MySQL Shell 的 checkForServerUpgrade() 实用程序来确认 MySQL InnoDB 集群是否已准备好升级。 此示例创建一个临时的 8.4.0 Pod(其中包含 MySQL Shell 8.4.0),以检查名为 mycluster
的 InnoDB 集群是否兼容升级到 MySQL 8.4.0
$> kubectl run --image=container-registry.oracle.com/mysql/community-operator:8.4.0-2.1.3 \
--rm -it mysh -- mysqlsh -uroot -p -hmycluster -- util checkForServerUpgrade
...
If you don't see a command prompt, try pressing enter.
******
Save password for 'root@mycluster'? [Y]es/[N]o/Ne[v]er (default No): N
The MySQL server at mycluster:33060, version 8.3.0 - MySQL Community Server -
GPL, will now be checked for compatibility issues for upgrade to MySQL 8.4.0.
To check for a different target server version, use the targetVersion option...
1) Issues reported by 'check table x for upgrade' command
No issues found
Errors: 0
Warnings: 0
Notices: 0
No known compatibility errors or issues were found.
Session ended, resume using 'kubectl attach mysh -c mysh -i -t' command when the pod is running
pod "mysh" deleted
一种常见的升级方法是修补 MySQL 服务器版本。 例如,这会将名为 mycluster 的 MySQL InnoDB 集群的 MySQL 服务器版本更新为 8.4.0
kubectl patch ic mycluster -p '{"spec": { "version": "8.4.0" } }' --type=merge
更新 MySQL InnoDB 集群的 spec.version
会更新以下内容
-
每个 MySQL 服务器,以滚动更新的方式
更新 MySQL InnoDB 集群会启动 MySQL 服务器的滚动重启;升级会按名称中从最高值到最低值的顺序替换 MySQL 服务器。 这可能会导致主服务器多次故障转移,具体取决于当前主服务器和已分配的主服务器。
MySQL Router 到指定的
spec.version
,除非在补丁中也显式设置了spec.router.version
每个服务器的 MySQL 辅助容器到已安装的 MySQL Operator 版本
MySQL Shell 到指定的
spec.version
MySQL InnoDB 集群在升级过程中保持可用,但相关的重启可能会中断现有连接。