コンテナ ランタイムを変更する

ベアメタル版 Anthos クラスタでは、オプションの containerRuntime 構成フィールドがクラスタ構成ファイルに追加されます。このフィールドを使用して、Kubernetes Pod のコンテナのスケジュール設定にクラスタノードが使用するコンテナ ランタイムを構成します。

ベアメタル版 Anthos クラスタ 1.7 以降では、kubelet を使用してコンテナ ランタイム インターフェースを直接呼び出せます。この方法を使用すると、Docker デーモンが必要なくなり、kubelet と Docker を分離できます。

この変更は、Kubernetes の目的上必要とされるもので、Docker デーモンの使用は廃止され、containerd がデフォルトになります。Kubernetes では、Kubernetes バージョン 1.20 から警告を発信し、バージョン 1.24 でのサポート終了を予定しています。この変更は、containerd を GKE のデフォルトにするという予定済の変更と整合しています。

ベアメタル版 Anthos クラスタでは、新しい containerRuntime フィールドを使用して kubelet を構成し、Docker または containerd を使用できます。

始める前に

  • クラスタで使用するコンテナ ランタイムを特定します。コンテナ ランタイム フィールドの値は、クラスタをアップグレードまたはインストールするときにのみ変更できます。

  • デプロイメントが containerd バージョン 1.4.3 以降をサポートしていることを確認します。ベアメタル版 Anthos クラスタは、以前にインストールされた containerd のバージョンをこのバージョンで上書きインストールします。

  • ベアメタル版 Anthos クラスタが、両方のランタイムにインストールされた次のファイルをインストールできることを確認します。

    • バイナリ ファイル

      • /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 クラスタが、選択したランタイムに応じて次の証明書をノードにインストールできるようにします。

    • Docker 用: /etc/docker/certs.d/
    • containerd 用:
      • /etc/docker/certs.d/
      • /etc/containerd/certs.d/

新しいクラスタのコンテナ ランタイムを構成する

新しいクラスタのコンテナ ランタイムを設定するには、クラスタ構成ファイルの spec にある nodeConfig セクションの containerRuntime フィールドを設定します。ベアメタル版 Anthos クラスタでは、次の値がサポートされます。

  • docker
  • containerd

フィールドが空または未設定の場合、ベアメタル版 Anthos クラスタはデフォルトで docker を使用します。containerd を使用するには、構成内のエントリは次の例のようになる必要があります。

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

クラスタのアップグレード時にコンテナ ランタイムを構成する

次のいずれかのバージョンからアップグレードする場合は、ベアメタル版 Anthos クラスタを構成して、別のコンテナ ランタイムを使用できます。

  • 1.6.0
  • 1.6.1
  • 1.6.2

コンテナ ランタイム フィールドの値は、クラスタをアップグレードまたはインストールするときにのみ変更できます。

要件

  • ユーザー クラスタの前に管理クラスタをアップグレードする
  • クラスタをアップグレードする前に、構成ファイルの containerRuntime フィールドの値を設定する

ランタイムを containerd に変更する

アップグレード中にコンテナ ランタイムを設定するには、クラスタ構成ファイルの spec にある nodeConfig セクションに containerRuntime フィールドを設定します。ベアメタル版 Anthos クラスタでは、次の値がサポートされます。

  • 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 クラスタは、ロードバランサをサポートするためコントロール プレーン ノードで次のタスクを実行します。

  • docker.*.service サービスの削除
  • container.*.service サービスのインストール
  • haproxy および keepalived システム サービスの再起動

docker ランタイムを使用するクラスタは、アップグレード後も既存の haproxykeepalived のシステム サービスを保持します。

ランタイムに 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