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

Elastic Container Instance:VNodectl を使用してセルフマネージド Kubernetes クラスターに VNode をデプロイする

最終更新日:Feb 12, 2026

オンプレミスのデータセンターまたは Alibaba Cloud Elastic Compute Service (ECS) インスタンス上でセルフマネージド Kubernetes クラスターを実行しており、Elastic Container Instance (ECI) を利用したい場合、クラスター内に仮想ノード(VNode)をデプロイする必要があります。VNode のデプロイおよび管理を簡素化するため、ECI では VNodectl コマンドラインインターフェイス(CLI)を提供しています。本トピックでは、VNodectl を使用してセルフマネージド Kubernetes クラスターに VNode を自動デプロイする方法について説明します。

前提条件

  • Kubernetes クラスターのバージョン 1.16 から 1.30 がデプロイされています。

  • Kubernetes クラスターがデータセンターにデプロイされている場合、ECI ベースの Pod が属する仮想プライベートクラウド(VPC)とデータセンターのネットワークが、Express Connect、Smart Access Gateway、または VPN Gateway を使用して接続されていることを確認してください。詳細については、以下のトピックをご参照ください:

事前準備

VNode をセルフマネージド Kubernetes クラスターにデプロイする前に、VNode の作成に必要なパラメーター情報を準備し、クラスター内での VNode デプロイに必要な権限を理解してください。以下の表に、VNode の作成に必要なパラメーターを示します。

パラメーター

説明

操作

リージョン

リージョンは、Alibaba Cloud のデータセンターが展開されている地理的エリアです。エンドユーザーの地理的位置やリソース価格に基づいてリージョンを選択してください。詳細については、「リージョンとゾーン」をご参照ください。

弾性コンテナインスタンスおよび関連リソースは、選択したリージョンに作成されます。

Elastic Container Instance の利用可能なリージョンは、Elastic Container Instance コンソールで照会するか、DescribeRegions API 操作を呼び出して取得できます。

VPC

VPC は、Alibaba Cloud 上に構築されたプライベートネットワークです。VPC 間は論理的に分離されています。詳細については、「VPC とは?」をご参照ください。

弾性コンテナインスタンスおよび関連リソースは、設定した VPC 内に作成されます。

説明

Kubernetes クラスターがデータセンターにデプロイされている場合、データセンターのネットワークと VPC が接続されていることを確認してください。

VPC は、VPC コンソールVPC ページで作成および表示できます。

vSwitch

vSwitch は、異なるクラウドリソースを接続する基本的なネットワークデバイスです。VPC 内に弾性コンテナインスタンスおよび関連リソースを作成する場合は、vSwitch を指定する必要があります。複数の vSwitch を指定することも可能です。その場合、システムが vSwitch のプールから自動的に vSwitch を選択します。

vSwitch は、VPC コンソールvSwitch ページで作成および表示でき、選択した VPC 内の vSwitch を選択できます。

セキュリティグループ

セキュリティグループは、グループ内のリソースに対するインバウンドおよびアウトバウンドトラフィックを制御する仮想ファイアウォールであり、ネットワークセキュリティを向上させます。セキュリティグループの詳細については、「セキュリティグループの概要」をご参照ください。

弾性コンテナインスタンスおよび関連リソースは、選択したセキュリティグループに追加されます。

説明

高度セキュリティグループを選択し、以下のインバウンドセキュリティグループルールを追加することを推奨します:

  • 1 つ目のルール:VPC の CIDR ブロックからのポート 1 ~ 65535 へのアクセスを許可します。

  • 2 つ目のルール:Kubernetes API サーバーのエンドポイントから VNode のサービスポート 10250 および 10255 へのアクセスを許可します。

セキュリティグループは、ECS コンソールセキュリティグループ ページで作成および表示でき、選択した VPC 内のセキュリティグループを選択できます。

VNode を作成するには、ネイティブ Kubernetes ノード用の標準権限および VNode 用の追加権限を設定する必要があります。以下に、各権限の内容を示します。

種別

権限

説明

標準権限

system:node

ノード用の標準権限です。

system:node-proxier

kube-proxy 用の標準権限です。

system:certificates.k8s.io:certificatesigningrequests:nodeclient

ノードが証明書作成要求を発行するための権限です。

system:certificates.k8s.io:certificatesigningrequests:selfnodeclient

既存の証明書に基づき、証明書更新要求を発行するための権限です。

追加権限

pods update および pods patch

Pod のアノテーションを更新するための権限です。たとえば、k8s.aliyun.com/eci-instance-id などの計算済みアノテーションを Pod に追加できます。

pvc update および pvc patch

PersistentVolumeClaim(PVC)のアノテーションを更新するための権限です。

VNodectl のインストール

VNodectl を使用する前に、CLI をインストールしてください。ご利用の環境に応じたインストールパッケージを取得し、VNodectl をインストールします。

オペレーティングシステム

CPU アーキテクチャ

ダウンロードリンク

macOS

AMD64

macOS_AMD64

ARM64

macOS_ARM64

Linux

AMD64

Linux_AMD64

ARM64

Linux_ARM64

Windows

AMD64

Windows_AMD64

ARM64

Windows_ARM64

VNodectl のインストール先として、Kubernetes クラスターのマスターノードを推奨します。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 コマンドに --dry オプションを追加すると、クライアント側でコマンドを検証できます。

  • vnode コマンド実行時に API バージョンの互換性エラーが発生した場合、--kubernetes-version オプションを追加して、クラスターの Kubernetes バージョンを指定してください。

クラスターの構成

VNode は kubeconfig ファイルを使用してクラスターに接続します。VNode を作成する前に、VNode 用の kubeconfig ファイルを生成してください。kubeconfig ファイルは TLS Bootstrap モードまたは ServiceAccount モードで生成できます。

説明
  • セキュリティ要件がある場合は、TLS Bootstrap モードを使用してください。このモードでは、vnode-approver コンポーネントが自動的にデプロイされます。vnode-approver は、VNode によって送信された証明書署名要求(CSR)を承認します。ソースコードは GitHub で公開されています。詳細については、「vnode-approver」をご参照ください。

  • ServiceAccount モードでは証明書のローテーションがサポートされていません。kubeconfig ファイルを生成する際は、トークンの有効期間を長く、または永続的に設定してください。これにより、トークンの有効期限切れによる VNode の障害を防止できます。

TLS Bootstrap

  1. kubeconfig ファイルを生成します。

    1. クラスターの構成情報を準備します。

      構成パラメーター

      説明

      取得方法

      kubeconfig

      VNode がクラスター内で必要とする権限を構成します。

      デフォルトのパスは ~/.kube/config です。別の kubeconfig ファイルを使用することもできます。

      /path/to/kubeconfig

      クラスター CA

      VNode がクラスターに接続するために必要な kubeconfig ファイルを生成します。管理者権限を持つ kubeconfig ファイルから認証局(CA)を使用できます。API サーバー起動時に渡された CA を使用することを推奨します。

      ps aux | grep apiserver を実行し、出力から --client-ca-file の値を取得します。

      /path/to/ca.crt

      API サーバーのアドレス

      クラスター間通信、認証、および権限付与に使用されます。

      kubeconfig ファイルを表示し、出力から API サーバーのアドレスを取得します。

      https://8.134.XX.XX:6443

      tokenId

      TLS Bootstrap トークンを生成し、Bootstrap トークンシークレットを作成します。

      6 文字の英数字で構成されるカスタム文字列です。

      eci123

      tokenSecret

      16 文字の英数字で構成されるカスタム文字列です。

      eci1233333333333

    2. vnode-approver コンポーネントをデプロイします。

      vnode addon enable vnode-approver
    3. クラスターを構成して kubeconfig ファイルを生成します。

      コマンド内のパラメーター値を、実際のクラスター情報に置き換えてください。例:

      vnode cluster setup --kubeconfig  /path/to/kubeconfig  --bootstrap --bootstrap-token-id <token-id> --bootstrap-token-secret <token-secret> --apiserver-address https://8.134.XX.XX:6443 --cluster-ca-path  /path/to/ca.crt
  2. クラスターが VNode のデプロイをサポートしているかどうかを検証します。

    vnode cluster validate

    以下の出力が表示されます。デフォルトでは、kubeconfig ファイルは ~/.vnode/deploy/kubeconfig に保存されます。

    kubeconfig can't be empty

ServiceAccount

  1. kubeconfig ファイルを生成します。

    1. クラスターの構成情報を準備します。

      構成パラメーター

      説明

      取得方法

      kubeconfig

      VNode がクラスター内で必要とする権限を構成します。

      デフォルトのパスは ~/.kube/config です。別の kubeconfig ファイルを使用することもできます。

      /path/to/kubeconfig

      クラスター CA

      VNode がクラスターに接続するために必要な kubeconfig ファイルを生成します。管理者権限を持つ kubeconfig ファイルから認証局(CA)を使用できます。API サーバー起動時に渡された CA を使用することを推奨します。

      ps aux | grep apiserver を実行し、出力から --client-ca-file の値を取得します。

      /path/to/ca.crt

      API サーバーのアドレス

      クラスター間通信、認証、および権限付与に使用されます。

      kubeconfig ファイルを表示し、出力から API サーバーのアドレスを取得します。

      https://8.134.XX.XX:6443

    2. クラスターを構成して kubeconfig ファイルを生成します。

      コマンド内のパラメーター値を、実際のクラスター情報に置き換えてください。例:

      vnode cluster setup --kubeconfig /path/to/kubeconfig --apiserver-address https://8.134.XX.XX:6443 --cluster-ca-path /path/to/ca.crt
  2. クラスターが VNode のデプロイをサポートしているかどうかを検証します。

    vnode cluster validate

    以下の出力が表示されます。デフォルトでは、kubeconfig ファイルは ~/.vnode/deploy/kubeconfig に保存されます。

    kubeconfig can't be empty

~/.vnode/config ファイルの構成

~/.vnode/config ファイルには VNode の構成が含まれています。VNodectl は実行時にこのファイルを読み取ります。VNode を作成する前に、このファイルを構成してください。

  1. VNode 実行に必要な構成を表示します。

    vnode config default

    以下の表に、構成内の contexts セクションのフィールドを示します。

    フィールド

    必須

    説明

    name

    はい

    コンテキストの名前です。

    vnode-name

    いいえ

    VNode の名前です。このフィールドは設定しないでください。システムが自動的に一意の名前を生成します。

    region-id

    はい

    VNode が配置されるリージョンの ID です。リージョンの選択方法については、「事前準備」をご参照ください。

    access-key-id

    はい

    Alibaba Cloud の API 操作を呼び出す際に、本人確認を完了するために AccessKey ペアを使用します。AccessKey ペアは AccessKey ID と AccessKey Secret で構成されます。詳細については、「AccessKey ペアの作成」をご参照ください。

    access-key-secret

    はい

    vswitch-id

    はい

    VNode に関連付けられた vSwitch の ID です。複数の vSwitch を指定できます。vSwitch の作成方法については、「事前準備」をご参照ください。

    security-group-id

    はい

    VNode が属するセキュリティグループの ID です。セキュリティグループの作成方法については、「事前準備」をご参照ください。

    resource-group-id

    いいえ

    VNode が属するリソースグループです。

    リソースグループは、Alibaba Cloud アカウント内のリソースをグループ化する仕組みです。各アカウントにはデフォルトのリソースグループがあります。詳細については、「Resource Management」をご参照ください。

    リソースグループを指定しない場合、VNode はデフォルトのリソースグループに所属します。

    kubeconfig

    はい

    VNode をクラスターに接続するために必要な kubeconfig ファイルのパスです。このパスは、クラスターの構成後に自動的に生成されます。デフォルトでは、kubeconfig ファイルは ~/.vnode/deploy/kubeconfig に保存されます。

    taints

    いいえ

    VNode にバインドされる Taint です。

    tags

    いいえ

    VNode にバインドされるタグです。

    タグは、請求額の分割管理に役立ちます。VNode にカスタムタグをバインドすると、コスト分析で VNode に課金されたインスタンス料金をフィルター処理できます。詳細については、「タグによる分割請求額の表示」をご参照ください。

    network-type

    いいえ

    VNodectl が ECI コントロールサービスのエンドポイントにアクセスする際に使用するネットワークタイプです。

    • インターネットエンドポイントを使用する場合は、このフィールドを空のままにしてください。

    • VNodectl が VPC 内で実行される場合は、vpc を指定して VPC エンドポイントを使用します。

  2. 構成を ~/.vnode/config ファイルにリダイレクトし、フィールドを構成します。

    vnode config default > ~/.vnode/config
    vim ~/.vnode/config

    ~/.vnode/config ファイルをニーズに応じて編集してください。以下の例では、必須フィールドのみを示しています。

    kind: vnode
    contexts:
        - name: default
          region-id: cn-guangzhou
          access-key-id: <yourAccessKeyID>
          access-key-secret: <yourAccessKeySecret>
          vswitch-id: vsw-7xv2yk45qp5etidgf****
          security-group-id: sg-7xv5tcch4kjdr65t****
          kubeconfig: ~/.vnode/deploy/kubeconfig
    current-context: default
  3. VNode が実行時に読み取る構成を検証します。

    vnode config
  4. コンテキストを切り替えて、VNode がそのコンテキストの構成を読み込むようにします。

    vnode config set-context <context-name>

VNode の作成

  1. VNode を作成します。

    vnode create
    説明

    VNode は ~/.vnode/config ファイルの構成を使用して作成されます。customResources、clusterDNS、clusterDomain を構成するためのパラメーターを追加できます。詳細については、「VNode の管理」をご参照ください。

    以下のサンプル出力が表示されます。VirtualNodeId の値が新しい VNode の ID です。

    {"RequestId":"AB772F9D-2FEF-5BFD-AAFB-DA3444851F29","VirtualNodeId":"vnd-7xvetkyase7gb62u****"}
  2. VNode のステータスを表示します。

    vnode list

    以下のサンプル出力が表示されます。STATUS が Ready の場合、VNode の作成は成功しています。

    VNODE ID                    VNODE NAME                                   CREATED          STATUS    SCHEDULABLE ZONES
    vnd-7xvetkyase7gb62u****    vnode-cn-guangzhou-a-7xvetkyase7gb62u****    2 minutes ago    Ready     cn-guangzhou-a
  3. ノード情報を表示します。

    kubectl get node

    以下のサンプル出力が表示されます。これは、VNode がクラスターに接続されていることを示しています。

    NAME                                    STATUS     ROLES                  AGE    VERSION
    cn-guangzhou.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

VNode への Pod のスケジュール

VNode を作成した後は、以下のいずれかの方法を使用して Pod を VNode にスケジュールできます。その後、Pod を VNode 上で弾性コンテナインスタンスとして実行できます。

  • 手動スケジュール

    nodeSelector および tolerations パラメーターを構成するか、nodeName パラメーターを指定することで、Pod を VNode にスケジュールできます。詳細については、「VNode への Pod のスケジュール」をご参照ください。

  • 自動スケジュール

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

関連ドキュメント