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默认原生命令,解压后文件树状图如下
-
cri-containerd-1.6.9-*.tar.gz:包含containerd相关二进制文件和ctr命令,还包含crictl相关的命令和二进制文件以及runc,crictl命令针对containerd作为k8s集群底层容器优化了命令和命令执行结果的展示方式,详情见官方介绍,k8s集群中建议使用此包,解压后文件树状图如下
-
cri-containerd-cni-1.6.9-*.tar.gz: 包含containerd相关二进制文件和ctr命令和crictl相关的命令和二进制文件外,还包含cni网络插件,由于我们使用calico网络插件,所以不使用此包。解压后文件树状图如下
-
解压至根目录
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是否启动成功。如果出现以下报错则需要升级依赖包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
本文来自博客园,作者:鲜小橙,转载请注明原文链接:https://www.cnblogs.com/big-cousin/p/17571831.html