从 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)