早在 2020 年 12 月,Kubernetes 就宣布將要棄用 Dockershim(https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/)。在 Kubernetes 中,Dockershim 是一個適配器組件,Dockershim 適配器允許 Kubelet 與 Docker 交互,就好像 Docker 是一個與 CRI 兼容的運行時一樣。
Kubernetes 即將發布的 v1.24 版本最主要的變化就是刪除了 Dockershim(https://github.com/kubernetes/enhancements/issues/2221)。也就是說,Kubernetes v1.24 無法再通過 in-tree 的形式來支持 Docker 作為它的 CRI 運行時。
隨著 Kubernetes 的發展, 雖然 Docker 日漸式微,但還是有大量用戶群體離不開 Docker,或者說暫時無法切換到 containerd 或 CRI-O 作為它的 CRI 運行時。 Rancher 為了滿足繼續使用 Docker 作為 CRI 運行時的需求,通過 RKE 集群支持外部 Dockershim 繼續使用 Docker 作為 CRI 運行時。
雖然 Rancher 最新的 v2.6.4 目前還不支持 Kubernetes v1.24,但早在 Kubernetes v1.21 中就採用了 Mirantis 和 Docker 宣布的上游開源社區外部 Dockershim (該項目稱為 cri-dockerd:https://github.com/kubernetes/enhancements/issues/2221)來確保 RKE 集群可以繼續使用 Docker。換句話說,你可以像之前一樣繼續基於 Docker Engine 構建 Kubernetes,唯一的區別就是 Dockershim 由內置方案變成了外部方案。
要啟用外部 Dockershim,只需要在 RKE 配置中設置以下選項:
修改rke設定檔 cluster.yml文件
cluster.yml
nodes: - address: 192.168.0.7 user: ubuntu role: - controlplane - etcd - worker enable_cri_dockerd: true
使用rke建立kubernetes集群
rke up
INFO[0000] Running RKE version: v1.3.9 INFO[0000] Initiating Kubernetes cluster INFO[0000] cri-dockerd is enabled for cluster version [v1.22.7-rancher1-2] INFO[0000] [certificates] GenerateServingCertificate is disabled, checking if there are unused Kubelet certificates INFO[0000] [certificates] Generating admin certificates and kubeconfig ... ... ... INFO[1130] [ingress] ingress controller nginx deployed successfully INFO[1130] [addons] Setting up user addons INFO[1130] [addons] no user addons defined INFO[1130] Finished building Kubernetes cluster successfully
確認有啟用cri-dockerd
通過rancher建立rke集群 (kubernetes1.21以上才支援外部Dockershin)
啟用cri-dockerd 需改成enable_cri_dockerd: true