如何优雅升级 Kubernetes 集群的 Docker 和 Containerd 版本

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

5845f5bbf3920f4b6511788ed6d69d85.png

前言

公司用的k8s集群是“多环境合一”的方式,集群流量入口也摒弃了常见的traefik和ingress-nginx,直接用了一个国内不常见的底层基于Envoy的API Gateway网关服务。当然还有非常多的其他集群流量入口组件可供选择,这里暂不讨论。

由于这个组件更新迭代也是非常的快速,并且官方文档很快不展示旧版本文档了,那么随着版本更新,API版本自然发生了改变,新版本的API就没有任何的参考意义了,因此需要升级组件版本。升级组件版本前提是docker版本至少需要20.10.11,containerd版本至少是1.4.11。于是这里先原地升级这两个组件。

k8s的node节点维护

尽可能在维护节点之前保证你的有另外的冗余节点,能够支撑你当前维护节点上的所有pod。或者保证你维护这个节点驱逐了所有pod后,其他节点能够承载你这个节点上所有pod。非常可怜也非常可惜,我这里节点内存都跑到了95%以上,并且领导不给机器,让我夜里升级。pod目前集群上有超过5000个。此时只能硬着头皮上了。理念是升级完一台正常后再接着升下一台。

升级步骤

1、查看原先的containerd和docker版本

$ containerd -v
containerd containerd.io 1.2.13 7ad184331fa3e55e52b890ea95e65ba581ae3429

$ docker -v
Docker version 19.03.12, build 48a66213fe

2、驱逐pod

$ kubectl drain k8s-node02.ayunw.cn --ignore-daemonsets --delete-local-data --force

$ kubectl get node
NAME                    STATUS                        
k8s-master01.ayunw.cn   Ready                         
k8s-node01.ayunw.cn     Ready                         
k8s-node02.ayunw.cn     NotReady,SchedulingDisabled
...

3、停止节点上docker和kubelet

systemctl stop kubelet

systemctl stop docker
systemctl stop docker.socket
systemctl stop containerd

4、卸载老版本docker并安装新版本docker和containerd

yum -y remove docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-engine

dnf -y install yum-utils device-mapper-persistent-data lvm2

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

yum makecache

dnf -y install containerd.io-1.4.12-3.1.el8.x86_64.rpm

dnf -y install docker-ce-20.10.11 docker-ce-cli-20.10.11

systemctl daemon-reload
systemctl start docker
systemctl enable docker
systemctl status docker

systemctl status containerd
systemctl enable containerd.service

5、检查docker和containerd版本

$ containerd -v && docker -v
containerd containerd.io 1.4.12 7b11cfaabd73bb80907dd23182b9347b4245eb5d
Docker version 20.10.11, build dea9396

6、启动kubelet并恢复节点

systemctl start kubelet
systemctl status kubelet

kubectl uncordon k8s-node02.ayunw.cn

kubectl get node -o wide

最后就能看到版本已经升级完成。

本文转载自:「运维开发故事」,原文:https://tinyurl.com/2p86nhya,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

123372c22ace6a38ae5f4cb8ff8197f3.gif

c7cf4e65facba9f6456b529e427096bc.png

你可能还喜欢

点击下方图片即可阅读

259856fd60aea25c186b554e15a52175.png

2021 年 Top 8 开源 Kubernetes 安全工具

52681fe0e0da7eb1acbdff3411d89cdd.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

ab8bff7d96bccc7561d48de5b3513e63.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值