オンプレミスのデータセンターまたは Alibaba Cloud Elastic Compute Service (ECS) インスタンス上でセルフマネージド Kubernetes クラスターを実行しており、Elastic Container Instance (ECI) を利用したい場合、クラスター内に仮想ノード(VNode)をデプロイする必要があります。VNode のデプロイおよび管理を簡素化するため、ECI では VNodectl コマンドラインインターフェイス(CLI)を提供しています。本トピックでは、VNodectl を使用してセルフマネージド Kubernetes クラスターに VNode を自動デプロイする方法について説明します。
前提条件
Kubernetes クラスターのバージョン 1.16 から 1.30 がデプロイされています。
Kubernetes クラスターがデータセンターにデプロイされている場合、ECI ベースの Pod が属する仮想プライベートクラウド(VPC)とデータセンターのネットワークが、Express Connect、Smart Access Gateway、または VPN Gateway を使用して接続されていることを確認してください。詳細については、以下のトピックをご参照ください:
事前準備
VNode をセルフマネージド Kubernetes クラスターにデプロイする前に、VNode の作成に必要なパラメーター情報を準備し、クラスター内での VNode デプロイに必要な権限を理解してください。以下の表に、VNode の作成に必要なパラメーターを示します。
パラメーター | 説明 | 操作 |
リージョン | リージョンは、Alibaba Cloud のデータセンターが展開されている地理的エリアです。エンドユーザーの地理的位置やリソース価格に基づいてリージョンを選択してください。詳細については、「リージョンとゾーン」をご参照ください。 弾性コンテナインスタンスおよび関連リソースは、選択したリージョンに作成されます。 | Elastic Container Instance の利用可能なリージョンは、Elastic Container Instance コンソールで照会するか、DescribeRegions API 操作を呼び出して取得できます。 |
VPC | VPC は、Alibaba Cloud 上に構築されたプライベートネットワークです。VPC 間は論理的に分離されています。詳細については、「VPC とは?」をご参照ください。 弾性コンテナインスタンスおよび関連リソースは、設定した VPC 内に作成されます。 説明 Kubernetes クラスターがデータセンターにデプロイされている場合、データセンターのネットワークと VPC が接続されていることを確認してください。 | VPC は、VPC コンソールの VPC ページで作成および表示できます。 |
vSwitch | vSwitch は、異なるクラウドリソースを接続する基本的なネットワークデバイスです。VPC 内に弾性コンテナインスタンスおよび関連リソースを作成する場合は、vSwitch を指定する必要があります。複数の vSwitch を指定することも可能です。その場合、システムが vSwitch のプールから自動的に vSwitch を選択します。 | vSwitch は、VPC コンソールの 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 update および pods patch | Pod のアノテーションを更新するための権限です。たとえば、 |
pvc update および pvc patch | PersistentVolumeClaim(PVC)のアノテーションを更新するための権限です。 |
VNodectl のインストール
VNodectl を使用する前に、CLI をインストールしてください。ご利用の環境に応じたインストールパッケージを取得し、VNodectl をインストールします。
オペレーティングシステム | CPU アーキテクチャ | ダウンロードリンク |
macOS | AMD64 | |
ARM64 | ||
Linux | AMD64 | |
ARM64 | ||
Windows | AMD64 | |
ARM64 |
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パッケージを展開します。
tar xvf vnodectl.tar.gzvnodectl をディレクトリにコピーします。
cp vnodectl /usr/local/bin/vnode
任意の vnode コマンドに
--dryオプションを追加すると、クライアント側でコマンドを検証できます。vnode コマンド実行時に API バージョンの互換性エラーが発生した場合、
--kubernetes-versionオプションを追加して、クラスターの Kubernetes バージョンを指定してください。
クラスターの構成
VNode は kubeconfig ファイルを使用してクラスターに接続します。VNode を作成する前に、VNode 用の kubeconfig ファイルを生成してください。kubeconfig ファイルは TLS Bootstrap モードまたは ServiceAccount モードで生成できます。
セキュリティ要件がある場合は、TLS Bootstrap モードを使用してください。このモードでは、vnode-approver コンポーネントが自動的にデプロイされます。vnode-approver は、VNode によって送信された証明書署名要求(CSR)を承認します。ソースコードは GitHub で公開されています。詳細については、「vnode-approver」をご参照ください。
ServiceAccount モードでは証明書のローテーションがサポートされていません。kubeconfig ファイルを生成する際は、トークンの有効期間を長く、または永続的に設定してください。これにより、トークンの有効期限切れによる VNode の障害を防止できます。
TLS Bootstrap
kubeconfig ファイルを生成します。
クラスターの構成情報を準備します。
構成パラメーター
説明
取得方法
例
kubeconfig
VNode がクラスター内で必要とする権限を構成します。
デフォルトのパスは
~/.kube/configです。別の 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 Bootstrap トークンを生成し、Bootstrap トークンシークレットを作成します。
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 ファイルを使用することもできます。/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以下の表に、構成内の contexts セクションのフィールドを示します。
フィールド
必須
説明
name
はい
コンテキストの名前です。
vnode-name
いいえ
VNode の名前です。このフィールドは設定しないでください。システムが自動的に一意の名前を生成します。
region-id
はい
VNode が配置されるリージョンの ID です。リージョンの選択方法については、「事前準備」をご参照ください。
access-key-id
はい
Alibaba Cloud の API 操作を呼び出す際に、本人確認を完了するために AccessKey ペアを使用します。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 アカウント内のリソースをグループ化する仕組みです。各アカウントにはデフォルトのリソースグループがあります。詳細については、「Resource Management」をご参照ください。
リソースグループを指定しない場合、VNode はデフォルトのリソースグループに所属します。
kubeconfig
はい
VNode をクラスターに接続するために必要な kubeconfig ファイルのパスです。このパスは、クラスターの構成後に自動的に生成されます。デフォルトでは、kubeconfig ファイルは
~/.vnode/deploy/kubeconfigに保存されます。taints
いいえ
VNode にバインドされる Taint です。
tags
いいえ
VNode にバインドされるタグです。
タグは、請求額の分割管理に役立ちます。VNode にカスタムタグをバインドすると、コスト分析で VNode に課金されたインスタンス料金をフィルター処理できます。詳細については、「タグによる分割請求額の表示」をご参照ください。
network-type
いいえ
VNodectl が ECI コントロールサービスのエンドポイントにアクセスする際に使用するネットワークタイプです。
インターネットエンドポイントを使用する場合は、このフィールドを空のままにしてください。
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: defaultVNode が実行時に読み取る構成を検証します。
vnode configコンテキストを切り替えて、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-proxynodeAffinity を構成します。
spec.template.specに以下の YAML コンテンツを追加します。affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: type operator: NotIn values: - virtual-kubelet
VNode への Pod のスケジュール
VNode を作成した後は、以下のいずれかの方法を使用して Pod を VNode にスケジュールできます。その後、Pod を VNode 上で弾性コンテナインスタンスとして実行できます。
手動スケジュール
nodeSelector および tolerations パラメーターを構成するか、nodeName パラメーターを指定することで、Pod を VNode にスケジュールできます。詳細については、「VNode への Pod のスケジュール」をご参照ください。
自動スケジュール
eci-profile コンポーネントをデプロイした後、Selector パラメーターを指定できます。これにより、Selector で指定された条件を満たす Pod が自動的に VNode にスケジュールされます。詳細については、「eci-profile を使用した VNode への Pod のスケジュール」をご参照ください。