k8s换容器引擎为Containerd
参考资料:https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/#containerd
1.配置先决条件
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf > overlay > br_netfilter > EOF overlay br_netfilter # 批量推送所有机器 pscp.pssh -h machine.list /etc/modules-load.d/containerd.conf /etc/modules-load.d/ pssh -h machine.list -i "modprobe overlay" pssh -h machine.list -i "modprobe br_netfilter" # 设置必需的 sysctl 参数,这些参数在重新启动后仍然存在。 cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF # 批量推送所有机器 pscp.pssh -h machine.list /etc/sysctl.d/99-kubernetes-cri.conf /etc/sysctl.d/ pssh -h machine.list -i "sysctl --system"
2.安装containerd
pssh -h machine.list -i "yum install -y yum-utils device-mapper-persistent-data lvm2" yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo pssh -t 0 -h machine.list -i "yum install -y containerd.io" pssh -h machine.list -i "mkdir -p /etc/containerd" pssh -h machine.list -i "containerd config default > /etc/containerd/config.toml"
3.修改配置文件
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://b9pmyelo.mirror.aliyuncs.com"] pscp.pssh -h machine.list /etc/containerd/config.toml /etc/containerd/ pssh -h machine.list -i "systemctl restart containerd" pssh -h machine.list -i "systemctl status containerd"
4.配置kubelet使用containerd
vi /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS=--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock --cgroup-driver=systemd pscp.pssh -h machine.list /etc/sysconfig/kubelet /etc/sysconfig/ pssh -h machine.list -i "systemctl restart kubelet"
5.验证
[root@cka-master /root] cka-master #kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME cka-master Ready control-plane,master 13h v1.21.0 192.168.122.71 <none> CentOS Linux 7 (Core) 3.10.0-1160.el7.x86_64 containerd://1.4.11 cka-node1 Ready <none> 13h v1.21.0 192.168.122.72 <none> CentOS Linux 7 (Core) 3.10.0-1160.el7.x86_64 containerd://1.4.11 cka-node2 Ready <none> 13h v1.21.0 192.168.122.73 <none> CentOS Linux 7 (Core) 3.10.0-1160.el7.x86_64 containerd://1.4.11
6.containerd相关命令
containerd提供了ctr命令行工具管理容器,但功能比较简单,所以一般会用crictl工具检查和调试容器。
项目地址:https://github.com/kubernetes-sigs/cri-tools/
设置crictl连接containerd:
vi /etc/crictl.yaml runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false下面是docker与crictl命令对照表:
镜像相关功能 Docker Containerd 显示本地镜像列表 docker images crictl images 下载镜像 docker pull crictl pull 上传镜像 docker push 无,例如buildk 删除本地镜像 docker rmi crictl rmi 查看镜像详情 docker inspect IMAGE-ID crictl inspecti IMAGE-ID
容器相关功能 Docker Containerd 显示容器列表 docker ps crictl ps 创建容器 docker create crictl create 启动容器 docker start crictl start 停止容器 docker stop crictl stop 删除容器 docker rm crictl rm 查看容器详情 docker inspect crictl inspect attach docker attach crictl attach exec docker exec crictl exec logs docker logs crictl logs stats docker stats crictl stats
POD 相关功能 Docker Containerd 显示 POD 列表 无 crictl pods 查看 POD 详情 无 crictl inspectp 运行 POD 无 crictl runp 停止 POD 无 crictl stopp