迁移遥测和安全代理(从 dockershim 迁移)

Kubernetes 对 Docker Engine 直接集成的支持已被废弃并移除。大多数应用程序不直接依赖于托管容器的运行时。然而,仍有许多遥测和监控代理依赖 Docker 来收集容器元数据、日志和指标。本文档汇总了如何检测这些依赖关系的信息,以及如何将这些代理迁移到使用通用工具或替代运行时的链接。

遥测和安全代理

在 Kubernetes 集群中运行遥测或安全代理有几种不同的方法。有些代理以 DaemonSets 形式或直接在节点上运行时,对 Docker Engine 有直接依赖。

为什么有些遥测代理会与 Docker Engine 通信?

历史上,Kubernetes 是专门为与 Docker Engine 配合使用而编写的。Kubernetes 负责网络和调度,依赖 Docker Engine 在节点上启动和运行容器(在 Pod 中)。一些与遥测相关的信息,例如 Pod 名称,只能从 Kubernetes 组件中获取。其他数据,例如容器指标,不是容器运行时的职责。早期的遥测代理需要查询容器运行时和 Kubernetes 才能报告准确的信息。随着时间的推移,Kubernetes 获得了支持多种运行时的能力,现在支持任何与容器运行时接口 (CRI) 兼容的运行时。

有些遥测代理专门依赖 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 规约将包含一个 hostPath 类型的卷挂载,指向 /var/run/docker.sock

这是一个示例 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 AM PST:更新 /tasks/administer-cluster 节的页面权重 (b1202c78ff)