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

:自己管理型KubernetesクラスターをVNodeへ接続

最終更新日:Jun 20, 2022

データセンターまたはAlibaba Cloud Elastic Compute Service (ECS) に自己管理型Kubernetesクラスターがある場合、エラスティックコンテナインスタンスを使用するには仮想ノード (VNodes) をデプロイする必要があります。 このトピックでは、自己管理型KubernetesクラスターをVNodeに接続する方法について説明します。

前提条件

  • バージョンが1.13と1.20の間のKubernetesクラスターがデプロイされます。

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

準備

自己管理型KubernetesクラスターをVNodeに接続する前に、VNnodeに必要な権限を理解し、VNodeの作成に必要な次のパラメーター情報を準備します。

パラメーター

説明

操作

リージョン

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

elasticコンテナインスタンスと関連するリソースは、選択したリージョンに作成されます。

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

VPC

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

elasticコンテナインスタンスと関連するリソースは、設定した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-proxier

kube-proxyの標準権限。

system:certificates.k8s.io:certificatesigningrequests:nodeclient

証明書の作成要求を開始するためのノードの権限。

system:certificates.k8s.io:certificatesigningrequests:selfnodeclient

既存の証明書に基づいて証明書を作成する要求を開始するためのノードの権限。 権限は、証明書のローテーションを要求することです。

追加の権限

ポッドの更新とポッドのパッチ

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

pvcアップデートとpvcパッチ

PersistentVolumeClaims (PVC) のアノテーションを更新します。

エンドポイントの作成と更新

リーダー選挙保証。

V1.13以降のバージョンのクラスターにこれらの権限を設定する必要はありません。

ステップ1: KubeConfig証明書の生成

VNodesをKubernetesクラスターに接続するには、KubeConfig証明書が必要です。 したがって、VNodeを作成する前に、KubeConfig証明書をVNodeに発行する必要があります。 次の操作を実行します。

説明

管理者証明書を使用する場合は、このセクションをスキップしてください。

  1. 構成スクリプトをダウンロードして実行し、KubeConfig証明書を生成します。

    TLS BootstrapまたはServiceAcoountモードで、適切なコマンドを実行して、Kubernetesクラスターのバージョンに基づいてKubeConfig証明書を生成します。

    • TLSブートストラップ

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

      • クラスタのバージョンが1.14と1.20の間の場合、次のコマンドを実行してKubeConfig証明書を生成します。

        curl -fsSL https://eci-release.oss-cn-beijing.aliyuncs.com/vnode-deploy.sh | bash -s -- ブートストラップ
      • クラスターのバージョンが1.13の場合は、次のコマンドを実行してKubeConfig証明書を生成します。

        v1.13のクラスターの場合、エンドポイントリソースはリーダーを選択する必要があります。 スクリプトでEXTRA_PRIVILEDGE=trueを設定して、追加の権限を設定する必要があります。

        curl -fsSL https://eci-release.oss-cn-beijing.aliyuncs.com/vnode-deploy.sh | env EXTRA_PRIVILEDGE=true bash -s -- ブートストラップ
    • ServiceAcoount

      このモードでは、証明書のローテーションはサポートされません。 KubeConfig証明書を発行するときは、KubeConfigの有効期限が切れたためにVNodeが失敗しないように、トークンに十分な有効期間または永続的な有効期間があることを確認してください。

      • クラスタのバージョンが1.14と1.20の間の場合、次のコマンドを実行してKubeConfig証明書を生成します。

        curl -fsSL https://eci-release.oss-cn-beijing.aliyuncs.com/vnode-deploy.sh | bash -s -- common
      • クラスターのバージョンが1.13の場合は、次のコマンドを実行してKubeConfig証明書を生成します。

        v1.13のクラスターの場合、エンドポイントリソースはリーダーを選択する必要があります。 スクリプトでEXTRA_PRIVILEDGE=trueを設定して、追加の権限を設定する必要があります。

        curl -fsSL https://eci-release.oss-cn-beijing.aliyuncs.com/vnode-deploy.sh | env EXTRA_PRIVILEDGE=true bash -s -- common
  2. KubeConfigを表示します。

    KubeConfigはvnode-configという名前です。次のコマンドを実行してKubeConfigを表示します。

    cat vnode-config

    KubeConfigを表示するときは、次の項目に注意してください。

    • VNodeを作成するVPCがサーバーエンドポイントに接続できるかどうかを確認します。

    • certificate-authority-dataの内容が空の場合は、~/.kube/configでPATHフィールドが使用されているかどうかを確認してください。

    次のコードは、KubeConfigのサンプルコンテンツを提供します。

    • TLSブートストラップ

      apiVersion: v1
      kind: 構成
      current-context: kubernetes-admin @ kubernetes
      コンテキスト:
      -name: kubernetes-admin @ kubernetes
        コンテキスト:
          クラスター: kubernetes-admin @ kubernetes
          ユーザー: vnode
          名前空間: kube-system
      クラスター:
      -name: kubernetes-admin @ kubernetes
        クラスター:
          certificate-authority-data: "*****************************************=="
          server: https:// 10.16.XX.XX:6443
      ユーザー:
      -name: vnode
        ユーザー:
          token: ******.****************
    • ServiceAcoount

      apiVersion: v1
      kind: 構成
      current-context: kubernetes-admin @ kubernetes
      コンテキスト:
      -name: kubernetes-admin @ kubernetes
        コンテキスト:
          クラスター: kubernetes-admin @ kubernetes
          ユーザー: vnode
          名前空間: kube-system
      クラスター:
      -name: kubernetes-admin @ kubernetes
        クラスター:
          certificate-authority-data: "*****************************************=="
          server: https:// 10.16.XX.XX:6443
      ユーザー:
      -name: vnode
        ユーザー:
          token: *********************************************** 

ステップ2: VNodeの作成

Elastic Container Instanceコンソールを使用するか、API操作を呼び出してVNodeを作成できます。

方法1: Elastic Container Instanceコンソールを使用する

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

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

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

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

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

    下表に、設定可能なパラメーターを示します。

    パラメーター

    説明

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

    VNodeが属するVPCおよびセキュリティグループ。 VNodeが接続されているvSwitch。 VPC、vSwitch、およびセキュリティグループの作成方法については、このトピックの準備セクションを参照してください。

    KubeConfig

    VNodeが接続されているKubernetesクラスターのKubeConfig。 KubeConfig証明書を生成する方法については、ステップ1を参照してください。

    TlsBootstrapEnabled

    TLSブートストラップを有効にするかどうかを指定します。 TLSブートストラップモードを使用してKubeConfig証明書が生成されている場合は、設定を有効にします。 設定を有効にすると、証明書のローテーションも有効になります。 現在のKubeConfig証明書の有効期限が切れると、システムは自動的にVNodeの新しいKubeConfig証明書を申請します。

    ラベル

    VNodeにバインドされているラベル。

    Taint

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

    Elastic IP Address

    VNodeがインターネットにアクセスする必要がある場合は、elastic IPアドレス (EIP) をVNodeに関連付ける必要があります。

    • EIPの自動作成: システムは自動的にEIPを作成し、VNodeに関連付けます。

    • 既存のEIPの使用: システムは既存のEIPをVNodeに関連付けます。

    説明

    EIPは、個別に購入して所有できるパブリックIPアドレスです。 詳細については、「EIPとは」をご参照ください。

    リソースグループ

    リソースグループは、リソースがAlibaba Cloudアカウントのグループによって管理されるメカニズムです。 Each account is assigned with a default resource group. 詳細については、「リソース管理とは」をご参照ください。

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

方法2: API操作を呼び出す

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

パラメーター

データ型

説明

RegionId

String

cn-shanghai

VNodeのリージョンID。

VSwitchId

String

vsw-2ze23nqzig8inprou ****

VSwitch の ID です。 vSwitchは、VNodeとVNode内のエラスティックコンテナインスタンスに接続されます。

VPCに1〜10個のvSwitchを指定できます。

SecurityGroupId

String

sg-2ze81zoc3yl7a3we ****

セキュリティグループの ID です。 VNodeとVNode内のエラスティックコンテナインスタンスがセキュリティグループに追加されます。

KubeConfig

String

JTVDbmFwaVZlcnNpb24lM0ElMjB2MSU1Q25jbHVzdGVycyUzQSU1Q24tJTIwY2x1c3RlciUzQSU1Q24uLi ******

VNodeが接続されているKubernetesクラスターのKubeConfig。 値はBase64-encodedである必要があります。

TlsBootstrapEnabled

Boolean

true

TLSブートストラップを有効にするかどうかを指定します。 TLSブートストラップモードを使用してKubeConfig証明書が生成されている場合は、設定を有効にします。 設定を有効にすると、証明書のローテーションも有効になります。 現在のKubeConfig証明書の有効期限が切れると、システムは自動的にVNodeの新しいKubeConfig証明書を申請します。

結果を確認する

数分待ちます。 次の図に示すように、Kubernetesクラスターで作成したVNodeを表示できます。 p364411

ステップ3: anti-affinityポリシーの設定

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

  1. 次のコマンドを実行して、DaemonSetの設定を変更します。

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

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

    affinity:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            -キー: タイプ
              演算子: NotIn
              values:
              -virtual-kubelet 

次の手順

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

  • 手動スケジューリング

    nodeSelectorパラメーターと許容範囲パラメーターを設定するか、nodeNameパラメーターを指定して、ポッドをVNodeにスケジュールすることができます。 詳細については、「VNodeへのポッドのスケジュール」をご参照ください。

  • 自動スケジューリング

    ECIプロファイル機能を使用すると、セレクタをカスタマイズできます。 その後、Elastic Container Instanceは、セレクタの条件を満たすポッドをVNodeに自動的にスケジュールします。 特定の操作の詳細については、「ポッドをオーケストレーションするためのECIプロファイルの設定」をご参照ください。