将容器运行时从 Docker 更改为 containerd

您的集群使用容器运行时来创建和运行 Kubernetes Pod。在 Anthos Clusters on Bare Metal 1.13 版之前,容器运行时可以是 Docker Enginecontainerd。但是,从 Anthos Clusters on Bare Metal 1.13 版开始,容器运行时只能是 containerd

如果您的集群使用 Docker Engine 作为容器运行时,则应将该容器运行时更改为 containerd。本页面介绍如何将容器运行时设置为 containerd

您可以通过在集群配置文件中设置 containerRuntime 字段的值来指定容器运行时。但是,仅仅设置或更改此字段的值是不够的,您必须创建新集群或升级现有集群才能使更改生效。换句话说,您只能在创建新集群或升级现有集群时更改容器运行时。

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 Engine 容器运行时的 1.12 版集群。
  • 您可以将使用 Docker Engine 的 1.11 集群升级到使用 Docker Engine 的 1.12 集群。但是,我们强烈建议您在升级之前改为使用 containerd

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

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

如需详细了解如何将容器运行时从 docker 更改为 containerd,请参阅以下部分。

准备工作

  • 注意,在升级集群时,您必须先升级管理员集群,然后再升级用户集群。

  • 确保您的部署支持 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 可以在您的节点上安装以下证书:/etc/containerd/certs.d/

containerd 设置为新集群的容器运行时

如果集群配置文件的 spec.nodeConfig 部分为空或未设置,则在创建新集群时,集群的容器运行时会自动设置为 containerd

但是,如果要明确将 containerd 设置为新集群的容器运行时,请在集群配置文件的 spec.nodeConfig 部分中将 containerRuntime 字段设置为 containerd。完成此操作后,您的集群配置应如下所示:

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

使用此集群配置文件创建新集群时,容器运行时将为 containerd

升级集群时将容器运行时从 docker 更改为 containerd

如需在升级集群时将容器运行时从 docker 更改为 containerd,请完成以下步骤:

  1. 在集群配置文件的 spec.nodeConfig 部分中将 containerRuntime 字段从 docker 更改为 containerd。完成此操作后,您的集群配置应如下所示:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: cluster1
      namespace: cluster-cluster1
    spec:
      nodeConfig:
        containerRuntime: containerd
    
  2. 运行以下命令来升级集群:

    bmctl upgrade cluster -c CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
    

    请替换以下内容:

    • CLUSTER_NAME 替换为要更新的集群的名称。
    • ADMIN_KUBECONFIG 替换为管理员集群的 kubeconfig 文件的路径。

检查容器运行时的状态

如需检查容器运行时的状态,请运行以下命令:

systemctl status containerd

升级集群时将容器运行时从 containerd 更改为 docker

从 Anthos Clusters on Bare Metal 1.11 版升级到 1.12 版时,您可以使用任一容器运行时。但是,我们强烈建议您使用 containerd,因为 1.13.0 版及更高版本不支持 Docker Engine 容器运行时。