学习|k8s切换引擎为containerd

k8s切换引擎为containerd k8s在1.24以前的版本默认引擎为docker
学习|k8s切换引擎为containerd
文章图片

在未来的 Kubernetes 版本彻底放弃 Docker 支持之前,引入受支持的容器运行时。
除了docker之外,CRI还支持很多容器运行时,例如:
? containerd:containerd与Docker相兼容,相比Docker轻量很多,目前较为成熟
? cri-o,podman:都是红帽(RedHat)项目,目前红帽主推podman
切换引擎官方文档链接:k8s切换引擎为containerd
本文中以一台node节点为例,k8s部署相关文档可查看本人的部署文档:k8s部署
也可查看官方的部署文档:kubernetes官方部署文档
一、检查节点使用的容器引擎 通过命令可以看到,三台节点使用的容器引擎均为docker,这里以node2为例,修改容器引擎

~]# kubectl get nodes -o wide NAMESTATUSROLESAGEVERSIONINTERNAL-IPEXTERNAL-IPOS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIME k8s-master1Readycontrol-plane,master16hv1.23.0192.168.1.21CentOS Linux 7 (Core)3.10.0-1160.el7.x86_64docker://20.10.17 k8s-node01Ready16hv1.23.0192.168.1.22CentOS Linux 7 (Core)3.10.0-1160.el7.x86_64docker://20.10.17 k8s-node02Ready16hv1.23.0192.168.1.23CentOS Linux 7 (Core)3.10.0-1160.el7.x86_64docker://20.10.17

二、检查配置 由于我们这块已经安装了docker,在docker中默认会自带containerd,所有不需要再次安装containerd。
检查环境,如果有overlay和netfilter说明已加载
[root@k8s-node02 ~]# lsmod | grep overlay overlay9165922 [root@k8s-node02 ~]# lsmod | grep netfilter br_netfilter222560 bridge1513361 br_netfilter

如果未加载请执行命令,再检查
[root@k8s-node02 ~]# cat <

设置必需的 sysctl 参数,这些参数在重新启动后仍然存在。检查sysctl配置中是否有以下三个配置
[root@k8s-node02 ~]# sysctl -a | grep net.bridge.bridge-nf-call net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 [root@k8s-node02 ~]# sysctl -a | grep net.ipv4.ip_forward net.ipv4.ip_forward = 1

如果没有,则执行以下命令进行配置和生效
[root@k8s-node02 ~]# cat <

三、安装containerd 安装了docker默认containerd已安装,该步骤可以省略
[root@k8s-node02 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 [root@k8s-node02 ~]# yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo [root@k8s-node02 ~]# yum install -y containerd.io [root@k8s-node02 ~]# mkdir -p /etc/containerd

四、修改配置
[root@k8s-node02 ~]# mv /etc/containerd/config.toml /etc/containerd/config.toml-bak# 备份配置文件 [root@k8s-node02 ~]# containerd config default > /etc/containerd/config.toml# 生成默认配置文件

修改配置文件/etc/containerd/config.toml
修改镜像源为阿里云(registry.aliyuncs.com/google_containers/pause:3.2)
学习|k8s切换引擎为containerd
文章图片
配置cgroup为systemd
学习|k8s切换引擎为containerd
文章图片

增加配置
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://b9pmyelo.mirror.aliyuncs.com"]

学习|k8s切换引擎为containerd
文章图片

重启containerd服务
[root@k8s-node02 ~]# systemctl restart containerd

配置kubelet使用containerd
[root@k8s-node02 ~]# cp -pi /etc/sysconfig/kubelet /etc/sysconfig/kubelet-bak [root@k8s-node02 ~]# vim /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS=--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock --cgroup-driver=systemd

重启kubectl服务
[root@k8s-node02 ~]# systemctl restart kubectl

检查节点的容器引擎,可以看到node2已经切换为containerd容器引擎
[root@k8s-node02 ~]# kubectl get nodes -o wide NAMESTATUSROLESAGEVERSIONINTERNAL-IPEXTERNAL-IPOS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIME k8s-master1Readycontrol-plane,master17hv1.23.0192.168.1.21CentOS Linux 7 (Core)3.10.0-1160.el7.x86_64docker://20.10.17 k8s-node01Ready17hv1.23.0192.168.1.22CentOS Linux 7 (Core)3.10.0-1160.el7.x86_64docker://20.10.17 k8s-node02Ready17hv1.23.0192.168.1.23CentOS Linux 7 (Core)3.10.0-1160.el7.x86_64containerd://1.6.6

配置crictl命令
[root@k8s-node02 ~]# vim /etc/crictl.yaml runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false

使用crictl命令管理容器
[root@k8s-node02 ~]# crictl images IMAGETAGIMAGE IDSIZE docker.io/calico/cniv3.23.3ecf96bae0aa79108MB docker.io/calico/kube-controllersv3.23.332d39d8db456c53.8MB docker.io/calico/nodev3.23.35f5175f39b19e73.5MB docker.io/kubernetesui/dashboardv2.4.072f07539ffb5867.4MB docker.io/library/nginxlatest605c77e624ddb56.7MB registry.aliyuncs.com/google_containers/kube-proxyv1.23.0e03484a90585e39.3MB registry.aliyuncs.com/google_containers/pause3.280d28bedfe5de300kB

crictl命令与docker命令的对照
镜像相关功能【Docker】【Containerd】 显示本地镜像列表 docker imagescrictl images 下载镜像docker pullcrictl pull 上传镜像docker push无,例如buildk 删除本地镜像docker rmicrictl rmi 查看镜像详情docker inspect IMAGE-IDcrictl inspecti IMAGE-ID容器相关功能【Docker】【Containerd】 显示容器列表docker pscrictl ps 创建容器docker createcrictl create 启动容器docker startcrictl start 停止容器docker stopcrictl stop 删除容器docker rmcrictl rm 查看容器详情docker inspectcrictl inspect 附加容器docker attachcrictl attach 执行命令docker execcrictl exec 查看日志docker logscrictl logs 查看容器资源docker statscrictl statsPOD 相关功能【Docker】【Containerd】 显示 POD 列表无crictl pods 查看 POD 详情无crictl inspectp 运行 POD无crictl runp 停止 POD无crictl stopp

【学习|k8s切换引擎为containerd】切换回docker容器引擎,取消kubelet配置参数即可。
[root@k8s-node02 etc]# cd /etc/sysconfig/ [root@k8s-node02 sysconfig]# mv kubelet kubelet-containerd [root@k8s-node02 sysconfig]# mv kubelet-bak kubelet [root@k8s-node02 sysconfig]# systemctl restart kubelet [root@k8s-node02 sysconfig]# kubectl get nodes -o wide NAMESTATUSROLESAGEVERSIONINTERNAL-IPEXTERNAL-IPOS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIME k8s-master1Readycontrol-plane,master17hv1.23.0192.168.1.21CentOS Linux 7 (Core)3.10.0-1160.el7.x86_64docker://20.10.17 k8s-node01Ready17hv1.23.0192.168.1.22CentOS Linux 7 (Core)3.10.0-1160.el7.x86_64docker://20.10.17 k8s-node02Ready17hv1.23.0192.168.1.23CentOS Linux 7 (Core)3.10.0-1160.el7.x86_64docker://20.10.17

    推荐阅读