RKE UP 启动的集群如何单独升级kube-controller-manager组件的版本?

基本信息

RKE 版本:
rke version v1.2.6

K8S 版本:
v1.20.4

Docker 版本: (docker version,docker info)
docker-ce19.03.4

操作系统和内核: (cat /etc/os-release, uname -r)
centos7.6 5.4.90-1.el7.elrepo.x86_64

主机类型和供应商: (VirtualBox/Bare-metal/AWS/GCE/DO)
VirtualBox

由于场景需要,要对rke up启动的集群升级单独的k8s组件的版本,然而,在rke中,所有的K8s组件都被打包在一个hyperkube:v1.20.4-rancher1镜像中,是否有官方的升级单个组件的方式?

目前我们采用的方式如下:

  1. 将hyperkube:v1.20.4-rancher1镜像中的kube-controller-manager二进制替换为编译出来的新的kube-controller-manager二进制,使用与原来一致的tag,然后将新的hyperkube镜像上传到镜像仓库中;
  2. 在集群的所有master节点,删除kube-controller-manager容器;
  3. 在集群的所有master节点,重新拉取hyperkube镜像;
  4. 重新执行rke up,会在所有master节点重新拉起kube-controller-manager容器;

这种升级方式是否是官方支持的升级方式?是否会引入一些未知的风险?

这并不是推荐的升级方式,确实会有未知的风险。出了问题比较难排查。

有推荐的升级方式吗?

如果说的是单独升级 controller-manager,则没有推荐的方式。
目前只推荐整个版本升级,比方式 v1.20.4 → v1.20.15
如果你们有定制的改动,可以自行构建 hyperkube,然后打包镜像,在cluster.yaml中全部替换掉 rke 的hyperkube镜像。

整个版本升级,我的rke版本为v1.2.6,rke config --list-version --all命令显示支持的版本为v1.18.16-rancher1-1、v1.20.4-rancher1-1、v1.16.15-rancher1-4、v1.17.17-rancher2-1、v1.19.8-rancher1-1,这种条件下,我可以将hyperkube的镜像tag打成v1.20.15的形式,然后在cluster.yml中指定吗

参考这个文档里面的 cluster.yml 文件示例 | Rancher文档 system_images部分

好的,感谢~~