コンテナ ランタイムを Docker から containerd に変更する

クラスタではコンテナ ランタイムを使用して、Kubernetes Pod の作成と実行を行います。Anthos clusters on bare metal のバージョン 1.13 より前のバージョンでは、コンテナ ランタイムは Docker Engine または containerd のいずれかでした。ただし、コンテナ ランタイムとして使用できるのは、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 は、引き続きイメージの作成とアプリケーション コンテナのビルドに使用できます。そうしたコンテナは、クラスタ内で引き続き機能します。

bmctl コマンドでは、クラスタの作成などのオペレーションに Docker が必要になるため、引き続き管理ワークステーションに Docker をインストールする必要があります。この Docker の使用も、dockershim のサポート終了による影響を受けません。

コンテナのランタイムを docker から containerd に変更する方法について詳しくは、以下の各セクションをご覧ください。

始める前に

  • クラスタをアップグレードする際は、ユーザー クラスタをアップグレードする前に、管理クラスタをアップグレードする必要があります。

  • デプロイが containerd バージョン 1.4.6 以降をサポートしていることを確認します。ベアメタル版 Anthos クラスタは、以前にインストールされた 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 にアップグレードする場合は、いずれかのコンテナ ランタイムを使用できます。ただし、Docker Engine コンテナ ランタイムはバージョン 1.13.0 以降ではサポートされていないため、containerd を使用することを強くおすすめします。