從 dockershim 遷移遙測和安全代理

Kubernetes 對 Docker Engine 的直接整合支援已棄用並已移除。大多數應用程式沒有直接依賴於執行時託管容器。然而,仍然有很多遙測和監控代理依賴於 Docker 來收集容器元資料、日誌和指標。本文件彙總瞭如何檢測這些依賴項以及如何將這些代理遷移到使用通用工具或替代執行時。

遙測和安全代理

在 Kubernetes 叢集中,有幾種不同的方法來執行遙測或安全代理。有些代理在作為 DaemonSets 或直接在節點上執行時,直接依賴於 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 的 DaemonSets

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

  • 將包含 Docker 守護程序特權套接字的檔案系統作為掛載;或者
  • 直接將 Docker 守護程序特權套接字的特定路徑作為卷掛載。

例如:在 COS 映象上,Docker 在 /var/run/docker.sock 暴露其 Unix 域套接字。這意味著 Pod 規範將包含 /var/run/docker.sockhostPath 卷掛載。

這是一個示例 shell 指令碼,用於查詢直接對映 Docker 套接字的 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 文件中維護各種遙測和安全代理供應商的遷移說明的 WIP 版本。請聯絡供應商以獲取從 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

如何遷移

將 Falco 從 dockershim 遷移 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 Engine 外,請勿將 docker-container-stats 與其他容器執行時一起使用。

如何從依賴 dockershim 的代理遷移

  1. 配置的監視器列表中移除 docker-container-stats。請注意,如果節點上安裝了 docker 但未安裝非 dockershim 執行時,保持此監視器啟用將導致報告不正確的指標;如果未安裝 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)