从 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 文档中保留了各种遥测和安全代理供应商的迁移说明的进行中版本。请联系供应商以获取有关从 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 迁移 FalcoFalco 支持任何与 CRI 兼容的运行时(containerd 用于默认配置);文档解释了所有详细信息。访问 Docker 的 Pod 的名称可能包含

  • falco

Prisma Cloud Compute

查看Prisma Cloud 文档,位于“在 CRI(非 Docker)集群上安装 Prisma Cloud”部分下。访问 Docker 的 Pod 的名称可能是

  • twistlock-defender-ds

SignalFx(Splunk)

SignalFx 智能代理(已弃用)使用几种不同的 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)