从 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 守护程序特权套接字的文件系统,作为; 或者
  • 直接挂载 Docker 守护程序的特权套接字的特定路径,也作为卷。

例如:在 COS 镜像上,Docker 将其 Unix 域套接字公开在 /var/run/docker.sock。 这意味着 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 文档中保留了各种遥测和安全代理供应商的迁移说明的正在进行的工作版本。 请联系供应商以获取有关从 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)