Kubernetes | 從Docker遷移到Containerd

Kubernetes在1.20版本之後不再將Docker作爲容器運行時使用。不要驚慌😱Docker容器仍然支持,但是dockershim/Docker Kubernetes和containerd之間的層已經棄用,將從1.22+版本中移除。因此,如果你正在運行docker,你需要更改爲支持的容器運行時接口(CRI)。containerd是一個很好的選擇,如果您正在運行Docker,它已經在Kubernetes節點上運行了。

一個明顯的優勢是開銷更少,沒有Docker-shim和Docker翻譯層,如圖所示。

從docker shim改爲containerd CRI

如何遷移

首先,我們檢查當前運行的容器是什麼。我們使用kubectl get node -o來實現這一點。正如我們所看到的,我們將Docker作爲運行時運行。

現在,我們檢查containerd cli /usr/bin/ctr是否存在,名稱空間moby是否存在,命令:/usr/bin/ctr namespace list moby是docker的命名空間。我們可以在這個命名空間中列出正在運行的容器

如果一切正常,我們可以更改cri,每次更改一個節點,首先是工作節點,然後是控制節點。如果只有一個控制節點,您將失去對集羣的訪問權,這將是暫時的,它應該自己恢復。

驅逐節點

我們需要封鎖並釋放節點,以便重新調度工作負載。

停止服務

刪除docker(可選)

我們刪除了Docker,這是不必要的,但會讓事情更清楚,以後更不容易出錯,我們會節省一些磁盤空間…

Containerd配置

禁用/etc/containerd/config中的disabled_plugins行。這樣cri接口就加載了

如果containerd沒有配置文件,您可以生成一個新的默認文件。

重啓containerd

systemctl restart containerd

更改runtime

編輯/var/lib/kubelet/kubeadm-flags.env文件;並將containerd運行時添加到標記。--container-runtime=remote--container-runtimeendpoint=unix:///run/containerd/containerd.sock所以kubeadm-flags文件看起來應該是這樣的。

/var/lib/kubelet/kubeadm-flags.env

啓動kubelet

在更改運行時之後,我們可以啓動kubelet服務

systemctl start kubelet

覈對

現在,當我們運行kubectl時,kubectl get nodes -o wide,我們看到containerd是我們剛剛更改的節點的運行時containerd。

我們剛改變的節點仍然被封鎖。所以我們現在可以解除封鎖了。

如果現在檢查節點上的名稱空間,會看到一個新的名稱空間k8s.io。moby名稱空間現在是空的,在這個名稱空間中沒有運行容器,所有容器現在都在運行k8.io命名空間。

view new k8s.io containerd namespace

我們已經成功地更改了cri,現在我們可以移動到下一個節點並重復所有操作。

推薦


容器中的網絡延遲相較於宿主機到底高多少?

Kubernetes入門培訓(內含PPT)

從Ice到Kubernetes容器技術,微服務架構經歷了什麼?



原創不易,隨手關注或者”在看“,誠摯感謝!


本文分享自微信公衆號 - 雲原生技術愛好者社區(programmer_java)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章