本页面介绍了在 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 |
|
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 节点的日志。
已知问题和问题排查
如需进行问题排查并查看存在解决方法的已知问题,请参阅排查容器运行时的问题。
后续步骤
- 请参阅 Kubernetes 1.11 公告以详细了解 containerd 集成。如需了解详情,请参阅 containerd 和 CRI 插件的文档。
- 查看从 kubernetes.io 上的 Dockershim 进行迁移的信息。
- 了解 Kubernetes 弃用 Dockershim。
- 了解如何使用 containerd 上的 gVisor 保护应用的安全。
- 了解使用 Cloud Build 在 Google Cloud 上安全可靠地构建映像以替换可能需要 Docker 的自定义解决方案的好处。