データセンターまたは 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 を選択できます。 |
セキュリティグループ | セキュリティグループは、グループ内のリソースのインバウンドトラフィックとアウトバウンドトラフィックを制御してネットワークセキュリティを向上させる仮想ファイアウォールです。セキュリティグループの詳細については、概要 を参照してください。 エラスティックコンテナインスタンスと関連リソースは、選択したセキュリティグループに追加されます。 説明 高度なセキュリティグループを選択し、次のインバウンドセキュリティグルーパールールを追加することをお勧めします。
| 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 | ポッドのアノテーションを更新するための権限。たとえば、 |
pvc update および pvc patch | PersistentVolumeClaim (PVC) のアノテーションを更新するための権限。 | |
endpoints create および endpoints update | リーダー選出の保証。 v1.13 以降のクラスターでは、これらの権限を構成する必要はありません。 |
VNodectl のインストール
VNodectl を使用して自己管理型 Kubernetes クラスターに VNode をデプロイする前に、VNodectl をインストールする必要があります。クラスター環境に基づいてインストールパッケージを入手し、VNodectl をインストールします。
オペレーティングシステム | CPU アーキテクチャ | インストールパッケージのハイパーリンク |
macOS | AMD64 | |
ARM64 | ||
Linux | AMD64 | |
ARM64 | ||
Windows | AMD64 | |
ARM64 |
Kubernetes クラスターのマスターノードに 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
クラスターのバージョンが 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
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
クラスターのバージョンが 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
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 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 内のインスタンスの課金料金をフィルタリングできます。詳細については、タグに基づいて分割請求を表示するを参照してください。
構成情報を
~/.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
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 を設定します。
次の 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にスケジュールするを参照してください。