Kubernetes---kubeadm版本升级

2022-11-21 20:56:07 浏览数 (1)

Kubernetes 的版本更新迭代算是频繁的了,每个三个月发布一个小版本。为了使集群中一直跟随着版本前进,如果一直不更新,会导致新功能无法使用,落后新版本太多版本,不方便升级。

升级策略

  • 始终保持最新
  • 每半年升级一次,资源会落后社区1~2个小版本(推荐)
  • 一年升级一次,或者更长,落后版本太多

需要考虑的问题

落后2个大版本以上的,需要考虑支持的功能以及参数,Kubernetes 会将一些功能删除,或者更改资源名称。类似这样的情况,Kubernetes 其实也是给了使用者很好的兼容方式的,每个大版本会兼容前两个大版本中的功能,如 1.19 可以兼容 1.17 和 1.18 ,并不兼容 1.16,如果从 1.16 直接升级到 1.19,很有可能有些功能或者参数在 1.19 已经不支持了。

如果已经落后版本太多,还想要升级也是有办法的,需要递归升级,如 1.12 先升级到 1.14 ,1.14 再升级到 1.16,以此类推。

升级流程

升级管理节点 —> 升级其余管理节点 —> 升级worker节点

注意事项:升级前必须备份所有组件及数据,例如 etcd

升级操作

升级管理节点 查看所有已有版本 升级之前要清楚版本有哪些

代码语言:javascript复制
$ yum list --showduplicates kubeadm --disableexcludes=kubernetes
Installed Packages
kubeadm.x86_64                             1.21.1-0                               @kubernetes
Available Packages
kubeadm.x86_64                             1.6.0-0                                kubernetes 
kubeadm.x86_64                             1.6.1-0                                kubernetes 
...
kubeadm.x86_64                             1.20.8-0                               kubernetes 
kubeadm.x86_64                             1.21.0-0                               kubernetes 
kubeadm.x86_64                             1.21.1-0                               kubernetes 
kubeadm.x86_64                             1.21.2-0                               kubernetes

可以看到已安装的是 1.21.1-0,最新版是 1.21.2-0,这里跨的版本是相当小了。

升级 kubeadm

代码语言:javascript复制
yum -y install kubeadm-1.21.2-0 --disableexcludes=kubernetes

驱逐 node 上的 pod 因为在升级过程中可能会重启 kubelet 服务,导致 pod 的故障

代码语言:javascript复制
kubectl drain <节点名称> --ignore-daemonsets

检查集群是否可以升级

代码语言:javascript复制
$ kubeadm upgrade plan
...
You can now apply the upgrade by executing the following command:

    kubeadm upgrade apply v1.21.2

_____________________________________________________________________


The table below shows the current state of component configs as understood by this version of kubeadm.
Configs that have a "yes" mark in the "MANUAL UPGRADE REQUIRED" column require manual config upgrade or
resetting to kubeadm defaults before a successful upgrade can be performed. The version to manually
upgrade to is denoted in the "PREFERRED VERSION" column.

API GROUP                 CURRENT VERSION   PREFERRED VERSION   MANUAL UPGRADE REQUIRED
kubeproxy.config.k8s.io   v1alpha1          v1alpha1            no
kubelet.config.k8s.io     v1beta1           v1beta1             no
_____________________________________________________________________

如上 kubeadm upgrade apply v1.21.2 即可升级

执行升级 如果是要升级最新版本,复制命令执行即可,如果非最新版本,切记看好版本再升级,要和 kubeadm 的版本绝对对应的。

代码语言:javascript复制
$ kubeadm upgrade apply v1.21.2
...
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.21.2". Enjoy!

[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.

# 这一步操作升级好的组件有:
# apiserver,controller-manager,coredns,scheduler

取消不可调度

代码语言:javascript复制
 kubectl uncordon <节点名称>

升级 kubelet 和 kubectl

代码语言:javascript复制
yum -y install kubelet-1.21.2-0 kubectl-1.21.2-0 --disableexcludes=kubernetes

重启 kubelet

代码语言:javascript复制
systemctl daemon-reload && systemctl restart kubelet

验证版本

代码语言:javascript复制
$ kubectl get nodes
NAME    STATUS   ROLES                  AGE   VERSION
feiyi   Ready    control-plane,master   37d   v1.21.2

升级 worker 节点 升级 kubeadm

代码语言:javascript复制
yum -y install kubeadm-1.21.2-0 --disableexcludes=kubernetes

驱逐 node 上的 pod 在 master 节点操作

代码语言:javascript复制
kubectl drain <节点名称> --ignore-daemonsets

升级 kubelet 配置

代码语言:javascript复制
kubectl upgrade node

升级 kubelet 和 kubectl

代码语言:javascript复制
yum -y install kubelet-1.21.2-0 kubectl-1.21.2-0 --disableexcludes=kubernetes

重启 kubelet

代码语言:javascript复制
systemctl daemon-reload && systemctl restart kubelet

取消不可调度 在 master 操作

代码语言:javascript复制
 kubectl uncordon <节点名称>

0 人点赞