本ドキュメントでは、仮想ノードアドオンを使用して Kubernetes クラスタに仮想ノードをデプロイする方法について説明します。

背景

仮想ノードは Virtual Kubelet を使用して実装されます。 仮想ノードは、Kubernetes とAlibaba Cloud Elastic Container Instance (ECI) を接続し、Kubernetes クラスターに高いレベルの弾力性を提供します。 Virtual Kubelet の詳細については、「 How does Virtual Kubelet work?」をご参照ください。

仮想ノードは、Kubernetes クラスターの弾力性を高めるのに役立ちます。 特に、Alibaba Cloud ECI に基づく仮想ノードは、GPU コンテナーインスタンス、EIP アドレス、および高仕様のコンテナーインスタンスをサポートしているので、クラスターの弾力性を高めることができます。 仮想ノードが提供する拡張機能によって、Kubernetes クラスターで計算するための複数のワークロードを簡単に管理できます。

仮想ノードを含むクラスターでは、物理ノードのポッドが対応する仮想ノードの ECI ポッドと通信します。

  • 仮想ノードの ECI ポッドは、使用した特定のリソース量に応じて課金されます。 ECI 課金ルールについては、「課金概要」をご参照ください。
  • 仕様範囲が 0.25 vCPU 〜 64 vCPU の ECS インスタンスがサポートされています。 詳細については、「制限」をご参照ください。

前提条件

Kubernetes クラスタが作成されています。 詳細は、「マネージド Kubernetes クラスターの作成 」をご参照ください.

クラスタ作業ノード用の仮想ノードの作成

  1. Container Service コンソール にログインします。
  2. Container Service - Kubernetes の中の左側のナビゲーションウィンドウから [Store] > [App Catalog] を選択します。 次に、[ack-virtual-node] をクリックします。
  3. [値] タブを、その後、これらのパラメータを設定します。
    • ECI_VSWITCH :VSwitch IDを設定します。
      ワーカーノードに関連付けられている VSwitch の ID を取得するには、次の手順に従います。
      1. Container Service-Kubernetes の中の左側のナビゲーションウィンドウで、 [クラスター] > [ノード] を選択します。
      2. ターゲットクラスターを選択し、[ワーカー] ノードをクリックします。
      [設定情報] 領域に VSwitch ID が表示されます。
    • ECI_SECURITY_GROUP :セキュリティグループ ID を設定します。
      ワーカーノードに関連付けられているセキュリティグループの ID を取得するには、次の手順に従います。
      1. Container Service-Kubernetes の中の左側のナビゲーションウインドウで [クラスター] > [ノード] を選択します。
      2. ターゲットクラスターを選択し、[ワーカー]ノードをクリックします。
      3. 左側のナビゲーションウィンドウで、[セキュリティグループ] をクリックします。
      セキュリティグループページに、セキュリティグループ ID が表示されます。
    • ECI_ACCESS_KEY:AccessKeyを設定します。
    • ECI_SECRET_KEY :SecretKeyを設定します。
  4. ページの右側の [展開] 領域で、ターゲットクラスタを選択し、 [展開] をクリックします。
    デフォルトでは、名前空間は kube-system に設定され、リリース名は ack-virtual-node です。
  5. Container Service-Kubernetes の中の下の左側のナビゲーションペインで、[クラスター] > [ノード] を選択し、virtual-kubelet という名前のノードが表示されていることを確認します。
    kubectl コマンドを使用して、クラスタノードと Helm 展開のステータスを表示できます。 また、Helm を使用して、デプロイされた ack-virtual-node をアップグレードおよび管理することもできます。 詳細は、「 Cloud Shell 上での kubectl を使用した Kubernetes クラスターの管理」をご参照ください.

仮想ノードでのポッドの作成

Kubernetes クラスタに仮想ノードが含まれる場合は、その仮想ノードにポッドを作成できます。 その後、仮想 kubelet は対応する ECI ポッドを作成します。 仮想ノード用のポッドを作成するには、次の 3 つの方法のいずれかを使用できます。

  • ポッドを作成するために nodeSelectortolerations を設定します。
    1. Container Service コンソール にログインします。
    2. Container Service-Kubernetes の中の左側のナビゲーションウィンドウで、[アプリケーション] > [デプロイ] をクリックします。 右上隅で、[テンプレートから作成] をクリックします。
    3. 対象となるクラスターおよび名前空間を選択し、サンプルテンプレートを選択するか、またはテンプレートをカスタマイズします。その後、[デプロイ] をクリックします。

      以下の YAML テンプレートによりポッドを作成できます。

      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: nginx
          imagePullPolicy: Always
          name: nginx
        nodeSelector:
          type: virtual-kubelet
        tolerations:
        - key: virtual-kubelet.io/provider
          operator: Exists
  • ポッドを作成するために nodeName を設定します。
    1. Container Service-Kubernetes の中の左側のナビゲーションウィンドウで、[アプリケーション] > [デプロイ] をクリックします。 右上隅で、 テンプレートから作成 をクリックします。
    2. 対象となるクラスターおよび名前空間を選択し、サンプルテンプレートを選択するか、またはテンプレートをカスタマイズします。その後、[デプロイ] をクリックします。

      以下の YAML テンプレートによりポッドを作成できます。

      apiVersion: v1
      kind: Pod
      metadata:
        - 名前:nginx
      spec:
        containers:
        - image: nginx
          imagePullPolicy: Always
          name: nginx
        nodeName: virtual-kubelet
  • ポッドを作成するための名前空間タグを設定します。
    1. Cloud Shell でkubectl を使用してターゲット Kubernetes クラスタに接続します。 詳細は、「Cloud Shell 上での kubectl を使用した Kubernetes クラスターの管理」をご参照ください.
    2. 以下のコマンドを実行し、Job を作成します。
      kubectl create ns vk
      kubectl label namespace vk virtual-node-affinity-injection=enabled
      kubectl -n vk run nginx --image nginx
Container Service-Kubernetes の左側のナビゲーションウィンドウで、 [アプリケーション] > [ポッド] を選択してポッドが作成されたことを確認します。