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 |