コンテナ ランタイムでの 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 のサポート

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

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

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

OS イメージのタイプコンテナ ランタイム
ubuntu_containerdcontainerd
coscontainerd
windowscontainerd

制限事項と推奨事項

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

  • Docker Engine を使用するクラスタをバージョン 1.13 にアップグレードすることはできません。1.13 にアップグレードする前に、containerd ランタイムを使用するためにクラスタを更新する必要があります。

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

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 に設定します。