本文介绍如何将Kubernetes群集中的容器引擎从docker切换为containerd

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

环境

  • OS: CentOS 7.8
  • Container runtime: Docker CE 19.03.9
  • Kubernetes: v1.20

1、查看Kubernetes集群中当前使用的容器引擎

2、将k8s-node02这个node的容器引擎从docker切换为containerd

2、1 将该node标记为不可被调度,并且驱逐该node上的pod资源

# 1、查看该node当前运行一个名为web-96d5df5c8-s7lnq的pod# kubectl get pods -o wideNAME                  READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATESweb-96d5df5c8-s7lnq   1/1     Running   0          19m   10.244.58.195   k8s-node02   <none>           <none># 2、将该node标记为不可被调度# kubectl cordon k8s-node02 # 3、驱逐该node节点上的pod资源到集群中的其它节点上去# kubectl drain k8s-node02 --delete-local-data --force --ignore-daemonsets# 4、查看之前运行在该node上的pod被调度到了集群中的哪个节点# kubectl get pods -o wideNAME                  READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATESweb-96d5df5c8-m8s7d   1/1     Running   0          57s   10.244.85.195   k8s-node01   <none>           <none>从以上信息来看可以发现,之前k8s-node02节点上的pod资源被驱逐到了k8s-node01上运行# 5、查看Kubernetes集群中的node资源信息# kubectl get nodesNAME           STATUS                     ROLES                  AGE     VERSIONk8s-master01   Ready                      control-plane,master   4h20m   v1.20.0k8s-node01     Ready                      <none>                 3h47m   v1.20.0k8s-node02     Ready,SchedulingDisabled   <none>                 3h47m   v1.20.0如上信息,k8s-node02节点已经不可被调度了,接下来开始切换容器引擎

2.2、切换容器引擎

2.2.1 配置先决条件

# cat <<EOF | sudo tee /etc/modules-load.d/containerd.confoverlaybr_netfilterEOF# modprobe overlay# modprobe br_netfilter# 设置必需的 sysctl 参数,这些参数在重新启动后仍然存在。# cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.confnet.bridge.bridge-nf-call-iptables  = 1 net.ipv4.ip_forward                 = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF# sysctl --system

2.2.2 安装containerd

# yum install -y yum-utils device-mapper-persistent-data lvm2# yum-config-manager \    --add-repo \    https://download.docker.com/linux/centos/docker-ce.repo# yum install -y containerd.io# mkdir -p /etc/containerd# containerd config default | sudo tee /etc/containerd/config.toml# systemctl restart containerd.service

2.2.3 修改配置文件

# 1、搜索关键字"sandbox_image",将镜像地址替换为国内阿里云的57     sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.2"# 2、指定使用systemd作为Cgroup的驱动程序需要添加,这里是在96后,也可以搜素关键字"options",在其下一行添加如下内容97             SystemdCgroup = "true"# 3、搜索关键字"endpoint",修改镜像加速地址106           endpoint = ["https://5uhltnnr.mirror.aliyuncs.com"]# 4、重启containerd# systemctl restart containerd.service

2.2.4 配置kubelet使用containerd

# vim /etc/sysconfig/kubeletKUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock --cgroup-driver=systemd"# systemctl status kubelet

3、验证容器引擎是否成功切换为containerd

从上图可以信息结果中,可以发现k8s-node02这个节点当前使用的容器引擎为containerd,至此,成功地将该节点使用的容器引擎从docker切换为containerd,接下来。取消该节点不可被调度的标记,使其可以被正常调度。

4、取消k8s-node02节点不可被调度标记

# kubectl uncordon k8s-node02node/k8s-node02 uncordoned# kubectl get nodesNAME           STATUS   ROLES                  AGE     VERSIONk8s-master01   Ready    control-plane,master   5h1m    v1.20.0k8s-node01     Ready    <none>                 4h28m   v1.20.0k8s-node02     Ready    <none>                 4h28m   v1.20.4

©著作权归作者所有:来自51CTO博客作者何小帅的原创作品,如需转载,请注明出处,否则将追究法律责任

每一份赞赏源于懂得

赞赏

0人进行了赞赏支持

更多相关文章

  1. 饿了么:Redis Cluster运维方案
  2. 2021-03-17:手写代码:单链表插入排序。
  3. Kafka单节点至集群的安装部署及注意事项
  4. 循环单链表及常用操作(C语言描述)
  5. 云服务让HPC死而复生
  6. es软件安装
  7. 还在浪费资源“海推”产品?这个银行产品推荐系统你必须知道!(附教程
  8. pod一直处于ContainerCreating状态,
  9. 1.2 Ansible 基础概念

随机推荐

  1. Android 漂亮的 Dialog (弹出框)
  2. Android添加一个回调监听接口
  3. Android代码性能优化技巧
  4. android的入门学习
  5. 尝试在安卓系统中获得USSD响应
  6. Cocos2d-x 3.0 开发(十七)使用Cocos2d-x 3.
  7. Android源码在UBUNTU编译全过程
  8. 空对象引用错误:使用SQLite的Android Stud
  9. onActivityResult与singleTask或singleIn
  10. Android_照相机Camera_调用系统照…