Kubernetes教程

Kubernetes迁移dockershim

Kubernetes 对与 Docker Engine 直接集成的支持已被弃用且已经被删除。 大多数应用程序不直接依赖于托管容器的运行时。但是,仍然有大量的遥测和监控代理依赖 docker 来收集容器元数据、日志和指标。 本文汇总了一些信息和链接:信息用于阐述如何探查这些依赖,链接用于解释如何迁移这些代理去使用通用的工具或其他容器运行。

一、遥测和安全代理

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

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

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

一些代理和 Docker 工具紧密绑定。比如代理会用到 docker ps 或 docker top 这类命令来列出容器和进程,用 docker logs 订阅 Docker 的日志。 如果现有集群中的节点使用 Docker Engine,在切换到其它容器运行时的时候, 这些命令将不再起作用。

2、识别依赖于 Docker Engine 的 DaemonSet

如果某 Pod 想调用运行在节点上的 dockerd,该 Pod 必须满足以下两个条件之一:

  • 将包含 Docker 守护进程特权套接字的文件系统挂载为一个卷;
  • 直接以卷的形式挂载 Docker 守护进程特权套接字的特定路径。

举例来说:在 COS 镜像中,Docker 通过 /var/run/docker.sock 开放其 Unix 域套接字。 这意味着 Pod 的规约中需要包含 hostPath 卷以挂载 /var/run/docker.sock。

下面是一个 shell 示例脚本,用于查找包含直接映射 Docker 套接字的挂载点的 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'

对于 Pod 来说,访问宿主机上的 Docker 还有其他方式。 例如,可以挂载 /var/run 的父目录而非其完整路径 (就像这个例子)。 上述脚本只检测最常见的使用方式。

3、检测节点代理对 Docker 的依赖性

在集群节点被定制、且在各个节点上均安装了额外的安全和遥测代理的场景下, 一定要和代理的供应商确认:该代理是否依赖于 Docker。

二、从dockershim迁移

1、Aqua

无需更改:在运行时变更时可以无缝切换运行。

2、Datadog

如何迁移: Kubernetes 中对于 Docker 的弃用名字中包含以下字符串的 Pod 可能访问 Docker Engine:

  • datadog-agent
  • datadog
  • dd-agent

3、Dynatrace

如何迁移: 在 Dynatrace 上从 Docker-only 迁移到通用容器指标

Containerd 支持公告:在基于 containerd 的 Kubernetes 环境的获取容器的自动化全栈可见性 CRI-O 支持公告:在基于 CRI-O 的 Kubernetes 环境获取容器的自动化全栈可见性(测试版)

名字中包含以下字符串的 Pod 可能访问 Docker:

  • dynatrace-oneagent

4、Falco

如何迁移: 迁移 Falco 从 dockershim Falco 支持任何与 CRI 兼容的运行时(默认配置中使用 containerd)。

名字中包含以下字符串的 Pod 可能访问 Docker:

  • falco

5、Prisma Cloud Compute

在依赖于 CRI(非 Docker)的集群上安装 Prisma Cloud 。名字中包含以下字符串的 Pod 可能访问 Docker:

  • twistlock-defender-ds

6、SignalFx (Splunk)

SignalFx Smart Agent(已弃用)在 Kubernetes 集群上使用了多种不同的监视器, 包括 kubernetes-cluster,kubelet-stats/kubelet-metrics,docker-container-stats。 kubelet-stats 监视器此前已被供应商所弃用,现支持 kubelet-metrics。 docker-container-stats 监视器受 dockershim 移除的影响。 不要为 docker-container-stats 监视器使用 Docker Engine 之外的运行时。

如何从依赖 dockershim 的代理迁移:

(1)从所配置的监视器中移除 docker-container-stats。 注意,若节点上已经安装了 Docker,在非 dockershim 环境中启用此监视器后会导致报告错误的指标; 如果节点未安装 Docker,则无法获得指标。

(2)启用和配置 kubelet-metrics 监视器。

名字中包含以下字符串的 Pod 可能访问 Docker:

  • signalfx-agent

注意:收集的指标会发生变化,具体请查看规则和仪表盘。

广告合作
QQ群号:707632017

温馨提示:

1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com。(#改为@)

2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

目录