一、升级说明
- 官方建议在小版本之间进行升级,不建议大
原文链接:https://www.dqzboy.com 版本升级,更不建议直接跨大版本去升级 - 二进制升级时查看官方的更新日志,与当前使用版本进行比对,是否有大的变动,防止升级中出现版本API接口兼容性问题导致升级失败
- 在升级K8s集群时,二进制的方式只需要拷贝替换对应的二进制执行文件即可
- 升级过程:先升级ETCD,然后升级K8s的Master节点组件,最后升级K8s集群的工作节点组件(说明:我这里主节点跟工作节点都部署了kubelet和kube-proxy组件,所以进行升级这2个组件时,集群所有节点都需要升级,包括主节点)
- 升级ETCD和K8s主节点组件对Pod影响较小,升级Kubelet时会对Pod有影响
- 注意:升级操作必须在业务影响最小的情况下执行,比如晚上
二、升级ETCD
1、升级流程
- 备份ETCD数据
- 解压缩新版ETCD包
- 逐个停止ETCD
- 替换ETCD和ETCDCTL二进制执行文件
- 启动ETCD
2、升级过程
2.1:查看ETCD集群信息
查看当前ETCD集群版本
for node_ip in ${ETCD_IPS[@]}
do
echo ">>> ${node_ip}"
/opt/k8s/bin/etcdctl \
--endpoints=https://${node_ip}:2379 \
--cacert=/etc/kubernetes/cert/ca.pem \
--cert=/etc/etcd/cert/etcd.pem \
--key=/etc/etcd/cert/etcd-key.pem version
done
查看当前ETCD集群的leader
/opt/k8s/bin/etcdctl \
-w table --cacert=/opt/k8s/work/ca.pem \
--cert=/etc/etcd/cert/etcd.pem \
--key=/etc/etcd/cert/etcd-key.pem \
--endpoints=${ETCD_ENDPOINTS} endpoint status
2.2:备份ETCD节点数据
- 备份操作,请查看下面的文章
2.3:解压安装新版ETCD
注意:这里先停掉一台ETCD非leader节点的ETCD服务,然后解压安装新版的ETCD二进制执行文件,然后启动ETCD;启动成功之后,停止ETCD当前的主节点,让ETCD集群选出一个新的主节点出来,最后再停止另外的节点。按照下面的方式重复操作即可
systemctl stop etcd
tar -zxvf etcd-v3.6.0-linux-amd64.tar.gz
scp etcd-v3.6.0-rc.0-linux-amd64/etcd* [email protected]:/opt/k8s/bin
ssh [email protected] "chmod +x /opt/k8s/bin/*"
ssh [email protected] "systemctl start etcd"
ssh [email protected] "systemctl status etcd"
2.4:检查ETCD集群状态
for node_ip in ${ETCD_IPS[@]}
do
echo ">>> ${node_ip}"
/opt/k8s/bin/etcdctl \
--endpoints=https://${node_ip}:2379 \
--cacert=/etc/kubernetes/cert/ca.pem \
--cert=/etc/etcd/cert/etcd.pem \
--key=/etc/etcd/cert/etcd-key.pem endpoint health
done
2.5:检测K8s集群状态
~]# kubectl get no
三、升级Master节点
1、升级Apiserver
[root@k8s-master1 v1.24.0]# cd kubernetes/server/bin/
#创建备份目录
[root@k8s-master1 bin]# mkdir -p /opt/k8s/work/k8s-v1.24-rc_bak
#备份旧版本二进制执行文件
[root@k8s-master1 bin]# cp /opt/k8s/bin/kube-apiserver /opt/k8s/work/k8s-v1.24-rc_bak
[root@k8s-master1 bin]# systemctl stop kube-apiserver
[root@k8s-master1 bin]# cp -rp kube-apiserver /opt/k8s/bin/
#启动服务
[root@k8s-master1 bin]# systemctl start kube-apiserver.service
#检查服务运行状态
[root@k8s-master1 bin]# systemctl status kube-apiserver.service
#查看服务启动日志
[root@k8s-master1 bin]# journalctl -xe -u kube-apiserver.service -f
#查看版本
[root@k8s-master1 bin]# kube-apiserver --version
2、升级kube-control文章来源(Source):https://www.dqzboy.com ler-manager
[root@k8s-master1 bin]# mkdir -p /opt/k8s/work/k8s-v1.24-rc_bak
#备份旧版本二进制执行文件
[root@k8s-master1 bin]# cp /opt/k8s/bin/kube-controller-manager /opt/k8s/work/k8s-v1.24-rc_bak
[root@k8s-master1 bin]# systemctl stop kube-controller-manager
[root@k8s-master1 bin]# cp -rp kube-controller-manager /opt/k8s/bin/
#启动服务
[root@k8s-master1 bin]# systemctl start kube-controller-manager.service
#检查服务运行状态
[root@k8s-master1 bin]# systemctl status kube-controller-manager.service
#查看服务启动日志
[root@k8s-master1 bin]# journalctl -xe -u kube-controller-manager.servic
#查看版本
[root@k8s-master1 bin]# kube-controller-manager --version
3、升级kube-scheduler
[root@k8s-master1 bin]# mkdir -p /opt/k8s/work/k8s-v1.24-rc_bak
#备份旧版本二进制执行文件
[root@k8s-master1 bin]# cp /opt/k8s/bin/kube-scheduler /opt/k8s/work/k8s-v1.24-rc_bak
[root@k8s-master1 bin]# systemctl stop kube-scheduler
[root@k8s-master1 bin]# cp -rp kube-scheduler /opt/k8s/bin/
#启动服务
[root@k8s-master1 bin]# systemctl start kube-scheduler.service
#检查服务运行状态
[root@k8s-master1 bin]# systemctl status kube-scheduler.service
#查看服务启动日志
[root@k8s-master1 bin]# journalctl -xe -u kube-scheduler.service -f
#查看版本
[root@k8s-master1 bin]# kube-scheduler --version
四、升级Worker节点
1、升级kube-proxy
mkdir -p /opt/k8s/work/k8s-v1.24-rc_bak
cd /opt/k8s/work/v1.24.0/
#备份旧版本二进制执行文件
cp /opt/k8s/bin/kube-proxyr /opt/k8s/work/k8s-v1.24-rc_bak
systemctl stop kube-proxy
#替换旧版本二进制执行文件
cp -rp kube-proxy /opt/k8s/bin/
#启动服务
systemctl start kube-proxy.service
#检查服务运行状态
systemctl status kube-proxy.service
#查看版本
kube-proxy --version
2、升级kubelet
2.1:设置节点为不可调度状态
[root@k8s-master1 ~]# kubectl drain k8s-master1 --delete-emptydir-data --force --ignore-daemonsets

2.2:停止服务并替换执行文件
[root@k8s-master1 ~]# ssh [email protected] "systemctl stop kubelet"
[root@k8s-master1 ~]# ssh [email protected] "systemctl status kubelet"
#备份老版本二进制执行文件
[root@k8s-master1 ~]# ssh [email protected] "cp /opt/k8s/bin/kubelet /opt/k8s/work/k8s-v1.24-rc_bak/"
#拷贝新版本二进制执行文件到执行目录下
[root@k8s-master1 ~]# ssh root@192.168.66.62 "cp /opt/k8s/work/v1.24.0/kubelet /opt/k8s/bin/"
2.3:启动新版本kubelet服务
[root@k8s-master1 ~]# ssh [email protected] "systemctl start kubelet"
[root@k8s-master1 ~]# ssh [email protected] "systemctl status kubelet"
2.4:查看升级后的K8s集群版本
[root@k8s-master1 ~]# kubectl get no

2.5:将升级节点改为可调度状态
[root@k8s-master1 ~]# kubectl uncordon k8s-master1

这个以后肯定用的上!