Loading

kubernetes 版本升级

kubeadm集群版本升级计划:

组件 升级前版本 升级后版本
kubeadm 1.22.5 1.24.15
kubelet&kubectl 1.22.5 1.24.15
Calico v3.21 v3.25.1
containerd 1.5.8 1.6.9

底层系统:Centos 8.2

集群节点分布:3master+7node

注:此升级文档仅适用于kubeadm部署的k8s集群。

一:ETCD备份

操作节点:k8s master 节点

1:etcdctl下载

wget https://github.com/etcd-io/etcd/releases/download/v3.5.9/etcd-v3.5.9-linux-amd64.tar.gz
tar -zxvf etcd-v3.5.9-linux-amd64.tar.gz
mv ./etcd-v3.5.9-linux-amd64/etcdctl /usr/local/bin/
etcdctl version

2:编辑etcd备份脚本

mkdir -pv /data/etcd_backup/
cd /data/etcd_backup/

echo '''timestamp=`date +%Y%m%d-%H%M%S` 

back_dir="/data/etcd_backup/" 

endpoints="https://127.0.0.1:2379" 

cert_file="/etc/kubernetes/pki/etcd/server.crt" 

key_file="/etc/kubernetes/pki/etcd/server.key" 

cacert_file="/etc/kubernetes/pki/etcd/ca.crt" 

ETCDCTL_API=3 /usr/local/bin/etcdctl \
--endpoints="${endpoints}" \
--cert=$cert_file \
--key=$key_file \
--cacert=$cacert_file \
snapshot save $back_dir/snapshot_$timestamp.db''' > etcd_backup.sh

sh etcd_backup.sh

二:Master升级

由于目前版本为1.22.5,升级到1.24.15,中间需要跨一个1.23大版本,官方升级方案不支持跨大版本升级,也就是需要先升级到1.23.x,然后再升级到1.24.15。

所以kubeadm详细升级顺序为:1.22.5 -> 1.23.17 -> 1.24.15

注:本文档仅介绍从1.22升级到1.23步骤,因为1.22升级到1.23涉及到网络插件Calico和containerd升级,从1.23升级到1.24不涉及。步骤1-4均为在第一台master节点上执行,如果环境为单master节点,请忽略步骤4 

1:kubeadm升级

  • 查看可用升级版本确认升级版本
    yum list --showduplicates kubeadm --disableexcludes=kubernetes

  • 升级第一个master节点
    yum install -y kubeadm-1.23.17-0 --disableexcludes=kubernetes

  • 确认kubeadm升级成功
    kubeadm version

  • 升级检查准备
    kubeadm upgrade plan

  • 升级
    kubeadm upgrade apply v1.23.17

2: 网络插件Calico升级

calico版本有对应支持的k8s版本,通过此链接可以查看到Calico v3.21版本最高支持k8s v1.22版本。通过此链接可以查看到Calico v3.25版本支持k8s v1.23-v1.26版本,此次k8s升级的最终版本为1.24,在Calico v3.25版本支持的范围内。

按照升级文档进行升级,注意需要按照最开始calico的安装方式进行升级,此环境中,calico最开始是通过operator方式进行安装的,所以此次按照operator的方式升级。

  • 下载operator yaml文件
    curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml -O

  • 通过kubectl 升级
    kubectl replace -f tigera-operator.yaml

  • 查看并等待升级完成
    kubectl get pod -A -w | grep calico
    等待pod所有状态全部为running后升级完成。

3: kubelet&kubectl升级

  • 清空节点(注意替换node-name)
    kubectl drain {node-name} --ignore-daemonsets

  • 升级kubelet&kubectl
    yum install -y kubelet-1.23.17-0 kubectl-1.23.17-0 --disableexcludes=kubernetes

  • 重启kubelet
    systemctl daemon-reload
    systemctl restart kubelet

  • 恢复节点(第一次升级到1.23.17时,后续还要还要升级containerd,忽略此步骤,第二次升级到1.24.15时不需要升级containerd,就需要执行此步骤)
    kubectl uncordon {node-name}

4: containerd升级

  • 关闭kubelet和containerd服务。
    systemctl stop kubelet
    systemctl stop containerd

  • 备份containerd配置文件(如果配置文件没有做任何客制化修改,请忽略此步骤。)
    cp /etc/containerd/config.toml /etc/containerd/config.toml.bak

  • 下载containerd 1.6.9
    wget https://github.com/containerd/containerd/releases/download/v1.6.9/cri-containerd-1.6.9-linux-amd64.tar.gz

    containerd下载界面有三种类型包,区别如下:

    • containerd-1.6.9-*.tar.gz:只包含containerd相关二进制文件和ctr命令。ctr命令为containerd默认原生命令,解压后文件树状图如下

    image-20230721145051981

    • cri-containerd-1.6.9-*.tar.gz:包含containerd相关二进制文件和ctr命令,还包含crictl相关的命令和二进制文件以及runc,crictl命令针对containerd作为k8s集群底层容器优化了命令和命令执行结果的展示方式,详情见官方介绍,k8s集群中建议使用此包,解压后文件树状图如下

      image-20230721144713076

    • cri-containerd-cni-1.6.9-*.tar.gz: 包含containerd相关二进制文件和ctr命令和crictl相关的命令和二进制文件外,还包含cni网络插件,由于我们使用calico网络插件,所以不使用此包。解压后文件树状图如下

      image-20230721145025798

  • 解压至根目录
    tar -zxvf cri-containerd-1.6.9-linux-amd64.tar.gz -C /

  • 初始化配置文件,然后根据备份的配置文件修改新配置文件,不建议直接使用旧配置文件,可能会出现配置文件版本不兼容问题。

    containerd config default > /etc/containerd/config.toml

  • 启动containerd和kubelet

    systemctl daemon-reload
    systemctl start containerd
    systemctl start kubelet
    

    建议在kubelet启动后通过journalctl -xeu kubelet观察kubelet是否启动成功。如果出现以下报错

    image-20230721153610074

    则需要升级依赖包libseccomp,参考此链接,执行命令:yum update -y libseccomp && systemctl restart kubelet

  • 恢复节点
    kubectl uncordon {node-name}

至此,master第一个节点k8s-master1 升级完成,同时网络插件也升级完成。

5: 其余master节点升级

  • kubeadm升级

yum install -y kubeadm-1.23.17-0 --disableexcludes=kubernetes
kubeadm upgrade node

  • kubelet&kubelet升级

    见步骤3

  • containerd升级
    见步骤4

三:Node升级

1: kubeadm升级

yum install -y kubeadm-1.23.17-0 --disableexcludes=kubernetes
kubeadm upgrade node

2: kubelet&kubelet升级

​ 见步骤二.3

3: containerd升级

​ 见步骤二.4

posted @ 2023-07-21 16:35  鲜小橙  阅读(72)  评论(0编辑  收藏  举报