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

Elastic Container Instance:自己管理型KubernetesクラスターにVNodeを手動でデプロイする

最終更新日:Dec 28, 2024

データセンターまたはElastic Compute Service (ECS)インスタンスに自己管理型Kubernetesクラスターを作成した場合、Elastic Container Instanceを使用するには、クラスターにVNodeをデプロイする必要があります。このトピックでは、kubeconfig証明書を設定し、KubernetesクラスターにVNodeを手動でデプロイする方法について説明します。VNodeをデプロイした後、KubernetesクラスターでElastic Container Instanceを使用できます。

前提条件

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

  • Kubernetesクラスターがデータセンターにデプロイされている場合は、データセンターとElastic Container InstanceベースのPodが属する仮想プライベートクラウド (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 and pods patch

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

pvc update and pvc patch

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

endpoints create and endpoints update

リーダー選出の保証。

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

kubeconfig証明書を生成するようにクラスターを設定する

自己管理型KubernetesクラスターにVNodeをデプロイするには、kubeconfig証明書を使用する必要があります。VNodeを作成する前に、VNodeのkubeconfig証明書を生成する必要があります。

説明

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

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

  2. 設定スクリプトをダウンロードして実行し、kubeconfig証明書を生成します。

    TLSブートストラップまたはServiceAccountモードでは、Kubernetesクラスターのバージョンに基づいて適切なコマンドを実行してkubeconfig証明書を生成します。TLSはTransport Layer Securityの略です。

    TLSブートストラップ

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

    • クラスターバージョンが1.14から1.22の場合は、次のコマンドを実行してkubeconfig証明書を生成します。

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

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

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

    ServiceAccount

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

    • クラスターバージョンが1.14から1.22の場合は、次のコマンドを実行してkubeconfig証明書を生成します。

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

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

      curl -fsSL https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnode-deploy.sh | env EXTRA_PRIVILEDGE=true bash -s -- common
  3. kubeconfigの内容を表示します。

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

    cat vnode-config

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

    • VNodeが属するVPCがサーバーに接続できることを確認してください。VPCがサーバーに接続できるようにするには、VNodeとサーバーが同じVPCに存在するか、VPCとサーバー間の接続が確立されている必要があります。

      • サーバーアドレスがIPアドレスの場合は、VNodeが存在するVPCからそのIPアドレスにアクセスできることを確認してください。

      • サーバーアドレスがドメイン名の場合、Alibaba Cloud VPCでドメイン名を解決できることを確認してください。さらに、VNodeが存在するVPCから、ドメイン名が指すIPアドレスにアクセスできる必要があります。

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

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

    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を作成する

手順

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

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証明書の生成方法については、このトピックの「クラスターを設定してkubeconfig証明書を生成する」セクションを参照してください。

    TlsBootstrapEnabled

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

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

    タグ

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

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

    テイント

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

    リソースグループ

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

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

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エンコードされている必要があります。

TlsBootstrapEnabled

Boolean

true

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

結果を確認する

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

  • VNodeの情報が表示されている場合は、VNodeが作成されています。次のコマンド出力が返されます。

    vnode1

  • VNodeの情報が表示されない場合は、VNodeの作成に失敗しています。VNode関連のイベントに基づいて問題のトラブルシューティングを行うことをお勧めします。

    Elastic Container Instanceコンソール仮想ノードページで、作成に失敗したVNodeのIDをクリックします。イベントタブで、VNodeに関するイベントを表示できます。

    一般的なイベントエラー:

    • 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サーバーに接続できないことを示しています。この問題を解決するには、VNodeとAPIサーバーが同じVPCに存在するかどうかを確認します。同じVPCにない場合は、VNodeが属するVPCとAPIサーバー間の接続が確立されていることを確認してください。

    • 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サーバーのドメイン名をAlibaba Cloud VPCで解決できないことを示しています。Alibaba Cloud DNS PrivateZoneを使用してドメイン名を解決できます。

説明

自己管理型KubernetesクラスターにVNodeをデプロイする際に要件がある場合、または問題が発生した場合は、ID 44666389のDingTalkグループに参加してサポートを受けることができます。

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

PodをVNodeにスケジュールする

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

  • 手動スケジューリング

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

  • 自動スケジューリング

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