k8s切换引擎为containerd k8s在1.24以前的版本默认引擎为docker
文章图片
在未来的 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)
文章图片
配置cgroup为systemd
文章图片
增加配置
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://b9pmyelo.mirror.aliyuncs.com"]
文章图片
重启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
推荐阅读
- docker|Docker -------harbor 私有仓库概述及构建
- 学习|k8s的安装-单master、多node
- Kubernetes|Kubernetes kube-scheduler 硬核知识 控制器框架/Informer机制
- linux|Docker高级篇之可视化工具Portainer和CAdvisor+InfluxDB+Granfana
- Kubernetes|Kubernetes 聚焦Kubelet职责
- vue|探索学习 Vue 组件篇 第四篇 组件的嵌套
- docker|docker 数据卷容器,很简单的
- linux|docker 容器数据卷
- Shell|awk学习及实例