将遥测和安全代理从 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 ps 或 docker top 之类的命令来列出容器和进程,或 docker logs 来接收流式日志。如果您的现有集群中的节点使用 Docker Engine,并且您切换到不同的容器运行时,这些命令将不再起作用。
识别依赖于 Docker Engine 的 DaemonSet
如果 Pod 要对节点上运行的 dockerd 进行调用,则 Pod 必须
- 以 volume 的形式挂载包含 Docker daemon 权限套接字的 文件系统;或者
- 也以 volume 的形式直接挂载 Docker daemon 权限套接字的具体路径。
例如:在 COS 镜像上,Docker 在 /var/run/docker.sock 处公开其 Unix 域套接字。这意味着 Pod 规范将包含 /var/run/docker.sock 的 hostPath volume 挂载。
这是一个示例 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-agentdatadogdd-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-cluster、kubelet-stats/kubelet-metrics 和 docker-container-stats。kubelet-stats 监视器之前已被供应商弃用,转而支持 kubelet-metrics。受 dockershim 移除影响的是 docker-container-stats 监视器。请勿在非 dockershim 运行时中使用 docker-container-stats。
如何从依赖 dockershim 的代理迁移
- 从 配置的监视器 列表中删除
docker-container-stats。请注意,在非 dockershim 运行时启用此监视器会导致报告不正确的指标,并在未安装 docker 时不会报告任何指标。 - 启用并配置
kubelet-metrics监视器。
说明
收集的指标集将发生变化。查看您的告警规则和仪表板。访问 Docker 的 Pod 可能命名为
signalfx-agent
Yahoo Kubectl Flame
Flame 不支持除 Docker 之外的容器运行时。请参阅 https://github.com/yahoo/kubectl-flame/issues/51
此页面上的项目引用了为 Kubernetes 提供所需功能的第三方产品或项目。Kubernetes 项目作者不对这些第三方产品或项目负责。有关更多详细信息,请参阅 CNCF 网站指南。
在提出添加额外的第三方链接的更改之前,您应该阅读 内容指南。