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

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

最終更新日:Jul 02, 2025

データセンターまたは Alibaba Cloud Elastic Compute Service (ECS) インスタンスにセルフマネージド Kubernetes クラスターを作成し、セルフマネージド Kubernetes クラスターでエラスティックコンテナインスタンスを使用する場合、VNode をデプロイする必要があります。 Elastic Container Instance は、VNode のデプロイと管理を行うための VNodectl CLI を提供します。このトピックでは、VNodectl を使用して Kubernetes クラスターに VNode を自動的にデプロイする方法について説明します。

前提条件

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

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

準備

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

パラメータ

説明

操作

リージョン

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

選択したリージョンに、エラスティックコンテナインスタンスと関連リソースが作成されます。

Elastic Container Instance コンソール を使用するか、DescribeRegions API オペレーションを呼び出すことで、Elastic Container Instance が利用可能なリージョンをクエリできます。

VPC

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

構成した VPC に、エラスティックコンテナインスタンスと関連リソースが作成されます。

説明

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

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

vSwitch

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

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

セキュリティグループ

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

選択したセキュリティグループに、エラスティックコンテナインスタンスと関連リソースが追加されます。

説明

高度なセキュリティグループを選択し、次のインバウンド セキュリティグループ ルールを追加することをお勧めします。

  • 1 つのルールで、VPC の CIDR ブロックを介した 1 ~ 65535 のすべてのポートへのアクセスを許可します。

  • もう 1 つのルールで、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 の更新と pods のパッチ

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

pvc の更新と pvc のパッチ

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

VNodectl のインストール

VNodectl を使用してセルフマネージド Kubernetes クラスターに VNode をデプロイする前に、VNodectl をインストールする必要があります。クラスター環境に基づいてインストール パッケージを入手し、VNodectl をインストールします。

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

CPU アーキテクチャ

インストール パッケージのハイパーリンク

macOS

AMD64

macOS_AMD64

ARM64

macOS_ARM64

Linux

AMD64

Linux_AMD64

ARM64

Linux_ARM64

Windows

AMD64

Windows_AMD64

ARM64

Windows_ARM64

Kubernetes クラスターの Master ノードに VNodectl をインストールすることをお勧めします。 VNodectl をインストールするには、次の操作を実行します。

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

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

    wget https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnodectl_0.0.5-beta_linux_amd64.tar.gz -O vnodectl.tar.gz 
  3. ダウンロードした VNodectl のパッケージ ファイルを展開します。

    tar xvf vnodectl.tar.gz 
  4. 展開したパッケージ ファイルを指定したディレクトリにコピーします。

    cp vnodectl /usr/local/bin/vnode
説明
  • クライアント検証のために、vnode コマンドに --dry を追加できます。

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

クラスターの構成

VNode を作成する前に、VNode の kubeconfig 証明書を生成する必要があります。その後、kubeconfig を使用してセルフマネージド Kubernetes クラスターに VNode をデプロイできます。 kubeconfig は、TLS ブートストラップ モードまたは ServiceAccount モードで生成できます。

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

  • ServiceAccount モードは証明書のローテーションをサポートしていません。 kubeconfig 証明書を生成する際は、トークンの有効期限が十分に長く、または永続的であることを確認して、kubeconfig の有効期限切れによる VNode の障害を防いでください。

TLS ブートストラップ

  1. kubeconfig 証明書を生成します。

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

      パラメータ

      説明

      操作

      kubeconfig

      このパラメータは、クラスターに VNode をデプロイするために必要な権限を構成するために使用されます。

      デフォルト パス ~/.kube/config から kubeconfig 証明書を取得します。別のパスから 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 ブートストラップ トークンを生成し、ブートストラップ トークン シークレットを作成するために使用されます。

      値を指定します。値は 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 証明書を取得します。別のパスから 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

    次の表に、構成情報におけるコンテキストのパラメータを示します。

    パラメータ

    必須

    説明

    name

    はい

    コンテキストの名前。

    vnode-name

    いいえ

    VNode の名前。システムが一意の値を生成できるように、このパラメータを構成しないことをお勧めします。

    region-id

    はい

    VNode が存在するリージョンの ID。リージョンの選択方法については、このトピックの準備を行うセクションをご参照ください。

    access-key-id

    はい

    API オペレーションを呼び出すときは、AccessKey ペアを使用して ID 検証を完了する必要があります。 AccessKey ペアは、AccessKey ID と AccessKey シークレットで構成されます。詳細については、「AccessKey ペアを作成する」をご参照ください。

    access-key-secret

    はい

    vswitch-id

    はい

    VNode が関連付けられている vSwitch の ID。複数の vSwitch を指定できます。 vSwitch の作成方法については、このトピックの準備を行うセクションをご参照ください。

    security-group-id

    はい

    VNode が属するセキュリティグループの ID。セキュリティグループの作成方法については、このトピックの準備を行うセクションをご参照ください。

    resource-group-id

    いいえ

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

    リソース グループとは、Alibaba Cloud アカウント内のリソースをグループで管理するメカニズムです。各 Alibaba Cloud アカウントには、デフォルトのリソース グループが割り当てられています。詳細については、「リソース管理とは」をご参照ください。

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

    kubeconfig

    はい

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

    taints

    いいえ

    VNode にバインドされている taint。

    tags

    いいえ

    VNode にバインドされているタグ。

    タグは分割請求の管理に使用できます。カスタム タグを VNode にバインドした後、料金分析を表示する際に、そのタグを使用して VNode 内のインスタンスの課金料金をフィルタリングできます。詳細については、「タグに基づいて分割請求を表示する」をご参照ください。

    network-type

    いいえ

    VNodectl がアクセスする Elastic Container Instance のコントロール サービスのネットワーク タイプ。

    • このパラメータはデフォルトでは空のままです。これはインターネットを指定します。

    • 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 によって読み取られる構成情報を検証します。

    vnode config
  4. VNode の実行時に 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 へのポッドのスケジュール

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

  • 手動スケジュール

    nodeSelector パラメータと tolerations パラメータを構成するか、nodeName パラメータを指定して、ポッドを VNode にスケジュールできます。詳細については、「VNode にポッドをスケジュールする」をご参照ください。

  • 自動スケジュール

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

参照