このトピックでは、AWS 固有の機能、およびクラスタのフラット構成ファイルや Kubernetes スタイルのオブジェクト仕様では完全に構成できない機能を使用するように、Tanzu Kubernetes Grid (TKG) ワークロード クラスタを構成する方法について説明します。
構成ファイルとオブジェクト仕様を使用して、AWS でワークロード クラスタを構成する方法については、「AWS クラスタの構成ファイル」を参照してください。
クラスタで LoadBalancer
タイプのサービスを作成する場合は、ワークロード クラスタに使用する予定があるパブリック サブネット(複数可)に kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared
タグを追加する必要があります。
kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared
タグをパブリック サブネットに追加すると、クラスタの展開後に LoadBalancer
タイプのサービスを作成できます。このタグを追加してからクラスタを展開するには、次の手順を実行します。
クラスタに使用する既存の VPC 内のパブリック サブネットの ID を収集します。prod
ワークロード クラスタを展開するには、3 つのサブネットを指定する必要があります。
次のコマンドを実行して、必要なタグを作成します。
aws ec2 create-tags --resources YOUR-PUBLIC-SUBNET-ID-OR-IDS --tags Key=kubernetes.io/cluster/YOUR-CLUSTER-NAME,Value=shared
ここで、
YOUR-PUBLIC-SUBNET-ID-OR-IDS
は、前の手順で収集したパブリック サブネットの ID です。YOUR-CLUSTER-NAME
は、作成するワークロード クラスタの名前です。例:
aws ec2 create-tags --resources subnet-00bd5d8c88a5305c6 subnet-0b93f0fdbae3436e8 subnet-06b29d20291797698 --tags Key=kubernetes.io/cluster/my-cluster,Value=shared
クラスタを構成します。
クラスタを作成します。例:
tanzu cluster create my-cluster -f my-cluster-config.yaml
AWS で使用可能な NVIDIA GPU ベースの仮想マシンを利用するワークロード クラスタを展開するには、次の手順を実行します。
クラスタの構成ファイルで、ワーカー ノードの NODE_MACHINE_TYPE
を GPU 互換の仮想マシン タイプ(g4dn.8xlarge
など)に設定します。
クラスタ構成ファイルを使用してクラスタを展開します。
tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG
GPU クラスタ ポリシーと GPU オペレータをクラスタにインストールします。
kubectl context
が現在のコンテキストでない場合は、クラスタに設定します。
クラスタ API プロバイダ AWS リポジトリから必要な NVIDIA GPU リソースをダウンロードし、現在のディレクトリに保存します。
クラスタ ポリシーを適用します。
kubectl apply clusterpolicy-crd.yaml
GPU オペレータを適用します。
kubectl apply gpu-operator-components.yaml
kubectl get pods -A
を実行します。default
名前空間内の gpu-operator-
ポッドと gpu-operator-resources
名前空間内の nvidia-
ポッドのリストが表示されます。
GPU 対応クラスタをテストするには、NVIDIA ドキュメントの CUDA VectorAdd ベクター追加テストを実行します。
GPU オペレータをテストするには、次の手順を実行します。
ワークロード クラスタのワーカー ノード数をスケール アップします。
tanzu cluster scale MY-GPU-CLUSTER -w 2
kubectl get pods -A
を再度実行します。追加のノード用に gpu-operator-
および nvidia-
ポッドが表示されます。
Kubernetes クラスタがインターネットに接続しているか、VPC ピアリングまたは AWS Transit Gateway 経由でピアリングされた VPC に展開されている場合は、複数の AWS アカウントにワークロード クラスタを展開できます。
ワークロード クラスタを展開するためのセカンダリ AWS アカウントを準備するには、セカンダリ アカウントを準備し、そのアカウントと管理クラスタ アカウント間の信頼関係を次のように設定します。
まず、セカンダリ AWS アカウントで IAM ロールを設定する必要があります。
これを行うには、tanzu mc permissions aws
コマンドを使用します。「構成ファイルからの管理クラスタの展開」の「IAM リソースの作成」セクションに記載されているのと同じプロセスに従います。
1 つの AWS アカウントで管理クラスタを有効にしてワークロード クラスタをセカンダリ AWS アカウントに展開するには、最初にセカンダリ アカウントで信頼ポリシーを設定する必要があります。
これを行うには、セカンダリ アカウントで tanzu mc permissions aws
によって作成された controllers.tkg.cloud.vmware.com
を見つけます。次に、信頼関係を次のように編集します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
},
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "arn:aws:iam::MANAGEMENT-ACCOUNT-ID:root"
},
}
]
}
ここで、MANAGEMENT-ACCOUNT-ID
は、管理クラスタが展開されている AWS アカウントの ID です。
信頼ポリシーを設定したら、管理クラスタ アカウントの control-plane.tkg.cloud.vmware.com
IAM ロールを有効にして、セカンダリ アカウントで controllers.tkg.cloud.vmware.com
IAM ロールを引き受けます。
これを行うには、新しいポリシーを適用するか、インライン ポリシーを追加します。次に例を示します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::SECONDARY-ACCOUNT-ID:role/controllers.tkg.cloud.vmware.com"
}
]
}
ここで、SECONDARY-ACCOUNT-ID
はセカンダリ アカウントの AWS アカウント ID です。
AWSClusterRoleIdentity
リソースの作成管理クラスタで新しいクロスアカウント IAM ロールを設定するには、次のように、Kubernetes で新しい AWSClusterRoleIdentity
リソース オブジェクトを作成する必要があります。
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4
kind: AWSClusterRoleIdentity
metadata:
name: IDENTITY-NAME
spec:
allowedNamespaces: {}
durationSeconds: 900
roleARN: "arn:aws:iam::SECONDARY-ACCOUNT-ID:role/controllers.tkg.cloud.vmware.com"
sourceIdentityRef:
kind: AWSClusterControllerIdentity
name: default
ここで、
IDENTITY-NAME
は、リソースを識別するためのものです。たとえば、事業部門の開発アカウント (LOB-dev
) を表す名前などです。SECONDARY-ACCOUNT-ID
は、前の設定手順の ID です。AWSClusterRoleIdentity
リソースの範囲はグローバルに設定されます。allowedNamespaces
フィールドを設定して、IAM ロールを使用してクラスタの管理を許可する名前空間を制限できます。これを行うには、その値を名前空間の明示的なリストまたはセレクタに設定します。『The Cluster API Book』の「Secure Access to Identities」を参照してください。
AWSClusterRoleIdentity
リソースを作成した後、これを使用してワークロード クラスタをセカンダリ AWS アカウントに展開できます。
これを行うには、クラスタ構成ファイルに次の行を含め、任意の標準オプションを指定して tanzu cluster create
を実行します。
AWS_IDENTITY_REF_NAME: IDENTITY-NAME
ここで、IDENTITY-NAME
は、前の手順で作成した AWSClusterRoleIdentity
の名前です。