データセンターまたは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を選択できます。 |
セキュリティグループ | セキュリティグループは、ネットワークセキュリティを向上させるためにグループ内のリソースのインバウンドおよびアウトバウンドトラフィックを制御する仮想ファイアウォールです。 詳細については、「概要」をご参照ください。 選択したセキュリティグループに、エラスティックコンテナインスタンスと関連リソースが追加されます。 説明 高度なセキュリティグループを選択し、次のインバウンドセキュリティグループルールを追加することを推奨します。
| ECSコンソールの [セキュリティグループ] ページでセキュリティグループを作成および表示し、選択したVPCでセキュリティグループを選択できます。 |
VNodeをデプロイするには、次の表に示すように、ネイティブKubernetesノードの標準権限とVNodeの追加権限を設定する必要があります。
データ型 | 権限 | 説明 |
---|---|---|
標準権限 | システム: ノード | ノードの標準権限。 |
system:node-proxier | kube-proxyの標準権限。 | |
system:certificates.k8s.io:certificatesigningrequests:nodeclient | 証明書の作成要求を開始するためのノードの権限。 | |
system:certificates.k8s.io:certificatesigningrequests:selfnodeclient | 既存の証明書に基づいて証明書を作成する要求を開始するためのノードの権限。 権限は、証明書のローテーションを要求することです。 | |
追加の権限 | ポッドの更新とポッドのパッチ | ポッドの注釈を更新します。 たとえば、 |
pvcアップデートとpvcパッチ | PersistentVolumeClaims (PVC) のアノテーションを更新します。 | |
エンドポイントの作成と更新 | リーダー選挙保証。 V1.13以降のバージョンのクラスターにこれらの権限を設定する必要はありません。 |
ステップ1: KubeConfig証明書の生成
VNodesをKubernetesクラスターに接続するには、KubeConfig証明書が必要です。 したがって、VNodeを作成する前に、KubeConfig証明書をVNodeに発行する必要があります。 次の操作を実行します。
管理者証明書を使用する場合は、このセクションをスキップしてください。
構成スクリプトをダウンロードして実行し、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
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コンソールを使用する
Elastic Container Instanceコンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[仮想ノード] をクリックします。
[仮想ノードの作成] をクリックします。
パラメーターを設定し、[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を表示できます。
ステップ3: anti-affinityポリシーの設定
VNodesは実ノードではないため、DaemonSetsはVNodesで実行できません。 VNodeを作成したら、kube-proxyでDaemonSetを変更し、DaemonSetsがVNodeにスケジュールされないようにnodeAffinityを設定する必要があります。 次の操作を実行します。
次のコマンドを実行して、DaemonSetの設定を変更します。
kubectl -n kube-system edit ds kube-proxy
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プロファイルの設定」をご参照ください。