Kubernetes到1.20开始不建议使用docker作为运行时,作为容器运行时,其实还有其他一些:
- containerd
- CRI-O
经过对比,我选择了containerd进行验证。这次我并没有升级整体Kubernetes集群,只是打算增加一个使用containerd的容器运行时的节点。
安装containerd
我使用CentOS 7,首先需要设置内核参数,这个和之前Docker一样:
1 | cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf |
然后开始安装,containerd使用yum源和docker-ce相同:
1 | # 安装 containerd |
1 | ### 新增 Docker 仓库 |
1 | ## 安装 containerd |
配置containerd
首先获得缺省配置:
1 | # 配置 containerd |
因为国内无法访问部分image源,同事docker hub比较慢,修改使用国内镜像:
1 | vi /etc/containerd/config.toml |
1 | # 重启 containerd |
加入k8s集群
首先安装k8s,包括kubeadm、kubelet、kubectl
1 | yum install -y kubeadm kubelet kubectl |
然后加入到集群:
1 | kubeadm join master.k8s:8443 --token xxx --discovery-token-ca-cert-hash sha256:xxxxxxx |
现在已经使用containerd允许时的节点已经加入到集群,部署容器测试可以正常使用。
containerd管理
使用containerd已经不能使用熟悉的docker命令进行容器的管理了,containerd提供了2个工具可以使用:
- ctr
- crictl
ctr
ctr是一个简单的命令工具,使用并不复杂,但需要注意:
ctr不会使用配置文件/etc/containerd/config.toml,也就是说配置的mirror并不能使用images也有命名空间,k8s会使用一个名为k8s.io的命名空间ctr的参数有顺序,如ctr -n=k8s.io images list正确,而ctr images list -n=k8s.io则不正确
希望未来ctr会更完善一些。
crictl
crictl使用和docker命令类似,比较方便。使用前需要增加配置文件:/etc/crictl.yaml。内容如下:
1 | runtime-endpoint: unix:///run/containerd/containerd.sock |