Skip to content

实战-k8s中将容器引擎由docker切换为Containerd-测试成功-2021.8.15

实战:k8s中将容器引擎由docker切换为Containerd(测试成功)-2021.8.15

实验环境

3台node,1个master,2个work node组成的k8s集群,k8s v1.20,docker20.10.7;

实验软件

image-20230910170253454

  • 原文档内容

1、配置先决条件

注意:本次all操作都是在node1上操作的!

bash
#设置开机启动,也会加载的;cat<<EOF|sudotee/etc/modules-load.d/containerd.confoverlaybr_netfilterEOFsudomodprobeoverlaysudomodprobebr_netfilter# 设置必需的 sysctl 参数,这些参数在重新启动后仍然存在。# 说明:其实这些在之前都已经执行过了,且docker启动后,默认就开启了net.ipv4.ip_forward 功能;这些配置也不多,因此我这里就执行下;cat<<EOF|sudotee/etc/sysctl.d/99-kubernetes-cri.confnet.bridge.bridge-nf-call-iptables =1net.ipv4.ip_forward =1net.bridge.bridge-nf-call-ip6tables =1EOF# Apply sysctl params without rebootsudosysctl--system
  • 注意
bash
[root@k8s-node1 ~]#lsmod |grepoverlay[root@k8s-node1 ~]#lsmod |grepnet#说明:默认情况,操作系统下这2个内核参数默认是开启的;overlaybr_netfilter但是,这里建议还是可以配置上,开机后就会自启了;

  • 操作过程截图

2、安装containerd

bash
yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2#本次,这里步骤省略,之前配置过yum-config-manager\--add-repo\https:yuminstall-ycontainerd.iomkdir-p/etc/containerdcontainerdconfigdefault|sudotee/etc/containerd/config.tomlsystemctlrestartcontainerd
  • 说明
bash
containerd本身就是docker的组件,docker的源中就有containerd软件包;

奇怪:containerd.io默认已经被安装了的。

3、修改配置文件

bash
•pause镜像设置过阿里云镜像仓库地址•cgroups驱动设置为systemd•拉取DockerHub镜像配置加速地址设置为阿里云镜像仓库地址
bash
vi/etc/containerd/config.toml[plugins."io.containerd.grpc.v1.cri"] sandbox_image ="registry.aliyuncs.com/google_containers/pause:3.2"... [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup =true ... [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint =["https:KUBELET_EXTRA_ARGS=--container-runtime=remote--container-runtime-endpoint=unix:systemctlrestartkubelet
  • 实验过程截图

vi /etc/sysconfig/kubelet

5、验证

在master节点验证:

bash
kubectlgetnode-owidek8s-node1xxxcontainerd:runtime-endpoint:unix:image-endpoint:unix:timeout:10debug:false
bash
#说明注意:在k8s中,我们基本上99%的操作都是在master上用kubectl来完成的;但有的时候,不得已,需需要单独进入到某个节点上来,调试下这个容器引擎创建的容器,进到这个容器里面,查看下它的日志;这时候,就需要用到例如像crictl这种工具来检查和调试容器。

bash
VERSION="v1.21.0"wgethttps:sudotarzxvfcrictl-$VERSION-linux-amd64.tar.gz-C/usr/local/binrm-fcrictl-$VERSION-linux-amd64.tar.gz

  • 设置crictl连接containerd

vi /etc/crictl.yaml #debug是每执行一个crictl的话,就会弹出一些信息,这里比我们将其关掉即可;

  • 注意

  • 我们可以尝试用下这个crictl命令

显示pod列表

bash
[root@k8s-node1 ~]#crictl pods

  • 这里唯独的问题就是:container不能上传镜像的。
bash
单独去构建容器镜像这一块的工具还是挺多的,我们可以用这类镜像完成镜像的构建和上传;当然用docker也行的;

  • 查看容器镜像
bash
[root@k8s-node1 ~]#crictl images

  • 问题:怎么拉取镜像半天都拉取不下来呢?-->要等一段时间的。

  • 进入容器及查看日志

  • 做一个快照

image-20230910170329848

注意事项

注意:练习完后,建议还切回Docker引擎,就是把kubelet配置参数去掉即可。

bash
[root@k8s-node1 ~]#vim /etc/sysconfig/kubeletKUBELET_EXTRA_ARGS=

  • 重启docker

  • 重启kubelet
bash
[root@k8s-node1 ~]#systemctl restart kubelet
  • 正常情况下,应该是切过来了
bash
#master查看[root@k8s-master ~]#kubectl get nodes -o wide

总结

问题: 注意:当时搭建k8s集群,安装好docker后,有做k8s和docker之间的配置吗?--没有; 为什么没有配置呢?因为docker是k8s的默认docker引擎,因此不用配置,k8s就会自动去找docker的socket; [root@k8s-master ~]#ll /var/run/docker.sock srw-rw---- 1 root docker 0 Jun  2 00:02 /var/run/docker.sock

如果我们要改成别的容器引擎,那么就需要配置下kubelet与别的容器之间的一个对接了;

其实,就是kubelet和容器引擎之间是有关系的;

装好容器引擎后,再修改下kubelet的一些配置,去连接这个容器引擎(文件封装好的接口:/var/run/docker.sock)就可以了;

最近更新