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

Elastic Container Instance:VNodectl を使用して自己管理型 Kubernetes クラスターに VNode をデプロイする

最終更新日:Dec 28, 2024

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

前提条件

  • バージョン 1.13 から 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 update および pods patch

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

pvc update および pvc patch

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

endpoints create および endpoints update

リーダー選出の保証。

v1.13 以降のクラスターでは、これらの権限を構成する必要はありません。

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 クラスターのマスターノードに 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

      クラスターのバージョンが 1.14 より前の場合は、コマンドにクラスターのバージョン情報を含めます。コマンド例:

      vnode cluster setup --kubernetes-version v1.13.0 --kubeconfig  /path/to/kubeconfig --bootstrap --bootstrap-token-id eci123 --bootstrap-token-secret eci1233333333333  --apiserver-address https://8.134.XX.XX:6443 --cluster-ca-path /etc/kubernetes/pki/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

      クラスターのバージョンが 1.14 より前の場合は、コマンドにクラスターのバージョン情報を含めます。コマンド例:

      vnode cluster setup --kubernetes-version v1.13.0 --kubeconfig /path/to/kubeconfig --apiserver-address https://8.134.XX.XX:6443 --cluster-ca-path /etc/kubernetes/pki/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 Secret で構成されます。詳細については、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 にバインドされているテイント。

    tags

    いいえ

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

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

  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: LTAI5tJbBkHcHBUmuP7C****
          access-key-secret: 5PlpKJT6sgLcD4f9y5pACNDbEg****
          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 を設定します。

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

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

VNodeへのPodのスケジュール

VNodeを作成した後、次のいずれかの方法を使用して、PodをVNodeにスケジュールできます。その後、PodをVNode内のElastic Container Instanceとして実行できます。

  • 手動スケジューリング

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

  • 自動スケジューリング

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

参考資料