Kubernetes 檢查棄用Dockershim是否對你有影響

2022-06-02 09:48 更新

檢查棄用 Dockershim 是否對你有影響

Kubernetes 的 ?dockershim ?組件使得你可以把 Docker 用作 Kubernetes 的 容器運行時。 在 Kubernetes v1.24 版本中,內(nèi)建組件 ?dockershim ?被移除。

本頁講解你的集群把 Docker 用作容器運行時的運作機(jī)制, 并提供使用 ?dockershim ?時,它所扮演角色的詳細(xì)信息, 繼而展示了一組操作,可用來檢查棄用 ?dockershim ?對你的工作負(fù)載是否有影響。

檢查你的應(yīng)用是否依賴于 Docker 

即使你是通過 Docker 創(chuàng)建的應(yīng)用容器,也不妨礙你在其他任何容器運行時上運行這些容器。 這種使用 Docker 的方式并不構(gòu)成對 Docker 作為一個容器運行時的依賴。

當(dāng)用了別的容器運行時之后,Docker 命令可能不工作,或者產(chǎn)生意外的輸出。 下面是判定你是否依賴于 Docker 的方法。

  1. 確認(rèn)沒有特權(quán) Pod 執(zhí)行 Docker 命令(如 ?docker ps?)、重新啟動 Docker 服務(wù)(如 ?systemctl restart docker.service?)或修改 Docker 配置文件 ?/etc/docker/daemon.json?。
  2. 檢查 Docker 配置文件(如 ?/etc/docker/daemon.json?)中容器鏡像倉庫的鏡像(mirror)站點設(shè)置。 這些配置通常需要針對不同容器運行時來重新設(shè)置。
  3. 檢查確保在 Kubernetes 基礎(chǔ)設(shè)施之外的節(jié)點上運行的腳本和應(yīng)用程序沒有執(zhí)行 Docker 命令。 可能的情況有:
    • SSH 到節(jié)點排查故障;
    • 節(jié)點啟動腳本;
    • 直接安裝在節(jié)點上的監(jiān)控和安全代理。
  4. 檢查執(zhí)行上述特權(quán)操作的第三方工具。 
  5. 確認(rèn)沒有對 dockershim 行為的間接依賴。這是一種極端情況,不太可能影響你的應(yīng)用。 一些工具很可能被配置為使用了 Docker 特性,比如,基于特定指標(biāo)發(fā)警報, 或者在故障排查指令的一個環(huán)節(jié)中搜索特定的日志信息。 如果你有此類配置的工具,需要在遷移之前,在測試集群上測試這類行為。

Docker 依賴詳解

容器運行時是一個軟件, 用來運行組成 Kubernetes Pod 的容器。 Kubernetes 負(fù)責(zé)編排和調(diào)度 Pod;在每一個節(jié)點上,kubelet 使用抽象的容器運行時接口,所以你可以任意選用兼容的容器運行時。

在早期版本中,Kubernetes 提供的兼容性支持一個容器運行時:Docker。 在 Kubernetes 后來的發(fā)展歷史中,集群運營人員希望采用別的容器運行時。 于是 CRI 被設(shè)計出來滿足這類靈活性需求 - 而 kubelet 亦開始支持 CRI。 然而,因為 Docker 在 CRI 規(guī)范創(chuàng)建之前就已經(jīng)存在,Kubernetes 就創(chuàng)建了一個適配器組件 dockershim。 dockershim 適配器允許 kubelet 與 Docker 交互,就好像 Docker 是一個 CRI 兼容的運行時一樣。


切換到 Containerd 容器運行時可以消除掉中間環(huán)節(jié)。 所有相同的容器都可由 Containerd 這類容器運行時來運行。 但是現(xiàn)在,由于直接用容器運行時調(diào)度容器,它們對 Docker 是不可見的。 因此,你以前用來檢查這些容器的 Docker 工具或漂亮的 UI 都不再可用。

你不能再使用 ?docker ps? 或 ?docker inspect? 命令來獲取容器信息。 由于你不能列出容器,因此你不能獲取日志、停止容器,甚至不能通過 ?docker exec? 在容器中執(zhí)行命令。

Note:
如果你在用 Kubernetes 運行工作負(fù)載,最好通過 Kubernetes API 停止容器, 而不是通過容器運行時來停止它們 (此建議適用于所有容器運行時,不僅僅是針對 Docker)。

你仍然可以下載鏡像,或者用 ?docker build? 命令創(chuàng)建它們。 但用 Docker 創(chuàng)建、下載的鏡像,對于容器運行時和 Kubernetes,均不可見。 為了在 Kubernetes 中使用,需要把鏡像推送(push)到某鏡像倉庫。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號