从 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 在 /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

如何迁移:从仅限 Docker 迁移到 Dynatrace 中的通用容器指标

Containerd 支持公告:获得对基于 containerd 的 Kubernetes 环境的自动化全栈可见性

CRI-O 支持公告:获得对 CRI-O Kubernetes 容器的自动化全栈可见性(测试版)

访问 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-stats。供应商之前已弃用 kubelet-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:更新 /tasks/administer-cluster 部分中的页面权重 (b1202c78ff)