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

このページでは、クラスタが Kubernetes Pod の実行に使用するコンテナ ランタイムを指定する方法について説明します。コンテナ ランタイムを指定するには、クラスタ構成ファイルの containerRuntime フィールドの値を設定します。

containerRuntime フィールドの値は、クラスタのアップグレード時またはインストール時にのみ変更できます。このフィールドはオプションで、設定しない場合のデフォルト値は containerd です。

Kubernetes 1.24 では Docker Engine のサポートが終了

Kubernetes の dockershim コンポーネントを使用すると、クラスタノードで Docker Engine コンテナ ランタイムを使用できます。ただし、Kubernetes 1.24 では dockershim コンポーネントが削除されました。ベアメタル バージョン 1.13 の Anthos クラスタは 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 クラスタは、以前にインストールされた 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 クラスタが、選択したランタイムに応じて次の証明書をノードにインストールできるようにします。

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

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

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

  • containerd
  • docker

フィールドが空または未設定の場合、ベアメタル版 Anthos クラスタはデフォルトで 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 に変更する

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

  • 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 は、選択したランタイム(containerd または docker)に置き換えます。