命令记不住

登陆

k8s 换容器引擎为 Containerd

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
推荐阅读