更改容器运行时

Anthos clusters on bare metal 将可选的 containerRuntime 配置字段添加到集群配置文件。使用此字段配置集群节点用于为 Kubernetes pod 调度容器的容器运行时。

从 Anthos clusters on bare metal 1.7 开始,您可以直接让 kubelet 调用容器运行时接口。此选项使得不需要 Docker 守护进程,从而可让 kubelet 与 Docker 分离。

鉴于 Kubernetes 的目标是弃用 Docker 守护进程并且将 container 设为默认,因此需要进行此更改。Kubernetes 计划从 Kubernetes 版本 1.20 开始发送警告,并最终在版本 1.24 弃用。此更改与计划的变更保持一致,以便将 containerd 设置为 GKE 的默认值。

在 Anthos clusters on bare metal 中,您可以通过新的 containerRuntime 字段将 kubelet 配置为使用 Docker 或 containerd

准备工作

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

  • 确保您的部署支持 containerd 1.4.3 或更高版本。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 可以根据您选择的运行时在节点上安装以下证书:

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

为新集群配置容器运行时

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

  • docker
  • containerd

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

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

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

从下列版本之一升级时,您可以将 Anthos clusters on bare metal 配置为使用其他容器运行时:

  • 1.6.0
  • 1.6.1
  • 1.6.2

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

要求

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

将运行时更改为 containerd

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

  • docker
  • containerd

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

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

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

bmctl upgrade cluster

升级后对控制层面的更改

在升级期间,如果运行时设置为 containerd,则 Anthos clusters on bare metal 会在控制层面节点上执行以下任务以支持负载平衡器:

  • 删除 docker.*.service 服务
  • 安装 container.*.service 服务
  • 重启到 haproxykeepalived systemd 服务

升级后,使用 docker 运行时的集群会保留其现有的 haproxykeepalived systemd 服务。

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

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

bmctl update cluster

重置集群并将 containerd 设置为运行时

如果将容器运行时设置为 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/

检查 containerd 运行时的状态

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

systemctl status containerd