從 dockershim 遷移遙測和安全代理程式

Kubernetes 對於直接與 Docker Engine 整合的支援已棄用並已移除。大多數應用程式不直接依賴於執行階段託管容器。然而,仍然有很多遙測和監控代理程式依賴 Docker 來收集容器中繼資料、日誌和量度。本文件匯總了關於如何偵測這些依賴關係的資訊,以及關於如何遷移這些代理程式以使用通用工具或替代執行階段的連結。

遙測和安全代理程式

在 Kubernetes 叢集中,有幾種不同的方式來執行遙測或安全代理程式。當某些代理程式作為 DaemonSet 執行或直接在節點上執行時,它們會直接依賴 Docker Engine。

為什麼有些遙測代理程式會與 Docker Engine 通訊?

從歷史上看,Kubernetes 的編寫是為了專門與 Docker Engine 一起工作。Kubernetes 負責網路和排程,依賴 Docker Engine 在節點上啟動和執行容器 (在 Pod 內)。某些與遙測相關的資訊 (例如 Pod 名稱) 只能從 Kubernetes 元件取得。其他資料 (例如容器量度) 不是容器執行階段的責任。早期的遙測代理程式需要查詢容器執行階段 Kubernetes,才能回報準確的圖片。隨著時間的推移,Kubernetes 獲得了支援多個執行階段的能力,現在支援任何與容器執行階段介面相容的執行階段。

某些遙測代理程式特別依賴 Docker Engine 工具。例如,代理程式可能會執行諸如 docker psdocker top 之類的命令來列出容器和程序,或執行 docker logs 來接收串流日誌。如果您現有叢集中的節點使用 Docker Engine,並且您切換到不同的容器執行階段,則這些命令將不再起作用。

識別依賴 Docker Engine 的 DaemonSet

如果 Pod 想要呼叫節點上執行的 dockerd,則 Pod 必須

  • 掛載包含 Docker 常駐程式的特權 Socket 的檔案系統,作為 Volume;或
  • 直接掛載 Docker 常駐程式的特權 Socket 的特定路徑,也作為 Volume。

例如:在 COS 映像上,Docker 在 /var/run/docker.sock 公開其 Unix 網域 Socket。這表示 Pod Spec 將包含 /var/run/docker.sockhostPath Volume 掛載。

以下是一個範例 Shell 指令碼,用於尋找直接對應 Docker Socket 的 Pod 掛載。此指令碼輸出 Pod 的命名空間和名稱。您可以移除 grep '/var/run/docker.sock' 以檢閱其他掛載。

kubectl get pods --all-namespaces \
-o=jsonpath='{range .items[*]}{"\n"}{.metadata.namespace}{":\t"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.hostPath.path}{", "}{end}{end}' \
| sort \
| grep '/var/run/docker.sock'

從節點代理程式偵測 Docker 依賴關係

如果您的叢集節點已自訂並在節點上安裝了額外的安全和遙測代理程式,請洽詢代理程式供應商,以驗證它是否對 Docker 有任何依賴關係。

遙測和安全代理程式供應商

本節旨在匯總有關可能依賴容器執行階段的各種遙測和安全代理程式的資訊。

我們將各種遙測和安全代理程式供應商的移轉說明草稿保存在 Google 文件 中。請聯絡供應商以取得從 dockershim 移轉的最新說明。

從 dockershim 移轉

Aqua

無需變更:一切都應在執行階段切換時無縫運作。

Datadog

如何遷移:Kubernetes 中的 Docker 棄用 存取 Docker Engine 的 Pod 名稱可能包含下列任一項

  • datadog-agent
  • datadog
  • dd-agent

Dynatrace

如何遷移:在 Dynatrace 中從僅限 Docker 遷移至通用容器指標

Containerd 支援公告:取得基於 containerd 的 Kubernetes 環境的自動化全堆疊可見性

CRI-O 支援公告:取得 CRI-O Kubernetes 容器的自動化全堆疊可見性 (Beta 版)

存取 Docker 的 Pod 名稱可能包含

  • dynatrace-oneagent

Falco

如何遷移

從 dockershim 遷移 Falco Falco 支援任何與 CRI 相容的執行時期(預設配置中使用 containerd);文件說明所有詳細資訊。存取 Docker 的 Pod 名稱可能包含

  • falco

Prisma Cloud Compute

請查看 Prisma Cloud 文件,在「在 CRI (非 Docker) 叢集上安裝 Prisma Cloud」章節下。存取 Docker 的 Pod 名稱可能類似

  • twistlock-defender-ds

SignalFx (Splunk)

SignalFx Smart Agent(已棄用)針對 Kubernetes 使用多個不同的監控器,包括 kubernetes-clusterkubelet-stats/kubelet-metricsdocker-container-statskubelet-stats 監控器先前已被供應商棄用,轉而使用 kubelet-metricsdocker-container-stats 監控器是受 dockershim 移除影響的監控器。請勿將 docker-container-stats 與 Docker Engine 以外的容器執行時期搭配使用。

如何從依賴 dockershim 的代理程式遷移

  1. 已配置的監控器 清單中移除 docker-container-stats。請注意,在非 dockershim 執行時期啟用此監控器,若節點上已安裝 docker,將會導致回報不正確的指標;若未安裝 docker,則不會回報任何指標。
  2. 啟用並配置 kubelet-metrics 監控器。

存取 Docker 的 Pod 名稱可能類似

  • signalfx-agent

Yahoo Kubectl Flame

Flame 不支援 Docker 以外的容器執行時期。請參閱 https://github.com/yahoo/kubectl-flame/issues/51

此頁面上的項目參考了第三方產品或專案,這些產品或專案提供 Kubernetes 所需的功能。Kubernetes 專案作者不對這些第三方產品或專案負責。如需更多詳細資訊,請參閱 CNCF 網站指南

在提出變更以新增額外的第三方連結之前,您應該閱讀內容指南

上次修改時間:2023 年 1 月 11 日上午 11:12 PST:更新 /tasks/administer-cluster 區段中的頁面權重 (b1202c78ff)