コンテナ ランタイムでの containerd の使用

コンテナ ランタイムは、Kubernetes ノード上のコンテナとコンテナ イメージを管理するソフトウェアです。containerd は、CNCF(Cloud Native Cloud Foundation)から移行したコンテナ ランタイムです。Kubernetes はネイティブでサポートされており、Kubernetes 向け Docker Engine よりもリソース効率と安全性が高いと考えられています。Kubernetes 1.20 までは、Docker Engine が主要なコンテナ ランタイムでした。しかし、Dockershim(Kubernetes の Docker Engine 統合コード)は、Kubernetes 1.20 で非推奨になり、Kubernetes 1.24 で削除されました。

今後は、クラスタでは containerd を使用する必要があります。

管理クラスタでの containerd のサポート

Anthos clusters on VMware は、すべての管理クラスタノードに containerd を使用します。

ユーザー クラスタでの containerd のサポート

Anthos clusters on VMware は、ユーザー クラスタノード用に次の OS イメージタイプをサポートしています。

OS イメージのタイプコンテナ ランタイム
ubuntuDocker Engine
ubuntu_containerdcontainerd
coscontainerd
windowsDocker Engine または containerd

制限事項と推奨事項

  • バージョン 1.13.0 以降では、Anthos clusters on VMware は ubuntu OS イメージタイプをサポートしなくなります。すべてのクラスタノードは containerd ランタイムを使用します。

  • Docker Engine を使用するクラスタは、バージョン 1.13 にアップグレードできません。

  • バージョン 1.12.0 以降、ubuntu OS イメージタイプを使用する新しいクラスタは作成できなくなりました。つまり、Docker Engine コンテナ ランタイムを使用する新しいクラスタは作成できなくなりました。

  • ユーザー クラスタを 1.11 から 1.12 にアップグレードした場合、1.12 クラスタでは Docker Engine ランタイムを引き続き使用できます。ただし、1.12 にアップグレードする前に、containerd ランタイムを使用するために 1.11 クラスタを更新することを強くおすすめします。

Docker Engine を使用するノードプールを特定する

Ubuntu

Docker Engine を使用する Ubuntu ノードプールをリストします。

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get onpremnodepools \
    -o json -A | jq -r '.items[] |select(.spec.osImageType == "ubuntu")|.metadata.name'

USER_CLUSTER_KUBECONFIG は、ユーザー クラスタ kubeconfig ファイルのパスに置き換えます。

出力例:

ubuntu-node-pool-1
ubuntu-node-pool-3

Windows

ユーザー クラスタ内のすべての Windows ノードプールは、同じコンテナ ランタイムを使用します。Windows ノードのランタイムは、enableWindowsDataplaneV2(ユーザー クラスタ構成ファイル内のフィールド)の値で決まります。

enableWindowsDataplaneV2true の場合、ユーザー クラスタ内のすべての Windows ノードで containerd が使用されます。false の場合は、すべての Windows ノードで Docker Engine が使用されます。

次のコマンドを実行して、enableWindowsDataplaneV2false に設定されているユーザー クラスタを特定します。これにより、Windows ノードで Docker Engine を使用するように構成されているユーザー クラスタがわかります。

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get onpremuserclusters \
    -A -o json | jq -r '.items[] |select(.spec.enableWindowsDataplaneV2 == false)|.metadata.name'

出力には、Windows ノードで Docker Engine を使用するように構成されているすべてのユーザー クラスタが一覧表示されます。例:

user-cluster-1

ユーザー クラスタに Windows ノードプールがあるかどうかにかかわらず、クラスタで enableWindowsDataplaneV2false に設定されている場合、バージョン 1.13 へのアップグレードはできません。

containerd を使用するようにノードプールを更新する

ユーザー クラスタ構成ファイルのノードプールごとに、osImageTypeubuntu_containerd または cos に設定します。

例:

nodePools
- name: "my-node-pool"
  osImageType: "ubuntu_containerd"

ユーザー クラスタを更新します。

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

以下を置き換えます。

  • ADMIN_CLUSTER_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス

  • USER_CLUSTER_CONFIG: ユーザー クラスタの構成ファイルのパス

containerd を使用するように Windows ノードを更新する

ユーザー クラスタの構成ファイルで、enableWindowsDataplaneV2true に設定します。

enableWindowsDataplaneV2: true

ユーザー クラスタを更新します。

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

前述のコマンドは、クラスタ内のすべての Windows ノードに対してコンテナ ランタイムを containerd に設定します。