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

Elastic Container Instance:VNode の追加 (手動)

最終更新日:Jun 22, 2026

オンプレミスデータセンター (IDC) または Alibaba Cloud ECS インスタンスで実行されている自己管理型 Kubernetes クラスターがある場合、Elastic Container Instance (ECI) を使用するには、クラスターに仮想ノード (VNode) をデプロイする必要があります。このトピックでは、証明書を設定し、自己管理型 Kubernetes クラスター用に VNode を手動で作成する方法について説明します。

前提条件

  • Kubernetes クラスターのバージョンが 1.16 から 1.30 であること。

  • Kubernetes クラスターがオンプレミスデータセンターにデプロイされている場合は、データセンターネットワークが Express Connect、Smart Access Gateway (SAG)、または VPN Gateway を介して Alibaba Cloud ネットワークに接続されていることを確認してください。詳細については、次のトピックをご参照ください。

事前準備

VNode を作成する前に、必要なパラメーターを収集し、必要な権限を確認してください。次の表に、必要なパラメーターを示します。

パラメーター

説明

取得方法

region

リージョンは物理的なデータセンターです。ご利用の場所、ターゲットユーザーの場所、リソース価格などの要因に基づいてリージョンを選択します。詳細については、「リージョンと可用性ゾーン」をご参照ください。

ECI とその関連リソースは、選択したリージョンに作成されます。

ECI がサポートするリージョンは、Elastic Container Instance コンソールで確認するか、DescribeRegions オペレーションを呼び出して確認できます。

VPC

VPC は、Alibaba Cloud 上に作成するカスタムプライベートネットワークです。VPC は互いに論理的に分離されています。詳細については、「VPC とは」をご参照ください。

ECI とその関連リソースは、設定した VPC 内に作成されます。

説明

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

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

vSwitch

vSwitch は、VPC 内のさまざまなクラウドリソースを接続する基本的なネットワークデバイスです。VPC 内に ECI とその関連リソースを作成する場合、1 つ以上の vSwitch を指定する必要があり、システムが自動的に 1 つを選択します。

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

security group

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

ECI とその関連リソースは、セキュリティグループに追加されます。

説明

エンタープライズセキュリティグループを使用し、次のインバウンドルールを追加することを推奨します。

  • VPC の CIDR ブロックからのすべてのポート (1–65535) へのアクセスを許可します。

  • Kubernetes API サーバーのアドレスから VNode サービスポート (10250 および 10255) へのアクセスを許可します。

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

VNode を作成する際には、必要な権限を設定する必要があります。これらには、ネイティブの Kubernetes ノードで使用される標準権限と、次の表で説明する VNode 固有の追加権限が含まれます。

タイプ

権限

説明

標準権限

system:node

標準のノード権限。

system:node-proxier

標準の kube-proxy 権限。

system:certificates.k8s.io:certificatesigningrequests:nodeclient

ノードが証明書署名要求 (CSR) を作成することを許可します。

system:certificates.k8s.io:certificatesigningrequests:selfnodeclient

ノードが既存の証明書に基づいて新しい証明書を要求することを許可します。これにより、証明書のローテーションが可能になります。

追加権限

pods update および pods patch

VNode が Pod アノテーションを更新することを許可します。たとえば、k8s.aliyun.com/eci-instance-id のような計算されたアノテーションを Pod に追加します。

pvc update および pvc patch

VNode が PersistentVolumeClaim (PVC) アノテーションを更新することを許可します。

クラスターの設定

VNode は kubeconfig ファイルを使用してクラスターに接続します。したがって、VNode を作成する前に、VNode 用の証明書 (kubeconfig) を発行する必要があります。

説明

クラスターの管理者証明書を使用する場合は、このセクションをスキップできます。

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

  2. 設定スクリプトをダウンロードして実行します。TLS ブートストラップまたは ServiceAccount を選択して kubeconfig ファイルを生成します。

    TLS ブートストラップ

    セキュリティを強化するため、TLS ブートストラップを推奨します。このメソッドは、vnode-approver コンポーネントを自動的にデプロイします。このコンポーネントは、VNode によって送信された CSR に署名し、GitHub でオープンソースとして公開されています。詳細については、「vnode-approver」をご参照ください。

    curl -fsSL https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnode-deploy.sh | bash -s -- bootstrap

    ServiceAccount

    このメソッドは証明書のローテーションをサポートしていません。トークンの有効期間が長いか、無期限であることを確認してください。これにより、証明書の有効期限切れによって VNode が利用できなくなるのを防ぎます。

    curl -fsSL https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnode-deploy.sh | bash -s -- common
  3. kubeconfig ファイルを確認します。

    生成された kubeconfig ファイルの名前は vnode-config です。次のコマンドを実行してファイルを表示します。

    cat vnode-config

    ファイルを確認する際は、次の点を確認してください。

    • VNode が作成される VPC がサーバーアドレスに到達できることを確認してください (たとえば、同じ VPC 内にあるか、ネットワークで接続されている)。

      • サーバーアドレスが IP アドレスの場合、VNode の VPC からアクセス可能である必要があります。

      • サーバーアドレスがドメイン名の場合、Alibaba Cloud VPC 内で解決可能であり、結果の IP アドレスが VNode の VPC からアクセス可能である必要があります。

    • certificate-authority-data パラメーターが空の場合、~/.kube/config ファイルの対応するフィールドがファイルパスを使用しているかどうかを確認してください。

    TLS ブートストラップ

    apiVersion: v1
    kind: Config
    current-context: kubernetes-admin@kubernetes
    contexts:
    - name: kubernetes-admin@kubernetes
      context:
        cluster: kubernetes-admin@kubernetes
        user: vnode
        namespace: kube-system
    clusters:
    - name: kubernetes-admin@kubernetes
      cluster:
        certificate-authority-data: "*****************************************=="
        server: https://10.16.XX.XX:6443
    users:
    - name: vnode
      user:
        token: ******.****************

    ServiceAccount

    apiVersion: v1
    kind: Config
    current-context: kubernetes-admin@kubernetes
    contexts:
    - name: kubernetes-admin@kubernetes
      context:
        cluster: kubernetes-admin@kubernetes
        user: vnode
        namespace: kube-system
    clusters:
    - name: kubernetes-admin@kubernetes
      cluster:
        certificate-authority-data: "*****************************************=="
        server: https://10.16.XX.XX:6443
    users:
    - name: vnode
      user:
        token: ***********************************************

VNode の作成

操作手順

VNode は、Elastic Container Instance コンソールで作成するか、API オペレーションを呼び出して作成できます。

コンソール

  1. Elastic Container Instance コンソールにログインします。

  2. 上部のナビゲーションバーで、リージョンを選択します。

  3. 左側のナビゲーションウィンドウで、[仮想ノード] を選択します。

  4. [仮想ノードの作成] をクリックします。

  5. パラメーターを設定し、[OK] をクリックします。

    次の表にパラメーターを示します。

    パラメーター

    説明

    VPC、vSwitch、セキュリティグループ

    VNode の VPC、vSwitch、およびセキュリティグループ。これらのリソースは、「事前準備」セクションで説明されているように準備する必要があります。

    KubeConfig

    VNode が接続する Kubernetes クラスターの kubeconfig。このファイルは、「クラスターの設定」セクションで説明されているように生成する必要があります。

    TlsBootstrapEnabled

    TLS ブートストラップを有効にするかどうかを指定します。

    TLS ブートストラップメソッドを使用して kubeconfig ファイルを生成した場合は、このパラメーターを有効にします。これにより、証明書のローテーションも有効になり、VNode は現在の証明書が期限切れになる前に自動的に新しい証明書を要求できるようになります。

    Tags

    VNode にバインドするタグ。

    タグを使用してコスト配分を行うことができます。カスタムタグを VNode にバインドした後、コスト分析中にタグを使用して VNode のインスタンスコストをフィルターできます。詳細については、「タグに基づいて分割請求書を表示する」をご参照ください。

    Taints

    VNode に適用する Taint。

    resource group

    リソースグループは、Alibaba Cloud アカウント (root ユーザー) の下でリソースをグループ化するために使用できる機能です。各アカウントにはデフォルトのリソースグループがあります。詳細については、「Resource Management」をご参照ください。

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

API

CreateVirtualNode オペレーションを呼び出して VNode を作成できます。次の表に、主要なパラメーターを示します。詳細については、「CreateVirtualNode」をご参照ください。

名前

タイプ

説明

RegionId

String

cn-shanghai

リージョン ID。

VSwitchId

String

vsw-2ze23nqzig8inprou****

VNode とその ECI インスタンスが使用する vSwitch の ID。

同じ VPC に属する 1 から 10 個の vSwitch を指定できます。

SecurityGroupId

String

sg-2ze81zoc3yl7a3we****

セキュリティグループ ID。VNode とその ECI インスタンスはこのセキュリティグループに追加されます。

KubeConfig

String

JTVDbmFwaVZlcnNpb24lM0ElMjB2MSU1Q25jbHVzdGVycyUzQSU1Q24tJTIwY2x1c3RlciUzQSU1Q24uLi******

VNode の Kubernetes クラスターの kubeconfig。値は Base64 エンコードされている必要があります。

TlsBootstrapEnabled

Boolean

true

TLS ブートストラップメソッドを使用して kubeconfig ファイルを生成した場合は、このパラメーターを有効にします。これにより、証明書のローテーションも有効になり、VNode は現在の証明書が期限切れになる前に自動的に新しい証明書を要求できるようになります。

結果の確認

VNode を作成した後、しばらく待ちます。その後、Kubernetes クラスターにログインし、kubectl get nodes コマンドを実行してノード情報を表示します。

  • VNode が見つかった場合、正常に作成されています。期待される出力は次のようになります。

    [root@k8s-master ~]# kubectl get nodes
    NAME                          STATUS   ROLES                AGE    VERSION
    cn-beijing.vnd-2-xxx.sx61at   Ready    agent                132m   v1.20.6
    k8s-master                    Ready    control-plane,master 169m   v1.20.6
  • VNode が見つからない場合、作成は失敗しています。VNode イベントに基づいて問題をトラブルシューティングすることを推奨します。

    Elastic Container Instance コンソールで、[仮想ノード] ページに移動します。ターゲット VNode の ID をクリックし、[イベント] タブでイベントを表示します。

    一般的なイベントエラーは次のとおりです。

    • failed to get kubernetes server version, Get \"https://10.50.XX.XX:6443/version?timeout=32s\": net/http: request canceled (Client.Timeout exceeded while awaiting headers

      このエラーは、VNode が存在する VPC が Kubernetes API サーバーの IP アドレスに接続できないことを示します。VNode と API サーバーが同じ VPC 内にあることを確認してください。そうでない場合は、ネットワーク接続があることを確認してください。

    • failed to get kubernetes server version, Get \"https://lb.kubesphere.local:6443/version?timeout=32s\": dial tcp: lookup lb.kubesphere.local on 100.100.X.:53: no such host

      このエラーは、Kubernetes API サーバーのドメイン名が VPC で解決できないことを示します。Alibaba Cloud DNS PrivateZone を設定して、ドメイン名の DNS レコードを追加できます。

説明

VNode を自己管理型 Kubernetes クラスターに接続する際に質問や問題がある場合は、DingTalk グループ 44666389 を検索して VNode サポートグループに参加してください。

DaemonSet の VNode へのスケジューリングの防止

VNode は仮想ノードであり、DaemonSet を実行できません。VNode を作成した後、kube-proxy DaemonSet に nodeAffinity を追加して、DaemonSet が VNode にスケジューリングされるのを防ぐ必要があります。

  1. DaemonSet の設定を編集します。

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

    次の YAML を spec.template.spec に追加します。

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

Pod の VNode へのスケジューリング

VNode を作成した後、次のメソッドを使用して、VNode 上で ECI インスタンスとして実行するように Pod をスケジューリングできます。

  • 手動スケジューリング

    nodeSelector と Toleration を設定するか、nodeName を指定することで、Pod を VNode に手動でスケジューリングできます。詳細については、「Pod を VNode にスケジューリングする」をご参照ください。

  • 自動スケジューリング

    eci-profile コンポーネントをデプロイした後、カスタムセレクターを設定して、一致する Pod を VNode に自動的にスケジューリングできます。詳細については、「eci-profile を使用して Pod を VNode にスケジューリングする」をご参照ください。