Kubernetes / 云原生

二进制K8s集群版本升级

浅时光博客 · 6月13日 · 2022年 36605次已读

一、升级说明


  1. 官方建议在小版本之间进行升级,不建议大原文链接:https://www.dqzboy.com版本升级,更不建议直接跨大版本去升级
  2. 二进制升级时查看官方的更新日志,与当前使用版本进行比对,是否有大的变动,防止升级中出现版本API接口兼容性问题导致升级失败
  3. 在升级K8s集群时,二进制的方式只需要拷贝替换对应的二进制执行文件即可
  4. 升级过程:先升级ETCD,然后升级K8s的Master节点组件,最后升级K8s集群的工作节点组件(说明:我这里主节点跟工作节点都部署了kubelet和kube-proxy组件,所以进行升级这2个组件时,集群所有节点都需要升级,包括主节点)
  5. 升级ETCD和K8s主节点组件对Pod影响较小,升级Kubelet时会对Pod有影响
  6. 注意:升级操作必须在业务影响最小的情况下执行,比如晚上

二、升级ETCD


1、升级流程

  1. 备份ETCD数据
  2. 解压缩新版ETCD包
  3. 逐个停止ETCD
  4. 替换ETCD和ETCDCTL二进制执行文件
  5. 启动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节点数据

  • 备份操作,请查看下面的文章
文章来源(Source):https://www.dqzboy.com

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.comler-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


本文作者:浅时光博客
原文链接:https://www.dqzboy.com/10389.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以>超链接形式标明文章原始出处和作者信息
免责声明:本站提供的内容仅限于个人学习和研究使用;禁止将内容用于商业或非法用途。下载后请在24小时内彻底删除,否则后果由用户承担。访问和下载本站内容即表示您已同意上述条款 。

1 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

  1. LAOMAO安徽·宿州2023-1-26 · 0:08

    这个以后肯定用的上!