RockLinux+kubeadm+k8s-1.22.2 升级到1.22.16

升级第一个控制面

安装kubeadm 1.22.16

yum install -y kubeadm-1.22.16-0 --disableexcludes=kubernetes

验证 kubeadm 版本

kubeadm version

检查kubeadm-config 酌情修改

kubectl edit -n kube-system cm kubeadm-config

内容如下

data:
  ClusterConfiguration: |
    apiServer:
      extraArgs:
        authorization-mode: Node,RBAC
        enable-admission-plugins: NodeRestriction,PodNodeSelector,PodTolerationRestriction
      timeoutForControlPlane: 4m0s
    apiVersion: kubeadm.k8s.io/v1beta3
    certificatesDir: /etc/kubernetes/pki
    clusterName: kubernetes
    controlPlaneEndpoint: api-server.solarfs.k8s:6443
    controllerManager:
      extraArgs:
        bind-address: 0.0.0.0
    dns:
      imageRepository: registry.hisun.netwarps.com/coredns
      imageTag: 1.8.0
    etcd:
      local:
        dataDir: /var/lib/etcd
        extraArgs:
          listen-client-urls: https://0.0.0.0:2379
          listen-metrics-urls: http://0.0.0.0:2381
          listen-peer-urls: https://0.0.0.0:2380
    imageRepository: registry.hisun.netwarps.com/google_containers
    kind: ClusterConfiguration
    kubernetesVersion: v1.22.2
    networking:
      dnsDomain: cluster.local
      podSubnet: 10.128.0.0/16
      serviceSubnet: 10.96.0.0/12
    scheduler:
      extraArgs:
        bind-address: 0.0.0.0

验证升级计划:

执行升级到 v1.22.16

正常情况下显示如下

手动升级你的 CNI 驱动插件

你的容器网络接口(CNI)驱动应该提供了程序自身的升级说明。 参阅插件页面查找你的 CNI 驱动, 并查看是否需要其他升级步骤。

如果 CNI 驱动作为 DaemonSet 运行,则在其他控制平面节点上不需要此步骤。

flannel v0.15.1 升级到 v0.20.1

下载flannel.yml

酌情修改配置,Network 的范围必须大于kubeadm-config 中 podSubnet 和 serviceSubnet 配置配置

创建flannel v0.20.1

删除在 namespace kube-system 中旧 kube-flannel-ds daemonset

对比服务配置

升级前的配置备份在 /etc/kubernetes/tmp/kubeadm-backup-manifests-2022-11-23-20-46-37,有可能手动修改过的服务配置,酌情使用kubeadm重新修改相关配置,参考:重新配置 kubeadm 集群

对于其它控制面节点

与第一个控制面节点相同,但是使用:

而不是:

此外,不需要执行 kubeadm upgrade plan 和更新 CNI 驱动插件的操作。

腾空节点

  • 通过将节点标记为不可调度并腾空节点为节点作升级准备:

升级 kubelet 和 kubectl

  • 升级 kubelet 和 kubectl:

  • 重启 kubelet

  • 重启kubelet 后 获取node 显示状态NotReady, 需要重启对应节点中 kube-flannel pod

解除节点的保护

  • 通过将节点标记为可调度,让其重新上线:

升级工作节点

工作节点上的升级过程应该一次执行一个节点,或者一次执行几个节点, 以不影响运行工作负载所需的最小容量。

升级 kubeadm

执行 "kubeadm upgrade"

  • 对于工作节点,下面的命令会升级本地的 kubelet 配置:

腾空节点

  • 将节点标记为不可调度并驱逐所有负载,准备节点的维护:

升级 kubelet 和 kubectl

  • 升级 kubelet 和 kubectl:

  • 重启 kubelet

取消对节点的保护

  • 通过将节点标记为可调度,让节点重新上线:

验证集群的状态

在所有节点上升级 kubelet 后,通过从 kubectl 可以访问集群的任何位置运行以下命令, 验证所有节点是否再次可用:

STATUS 应显示所有节点为 Ready 状态,并且版本号已经被更新。

STATUSNotReady 状态节点

删除对应节点 kube-flannel-ds pod, 触发重启kube-flannel-ds pod 后正常

参考:

https://v1-23.docs.kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-reconfigure/

https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/control-plane-flags/

https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-controller-manager/

Last updated

Was this helpful?