containerd 节点映像


本页面介绍了在 Google Kubernetes Engine (GKE) 节点中使用 containerd 作为容器运行时的节点映像。

containerd 简介

容器运行时是负责运行容器的软件,可抽象化 Kubernetes 的容器管理。有几个不同的容器运行时。

containerd 运行时是 Kubernetes 支持的行业标准容器运行时,可供许多其他项目使用。containerd 运行时提供了分层抽象,可实现 gVisor映像流式传输等一组丰富的特征来扩展 GKE 功能。

与 Docker 运行时相比,containerd 运行时被认为更省资源且更安全。

在 GKE 集群中使用 containerd 映像

创建新的 GKE 集群、在现有集群中创建新的节点池或在升级现有集群时,您都可以选择使用 containerd 节点映像。 GKE Autopilot 集群始终使用带有 containerd 的 Container-Optimized OS。

下表介绍基于您的集群模式和节点池操作系统支持的 containerd 节点映像:

集群模式 节点池操作系统 节点映像
Autopilot Linux cos_containerd
Standard Linux
  • cos_containerd
  • ubuntu_containerd
Standard Windows Server

这些映像需要 GKE 1.21.1-gke.2200 或更高版本。

使用具有特权的 Pod 访问 Docker

如果您的用户使用具有特权的 Pod 访问节点上的 Docker Engine,则应更新工作负载,以确保不直接依赖于 Docker。例如,考虑将日志记录和监控提取过程从 Docker Engine 迁移到 GKE 系统插件。

使用 containerd 构建容器映像

不能使用 containerd 来构建容器映像。带有 containerd 的 Linux 映像包含 Docker 二进制文件,以便您可以使用 Docker 构建和推送映像。但是,我们不建议使用单个容器和本地节点运行命令来构建映像。

Kubernetes 无法感知 Kubernetes 范围之外的本地进程使用的系统资源,并且 Kubernetes 控制平面在分配资源时无法解释那些进程。这可能会导致您的工作负载缺乏 GKE 资源,或者导致节点不稳定。

请考虑使用单个容器范围之外的其他服务(例如 Cloud Build)完成这些任务,或者使用 kaniko 等工具将映像构建为 Kubernetes 工作负载。

如果这些建议都不适合您,并且您了解风险,则可以继续使用本地节点上的 Docker 来构建映像。您必须先将映像推送到注册表,然后才能在 GKE 集群中使用这些映像。具有 containerd 的 Kubernetes 无法感知使用 Docker 在本地构建的映像。

在 containerd 节点上调试容器

对于 Linux 节点上的调试或问题排查,您可以使用为 Kubernetes 容器运行时构建的可移植命令行工具 crictl 与 containerd 进行交互。crictl 支持查看容器和映像、读取日志以及在容器中执行命令的常用功能。如需了解整套受支持的功能和使用信息,请参阅 crictl 用户指南

对于 Windows Server 节点,containerd 守护程序作为名为 containerd 的 Windows 服务运行。

可用的日志如下所示:

  • Windows:C:\etc\kubernetes\logs\containerd.log
  • Linux:运行 journalctl -u containerd

您还可以在日志浏览器中的 LOG NAME: "container-runtime" 下查看 Windows 和 Linux 节点的日志。

已知问题和问题排查

如需进行问题排查并查看存在解决方法的已知问题,请参阅排查容器运行时的问题

后续步骤