すべてのプロダクト
Search
ドキュメントセンター

Elastic Container Instance:VNode と ECS 上の自己管理型 Kubernetes クラスターの統合

最終更新日:Jun 03, 2026

ECS 上の自己管理型 Kubernetes クラスターに仮想ノード (VNode) をデプロイし、同一 VPC 内で Elastic Container Instance (ECI) を使用して Pod をスケジューリングします。

背景情報

ECI はインフラストラクチャレイヤーで Pod のスケジューリングとリソースを管理し、Kubernetes はその上でワークロード管理を担います。ECS 上の自己管理型クラスターに VNode を追加すると、ECI を使用できます。自己管理型 Kubernetes クラスターの ECI への接続では、統合プロセス全体について説明しています。

前提条件

  • kubeadm で作成された、ECS 上の自己管理型 Kubernetes クラスター (v1.13~1.30)。

  • クラスターに Flannel、Calico、または Cilium のネットワークプラグインがデプロイされていること。

vnodectl のインストール

ECI は、VNode を接続・管理するための vnodectl を提供しています。クラスターのコントロールプレーンノードにインストールすることを推奨します。

  1. クラスターに接続します。

  2. インストールパッケージをダウンロードします。

    wget https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnodectl_0.0.5-beta_linux_amd64.tar.gz -O vnodectl.tar.gz 
  3. パッケージを展開します。

    tar xvf vnodectl.tar.gz 
  4. vnodectl をディレクトリにコピーします。

    cp vnodectl /usr/local/bin/vnode

~/.vnode/config ファイルの設定

  1. ~/.vnode/config ファイルを編集します。

    vim ~/.vnode/config

    設定を追加します。例:

    重要
    • kubeconfig には cluster-admin 権限が必要です。権限を制限した代替案については、「クラスターの設定」をご参照ください。

    • VNode から kubeconfig 内の API サーバーアドレスに到達できる必要があります。

    kind: vnode
    contexts:
        - name: default                                          # コンテキストの名前
          region-id: cn-hangzhou                                 # リージョン ID
          access-key-id: <yourAccessKeyID>                       # AccessKey ID
          access-key-secret: <yourAccessKeySecret>               # AccessKey Secret
          vswitch-id: vsw-7xv2yk45qp5etidgf****                  # VNode が属する vSwitch の ID
          security-group-id: sg-7xv5tcch4kjdr65t****             # VNode が属するセキュリティグループの ID
          kubeconfig: /path/to/kubeconfig                        # クラスターの kubeconfig ファイルへのパス
    current-context: default
  2. アクティブなコンテキストを設定します。

    vnode config set-context <context-name>

VNode の作成

  1. VNode を作成します。

    vnode create

    出力には VirtualNodeId が含まれます。

    {"RequestId":"AB772F9D-2FEF-5BFD-AAFB-DA3444851F29","VirtualNodeId":"vnd-7xvetkyase7gb62u****"}
  2. ノードを確認します。

    kubectl get node

    VNode が Ready ステータスで表示されます。

    NAME                                    STATUS     ROLES                  AGE    VERSION
    cn-hangzhou.vnd-7xvetkyase7gb62u****    Ready      agent                  174m   v1.20.6
    vnode-test001                           Ready      control-plane,master   23h    v1.20.6
    vnode-test002                           Ready      <none>                 22h    v1.20.6

DaemonSetがVNodeにスケジュールされないようにする

VNodeは実際のノードではないため、DaemonSetはVNodeで実行できません。VNodeを作成した後、kube-proxyのDaemonSetを変更し、nodeAffinityを設定してDaemonSetがVNodeにスケジュールされないようにする必要があります。

  1. DaemonSetの構成を変更します。

    kubectl -n kube-system edit ds kube-proxy
  2. nodeAffinityを設定します。

    spec.template.spec に次の YAML コンテンツを追加します。

    affinity:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: type
              operator: NotIn
              values:
              - virtual-kubelet

PodをVNodeにスケジュールする

VNodeを作成した後、次のいずれかの方法を使用してPodをVNodeにスケジュールできます。その後、PodをVNodeのエラスティックコンテナインスタンスとして実行できます。

  • 手動スケジューリング

    nodeSelectorおよびtolerationsパラメータを設定するか、nodeNameパラメータを指定して、PodをVNodeにスケジュールできます。詳細については、PodをVNodeにスケジュールするを参照してください。

  • 自動スケジューリング

    eci-profileコンポーネントをデプロイした後、Selectorパラメータを指定できます。このようにして、システムはSelectorで指定された条件を満たすPodをVNodeに自動的にスケジュールします。詳細については、eci-profileを使用してPodをVNodeにスケジュールするを参照してください。

Pod のネットワーク接続の確立

VNode 上の Pod は、VPC の vSwitch から ENI と内部 IP アドレスを受け取ります。

デフォルトでは、VNode 上の Pod はクラスターのオーバーレイネットワーク (Flannel、Calico、または Cilium) 上の Pod には到達できませんが、その逆は可能です。VPC のルートテーブルにルートエントリを追加して、VNode 上の Pod からのアウトバウンドトラフィックを正しい ECS ノードに転送する必要があります。

ルート設定の例:

  • シナリオ例

    この例では、test1 は VNode 上で、test2 は ECS ノード上で実行されます。デフォルトでは、test2 は test1 に到達できますが、その逆はできません。

    NAME      READY     RESTARTS    AGE    IP                NODE                                   NOMINATED NODE   READINESS NODE
    test1     1/1       0           58s    192.168.0.245     cn-hangzhou.vnd-7xvetkyase7gb62u****   <none>           <none>
    test2     1/1       0           35s    10.88.1.4         vnode-test002                          <none>           <none>
  • 手順

    1. VPC コンソールにログインします。

    2. 左側メニューで、ルートテーブル をクリックします。

    3. クラスターのリージョンに切り替え、VPC のルートテーブルを見つけて、その ID をクリックします。

    4. ルートエントリ タブで、カスタムルート タブをクリックします。

    5. ルートエントリの追加 をクリックします。

    6. [ルートエントリの追加] パネルで、ルートエントリを設定し、OK をクリックします。

      設定例:

      • ターゲット CIDR:ターゲット ECS ノード上の Pod の CIDR ブロック (例:10.88.1.0/24) を入力します。

      • ネクストホップの種類ECS インスタンス を選択します。

      • ECS インスタンス:ターゲットの ECS ノードを選択します。

  • 結果の確認

    kubectl exec を実行して test1 でシェルを開き、test2 に ping を実行します。正常な応答があれば、test1 が test2 に到達できるようになったことが確認できます。

関連ドキュメント