Kubernetes / 云计算

二进制K8s集群版本升级

温馨提示:本文最后更新于2022-06-13 10:09:50,某些文章具有时效性,若有错误或已失效,请在下方留言或提交工单提交工单
浅时光 · 6月13日 · 2022年 本文4294个字,预计阅读11分钟 5668次已读

一、升级说明


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

二、升级ETCD


1、升级流程

  1. 备份ETCD数据
  2. 解压缩新版ETCD包
  3. 逐个停原文链接:https://www.dqzboy.com止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节点数据

  • 备份操作,请查看下面的文章

ETCD数据的备份和恢复

原文链接:https://www.dqzboy.com
2021-11-22 1

2.3:解压安装新版ETCD

文章来源(Source):浅时光博客

注意:这里先停掉一台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* root@192.168.66.62:/opt/k8s/bin
ssh root@192.168.66.62 "chmod +x /opt/k8s/bin/*"
ssh root@192.168.66.62 "systemctl start etcd"
ssh root@192.168.66.62 "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

原文链接:https://www.dqzboy.com

2、升级kube-controller-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
二进制K8s集群版本升级-浅时光博客

2.2:停止服务并替换执行文件

[root@k8s-master1 ~]# ssh root@192.168.66.62 "systemctl stop kubelet"
[root@k8s-master1 ~]# ssh root@192.168.66.62 "systemctl status kubelet"

#备份老版本二进制执行文件
[root@k8s-master1 ~]# ssh root@192.168.66.62 "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 root@192.168.66.62 "systemctl start kubelet"
[root@k8s-master1 ~]# ssh root@192.168.66.62 "systemctl status kubelet"

2.4:查看升级后的K8s集群版本

[root@k8s-master1 ~]# kubectl get no
二进制K8s集群版本升级-浅时光博客

2.5:将升级节点改为可调度状态

[root@k8s-master1 ~]# kubectl uncordon k8s-master1
二进制K8s集群版本升级-浅时光博客




关注本站官方微信公众号『精彩程序人生』

扫描左侧二维码关注我们的微信公众帐号,在微信公众帐号中回复【资料】即可获取各类互联网技术学习资料。
关注博主不迷路~


本文作者:浅时光
原文链接:https://www.dqzboy.com/10389.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可
转载时请以超链接形式标明文章原始出处和作者信息
免责声明:本站发布的内容(图片、视频和文字)以及一切破解补丁、注册激活和软件解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。访问和下载本站内容,说明您已同意上述条款!


0 条回应

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

    本站已稳定运行: | 耗时 0.373 秒 | 查询 12 次 | 内存 13.06 MB