【kubernetes系列】k8s 1.19.16 将docker切换为containerd

k8s 1.19.16 将docker切换为containerd

一、环境介绍

官方文档:[https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/#containerd]

本次升级是在原有正常的k8s 1.19.16版本的集群上升级切换,所以一些基础配置原先应该已经设置完成。

[root@k8s-m1 ~]# kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-m1 Ready master 63d v1.19.16 192.168.2.140 CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://19.3.15
k8s-m2 Ready master 63d v1.19.16 192.168.2.141 CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://19.3.9
k8s-m3 Ready master 63d v1.19.16 192.168.2.142 CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://19.3.9

二、准备工作(内核最好升级,但升级过程存在风险,注意升级过程中是否出现报错信息)

升级系统内核默认centos7.6内核版本是3.10.0-xxx这个版本比较低,无法使用Cgroup v2,实际在生产中我们使用默认的内核版本也是遇到过一些Bug,所以这里我会做内核版本升级,这个根据个人需求来做。当然你用默认的内核版本是没问题的
升级内核需要使用 elrepo 的yum源,首先我们导入 elrepo 的 key并安装 elrepo 源。

[root@k8s-m1 ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@k8s-m1 ~]# rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

1、查看可用的内核

[root@k8s-m1 ~]# yum --disablerepo=“*” --enablerepo=“elrepo-kernel” list available --showduplicates
在这里插入图片描述

内核选择
kernel-lt(lt=long-term)长期有效
kernel-ml(ml=mainline)主流版本

2、安装最新主流版本内核

[root@k8s-m1 ~]# yum --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel

修改内核启动顺序,默认启动的顺序应该为1,升级以后内核是往前面插入,为0(如果每次启动时需要手动选择哪个内核,该步骤可以省略)

[root@k8s-m1 ~]# grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg

使用下面命令看看确认下是否启动默认内核指向上面安装的内核

[root@k8s-m1 ~]# grubby --default-kernel

3、启用Cgroup v2
要启用 Cgroup v2 你可以通过在内核命令行中添加 systemd.unified_cgroup_hierarchy=1 来配置系统去使用它。 配置后必须重启节点,使参数生效。

yum -y install -y grubby
grubby --update-kernel=ALL --args=“systemd.unified_cgroup_hierarchy=1”
grubby --info=ALL
reboot

4、重启后检查节点内核是否成功升级
[root@k8s-m1 ~]# kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-m1 Ready master 63d v1.19.16 192.168.2.140 CentOS Linux 7 (Core) 6.1.9-1.el7.elrepo.x86_64 docker://19.3.15
k8s-m2 Ready master 63d v1.19.16 192.168.2.141 CentOS Linux 7 (Core) 6.1.9-1.el7.elrepo.x86_64 docker://19.3.9
k8s-m3 Ready master 63d v1.19.16 192.168.2.142 CentOS Linux 7 (Core) 6.1.9-1.el7.elrepo.x86_64 docker://19.3.9

三、首先在k8s-m1上操作,切换成功后继续下一台

1、将需要切换的node改为不可调度
kubectl cordon k8s-m1
2、驱逐该node上的pod资源(除daemonsets类型的pod)
kubectl drain k8s-m1 --delete-local-data --force --ignore-daemonsets
3、查看
[root@k8s-m1 ~]# kubectl get pod -o wide
确保当前升级节点无运行的业务服务

四、首先在k8s-m1上操作,切换成功后继续下一台

1、协助原有docker
rpm -qa | grep docker
rpm -e docker-ce-20.10.11-3.el7.x86_64 docker-ce-cli-20.10.11-3.el7.x86_64 docker-ce-rootless-extras-20.10.11-3.el7.x86_64 docker-scan-plugin-0.9.0-3.el7.x86_64

2、安装 containerd
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum -y install containerd.io

3、配置 containerd

mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

4、使用 systemd cgroup 驱动程序

结合 runc 使用 systemd cgroup 驱动,在 /etc/containerd/config.toml 中设置
[plugins.“io.containerd.grpc.v1.cri”.containerd.runtimes.runc]

[plugins.“io.containerd.grpc.v1.cri”.containerd.runtimes.runc.options]
SystemdCgroup = true

[plugins.“io.containerd.grpc.v1.cri”]
sandbox_image = “registry.aliyuncs.com/k8sxio/pause:3.6”
需要单独指定使用的pause容器,通过kubeadm指定的不会生效

5、重启containerd
修改配置文件后请重新启动 containerd 使配置生效:
systemctl restart containerd.service

systemctl enable containerd.service

6、安装crictl
crictl是连接containerd的一个client端工具,用于管理containerd中的容器,这个工具比默认的ctr好用。crictl 使用 k8s.io 命名空间,kubernetes使用的镜像也是在这个名称空间下。

VERSION=“v1.19.0” #下载与你的 kubernetes 版本相对应的版本
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/ V E R S I O N / c r i c t l − VERSION/crictl- VERSION/crictlVERSION-linux-amd64.tar.gz

tar zxvf crictl-$VERSION-linux-amd64.tar.gz
chown root.root crictl
mv crictl /usr/bin/

配置crictl工具
编辑 /etc/crictl.yaml

runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10

7、配置kubelet使用containerd

[root@k8s-m1 ~]# cat /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS=“--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock --cgroup-driver=systemd”

8、重启kubelet

systemctl restart kubelet

9、取消node节点不可被调度的标记

[root@k8s-m1~]# kubectl uncordon k8s-m1

node/node1 uncordoned

四、查看容器引擎是否成功切换为containerd

[root@k8s-m1 ~]# kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-m1 Ready master 63d v1.19.16 192.168.2.140 CentOS Linux 7 (Core) 6.1.9-1.el7.elrepo.x86_64 containerd://1.6.16
k8s-m2 Ready master 63d v1.19.16 192.168.2.141 CentOS Linux 7 (Core) 6.1.9-1.el7.elrepo.x86_64 docker://19.3.9
k8s-m3 Ready master 63d v1.19.16 192.168.2.142 CentOS Linux 7 (Core) 6.1.9-1.el7.elrepo.x86_64 docker://19.3.9

继续升级切换其他节点。最后完成升级

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

margu_168

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值