データセンターまたは 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 を選択できます。 |
セキュリティグループ | セキュリティグループは、グループ内のリソースのインバウンドトラフィックとアウトバウンドトラフィックを制御してネットワーク セキュリティを向上させる仮想ファイアウォールです。セキュリティグループの詳細については、「概要」をご参照ください。 選択したセキュリティグループに、エラスティックコンテナインスタンスと関連リソースが追加されます。 説明 高度なセキュリティグループを選択し、次のインバウンド セキュリティグループ ルールを追加することをお勧めします。
| 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 のパッチ | ポッドのアノテーションを更新するための権限。たとえば、 |
pvc の更新と pvc のパッチ | PersistentVolumeClaim (PVC) のアノテーションを更新するための権限。 |
VNodectl のインストール
VNodectl を使用してセルフマネージド Kubernetes クラスターに VNode をデプロイする前に、VNodectl をインストールする必要があります。クラスター環境に基づいてインストール パッケージを入手し、VNodectl をインストールします。
オペレーティング システム | CPU アーキテクチャ | インストール パッケージのハイパーリンク |
macOS | AMD64 | |
ARM64 | ||
Linux | AMD64 | |
ARM64 | ||
Windows | AMD64 | |
ARM64 |
Kubernetes クラスターの Master ノードに VNodectl をインストールすることをお勧めします。 VNodectl をインストールするには、次の操作を実行します。
Kubernetes クラスターに接続します。
VNodectl のインストール パッケージをダウンロードします。
wget https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnodectl_0.0.5-beta_linux_amd64.tar.gz -O vnodectl.tar.gz
ダウンロードした VNodectl のパッケージ ファイルを展開します。
tar xvf vnodectl.tar.gz
展開したパッケージ ファイルを指定したディレクトリにコピーします。
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 ブートストラップ
kubeconfig 証明書を生成します。
クラスターの構成に必要な情報を準備します。
パラメータ
説明
操作
例
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
vnode-approver コンポーネントをデプロイします。
vnode addon enable vnode-approver
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
VNode をクラスターにデプロイできるかどうかを検証します。
vnode cluster validate
次のコマンド出力が返されます。デフォルトでは、kubeconfig 証明書は
~/.vnode/deploy/kubeconfig
に保存されます。kubeconfig can't be empty
ServiceAccount
kubeconfig 証明書を生成します。
クラスターの構成に必要な情報を準備します。
パラメータ
説明
操作
例
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
kubeconfig 証明書を生成するようにクラスターを構成します。
コマンドのパラメータに実際のクラスター情報を指定します。コマンド例:
vnode cluster setup --kubeconfig /path/to/kubeconfig --apiserver-address https://8.134.XX.XX:6443 --cluster-ca-path /path/to/ca.crt
VNode をクラスターにデプロイできるかどうかを検証します。
vnode cluster validate
次のコマンド出力が返されます。デフォルトでは、kubeconfig 証明書は
~/.vnode/deploy/kubeconfig
に保存されます。kubeconfig can't be empty
~/.vnode/config ファイルの構成
~/.vnode/config
ファイルには、VNode の構成情報が含まれています。 VNodectl は、実行時にこのファイルを読み取ります。 VNode を作成する前に、このファイルを構成する必要があります。
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 を指定します。
構成情報を
~/.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
VNode の実行時に VNode によって読み取られる構成情報を検証します。
vnode config
VNode の実行時に VNode がコンテキスト内の構成を読み込むようにコンテキストを切り替えます。
vnode config set-context <context-name>
VNode の作成
VNode を作成します。
vnode create
説明VNode は
~/.vnode/config
ファイルの構成に基づいて作成されます。 customResources、clusterDNS、clusterDomain を構成するためのパラメータを追加できます。詳細については、「VNode を管理する」をご参照ください。次の出力例が返されます。 VirtualNodeId の値は、生成された VNode の ID です。
{"RequestId":"AB772F9D-2FEF-5BFD-AAFB-DA3444851F29","VirtualNodeId":"vnd-7xvetkyase7gb62u****"}
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
ノードに関する情報を表示します。
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 にスケジュールされないようにする必要があります。
DaemonSet の構成を変更します。
kubectl -n kube-system edit ds kube-proxy
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 にポッドをスケジュールする」をご参照ください。