Kubernetes集群版本1.18升级到1.19

Kubernetes 不支持跨多个版本升级!因此要1.18-1.19-1.20-1.21-1.22-1.23 这种逐步升级,当跨越多个版本时升级较为繁琐。

一、概述

1、升级注意事项

  • 下述说明了在升级过程中何时腾空每个节点。如果你正在对任何 kubelet 进行小版本升级, 你需要先腾空待升级的节点(或多个节点)。对于控制面节点,其上可能运行着 CoreDNS Pods 或者其它非常重要的负载。更多信息见腾空节点。
  • 升级后,因为容器规约的哈希值已更改,所有容器都会被重新启动。
  • 要验证 kubelet 服务在升级后是否成功重启,可以执行 systemctl status kubeletjournalctl -xeu kubelet 查看服务日志。

2、版本偏差策略

name apiserver kubelet
apiserver ±1
kubelet -2
kube-controller-manager, kube-scheduler -1
kube-proxy -2 与kubelet节点相同
kubectl ±1

3、当前集群环境

主机 系统 IP
loc-master35 CentOS 7.6 10.10.1.35
loc-node36 CentOS 7.6 10.10.1.36
loc-node37 CentOS 7.6 10.10.1.37

4、宏观升级流程

  • 升级主控制平面节点
  • 升级其他控制平面节点
  • 升级工作节点

二、升级控制平面节点

1、确认升级版本

# yum list --showduplicates kubeadm --disableexcludes=kubernetes
......
ubeadm.x86_64                         1.17.16-0                         kubernetes 
kubeadm.x86_64                        1.17.17-0                         kubernetes 
......
kubeadm.x86_64                        1.18.20-0                         kubernetes 
kubeadm.x86_64                        1.19.0-0                          kubernetes 
kubeadm.x86_64                        1.19.1-0                          kubernetes 
kubeadm.x86_64                        1.19.2-0                          kubernetes 
kubeadm.x86_64                        1.19.3-0                          kubernetes 
kubeadm.x86_64                        1.19.4-0                          kubernetes 
kubeadm.x86_64                        1.19.5-0                          kubernetes 
kubeadm.x86_64                        1.19.6-0                          kubernetes 
kubeadm.x86_64                        1.19.7-0                          kubernetes 
kubeadm.x86_64                        1.19.8-0                          kubernetes 
kubeadm.x86_64                        1.19.9-0                          kubernetes 
kubeadm.x86_64                        1.19.10-0                         kubernetes 
kubeadm.x86_64                        1.19.11-0                         kubernetes 
kubeadm.x86_64                        1.19.12-0                         kubernetes 
kubeadm.x86_64                        1.19.13-0                         kubernetes 
kubeadm.x86_64                        1.19.14-0                         kubernetes 
kubeadm.x86_64                        1.19.15-0                         kubernetes 
......
kubeadm.x86_64                        1.24.0-0                          kubernetes

2、升级控制平面节点

我们先升级第一个主控制节点,然后再升级其他控制节点,最后在升级其他工作节点。

2.1 kubeadm upgrade

  • 升级 kubeadm
# yum install kubeadm-1.19.12-0 --disableexcludes=kubernetes
  • 验证升级计划
# kubeadm upgrade plan  # 检查集群是否可以升级
......
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT   CURRENT       AVAILABLE
kubelet     3 x v1.18.0   v1.19.16

Upgrade to the latest stable version:

COMPONENT                 CURRENT   AVAILABLE
kube-apiserver            v1.18.0   v1.19.16
kube-controller-manager   v1.18.0   v1.19.16
kube-scheduler            v1.18.0   v1.19.16
kube-proxy                v1.18.0   v1.19.16
CoreDNS                   1.6.7     1.7.0
etcd                      3.4.3-0   3.4.13-0

You can now apply the upgrade by executing the following command:

	kubeadm upgrade apply v1.19.16

Note: Before you can perform this upgrade, you have to update kubeadm to v1.19.16.
......
_____________________________________________________________________
  • 选择升级到的版本
# kubeadm upgrade apply 1.19.12
......
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.19.12". Enjoy!

kubeadm upgrade 会自动对 kubeadm 在节点上所管理的证书执行续约操作。 如果需要略过证书续约操作,可以使用标志 --certificate-renewal=false。

# kubeadm upgrade apply 1.19.12  --certificate-renewal=false

2.2 腾空节点

kubectl drain 命令将节点标记为不可调度并驱逐所有负载

# kubectl drain loc-master35 --ignore-daemonsets

2.3 升级 kubelet 和 kubectl

# yum install kubelet-1.19.12-0 kubectl-1.19.12-0 --disableexcludes=kubernetes -y

# 重启 kubelet
# systemctl daemon-reload
# systemctl restart kubelet

2.4 取消对节点的保护

# kubectl uncordon loc-master35
node/loc-master35 uncordoned

3、 升级其他控制平面

假设有其他 master 的话,我们还需要对这些 master进行升级

# yum install kubeadm-1.19.12-0 kubelet-1.19.12-0 kubectl-1.19.12-0 --disableexcludes=kubernetes
# 
# kubeadm upgrade node          # 这一点与主不一样
# kubectl drain loc-master-xx --ignore-daemonsets
# systemctl daemon-reload
# systemctl restart kubelet
# kubectl uncordon loc-master-xx

三、升级工作节点

1、升级 kubeadm

# yum install kubeadm-1.19.12-0 --disableexcludes=kubernetes

2、kubeadm upgrade

# kubeadm upgrade node

3、腾空节点

kubectl drain 命令将节点标记为不可调度并驱逐所有负载

# kubectl drain loc-node36 --ignore-daemonsets

4、升级 kubelet 和 kubectl

# yum install kubelet-1.19.12-0 kubectl-1.19.12-0 --disableexcludes=kubernetes -y

# 重启 kubelet
# systemctl daemon-reload
# systemctl restart kubelet

5、取消对节点的保护

# kubectl uncordon loc-node36
node/loc-node36uncordoned

四、升级后检验

  • 查看节点状态
# kubectl get nodes -o wide 
NAME           STATUS   ROLES    AGE   VERSION    INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
loc-master35   Ready    master   33d   v1.19.12   10.10.1.35    <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.6.3
loc-node36     Ready    <none>   33d   v1.19.12   10.10.1.36    <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.6.3
loc-node37     Ready    <none>   33d   v1.19.12   10.10.1.37    <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.6.3
  • 查看插件是否正常
# kubectl logs -f kube-controller-manager-loc-master35 -n kube-system
  • 查看 kubelet 日志输出
# journalctl -f -u kubelet
...

五、工作原理

1、kubeadm upgrade apply

kubeadm upgrade apply 做了以下工作:

  • 检查你的集群是否处于可升级状态:
    • API 服务器是可访问的
    • 所有节点处于 Ready 状态
    • 控制面是健康的
  • 强制执行版本偏差策略。
  • 确保控制面的镜像是可用的或可拉取到服务器上。
  • 如果组件配置要求版本升级,则生成替代配置与/或使用用户提供的覆盖版本配置。
  • 升级控制面组件或回滚(如果其中任何一个组件无法启动)。
  • 应用新的 CoreDNS 和 kube-proxy 清单,并强制创建所有必需的 RBAC 规则。
  • 如果旧文件在 180 天后过期,将创建 API 服务器的新证书和密钥文件并备份旧文件。

2、kubeadm upgrade node

kubeadm upgrade node 在其他控制平节点上执行以下操作:

  • 从集群中获取 kubeadm ClusterConfiguration。
  • (可选操作)备份 kube-apiserver 证书。
  • 升级控制平面组件的静态 Pod 清单。
  • 为本节点升级 kubelet 配置

kubeadm upgrade node 在工作节点上完成以下工作:

  • 从集群取回 kubeadm ClusterConfiguration。
  • 为本节点升级 kubelet 配置。


Reference:
https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
https://kubernetes.io/releases/version-skew-policy/

你可能感兴趣的:(Kubernetes,kubernetes,容器,云原生)