更改容器运行时

本页面介绍如何指定集群用于运行 Kubernetes Pod 的容器运行时。您可以通过在集群配置文件中设置 containerRuntime 字段的值来指定容器运行时。

只有在升级或安装集群时才能更改 containerRuntime 字段的值。此字段为可选字段;如果未指定,则默认为 containerd

Kubernetes 1.24 不再支持 Docker Engine

Kubernetes 中的 dockershim 组件使集群节点能够使用 Docker Engine 容器运行时。但是,Kubernetes 1.24 移除了 dockershim 组件。由于 Anthos clusters on Bare Metal 1.13 版将在 Kubernetes 1.24 版上运行,因此 1.13 版及更高版本的集群无法再使用 Docker Engine。

在升级或创建集群时,请注意以下容器运行时规则:

  • 您必须为 1.13 及更高版本的集群使用 containerd。您无法将使用 Docker 的 1.12 集群升级到 1.13 版。
  • 您无法创建使用 Docker Engine 容器运行时的 1.12 版集群。
  • 您可以将使用 Docker 的 1.11 集群升级到使用 Docker 的 1.12 集群。但是,我们强烈建议您在升级之前改为使用 containerd。

您在开发中用于创建映像的 Docker 安装与 Kubernetes 集群内的 Docker Engine 容器运行时无关。您仍然可以使用 Docker 创建映像和构建应用容器。这些容器仍然可以在集群内运行。

必须在管理员工作站上安装 Docker。bmctl 命令需要 Docker 才能执行操作,例如创建集群。这一 Docker 用途也不受 dockershim 弃用的影响。

如需详细了解如何指定集群中使用的容器运行时,请参阅以下部分。

准备工作

  • 确定集群要使用的容器运行时。只有在升级或安装集群时,才能更改容器运行时字段的值。

  • 确保您的部署支持 containerd 1.4.6 或更高版本。Anthos clusters on bare metal 在 containerd 的任何先前安装版本的基础上安装此版本。

  • 确保 Anthos clusters on bare metal 可以安装为两个运行时安装的以下文件:

    • 二进制文件

      • /usr/bin/containerd
      • /usr/bin/containerd-shim
      • /usr/bin/containerd-shim-runc-v1
      • /usr/bin/containerd-shim-runc-v2
      • /usr/bin/crictl
      • /usr/bin/ctr
      • /usr/local/sbin/runc
    • 配置文件

      • /etc/crictl.yaml
      • /etc/systemd/system/containerd.service
      • /etc/containerd/config.toml
      • /etc/containerd/certs.d/
      • /etc/systemd/system/containerd.service.d/09-proxy.conf 只有在您配置了 HTTP 代理时,才会安装此文件。
  • 确保 Anthos clusters on bare metal 可以根据您选择的运行时在节点上安装以下证书:

    • 对于 containerd
      • /etc/docker/certs.d/
      • /etc/containerd/certs.d/
    • 对于 Docker:/etc/docker/certs.d/

为新集群配置容器运行时

如需为新集群设置容器运行时,请设置集群配置文件的 specnodeConfig 部分中的 containerRuntime 字段。Anthos clusters on bare metal 支持以下值:

  • containerd
  • docker

如果将此字段留空或未设置,则 Anthos clusters on bare metal 默认使用 containerd。如需使用 Docker,配置中的条目应类似于以下示例:

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
spec:
  nodeConfig:
    containerRuntime: docker

在升级集群时配置容器运行时

您可以在升级时配置 Anthos clusters on Bare Metal,以使用其他容器运行时。只有在升级或安装集群时,才能更改容器运行时字段的值。

要求

  • 先升级管理员集群再升级用户集群
  • 在升级集群之前,请先设置配置文件中 containerRuntime 字段的值。

将运行时更改为 Docker

如需在升级期间设置容器运行时,请设置集群配置文件的 specnodeConfig 部分中的 containerRuntime 字段。Anthos clusters on bare metal 支持以下值:

  • containerd
  • docker

如需使用 Docker,请如以下例所示更改配置文件:

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
spec:
  nodeConfig:
    containerRuntime: docker

如需在集群升级过程中将集群节点的容器运行时设置为 docker,请运行以下命令来升级集群:

bmctl upgrade cluster

更新集群并将 Docker 设置为运行时

如果您将容器运行时设置为 docker,则以下命令会更新 /etc/containerd/certs.d/ 中的映像注册表证书

bmctl update cluster

重置使用 containerd 作为运行时的集群

如果您使用默认容器运行时,则以下命令不会删除配置、二进制文件或目录:

bmctl reset cluster

在重置期间,containerd 服务会继续运行,但 Kubernetes 调度容器将停止并从 containerd 运行时中移除。

删除以下二进制文件和目录以完成重置:

  • /etc/crictl.yaml
  • /etc/systemd/system/containerd.service
  • /etc/systemd/system/containerd.service.d/
  • /etc/containerd/config.toml
  • /etc/containerd/certs.d/

如果您使用 Docker 作为运行时,则重置期间不会执行清理。

检查运行时的状态

如需在机器健康检查过程中检查运行时的状态,请运行以下命令:

systemctl status RUNTIME

RUNTIME 替换为您选择的运行时:containerddocker