AWS 上のクラスタ

このトピックでは、AWS 固有の機能、およびクラスタのフラット構成ファイルや Kubernetes スタイルのオブジェクト仕様では完全に構成できない機能を使用するように、Tanzu Kubernetes Grid (TKG) ワークロード クラスタを構成する方法について説明します。

構成ファイルとオブジェクト仕様を使用して、AWS でワークロード クラスタを構成する方法については、「AWS クラスタの構成ファイル」を参照してください。

重要

Tanzu Kubernetes Grid v2.4.x は、AWS での TKG ワークロード クラスタの作成をサポートする TKG の最後のバージョンです。AWS で TKG ワークロード クラスタを作成する機能は、Tanzu Kubernetes Grid v2.5 リリースで削除される予定です。

以降、VMware では、AWS で新しい TKG ワークロード クラスタを作成する代わりに、Tanzu Mission Control を使用してネイティブの AWS EKS クラスタを作成することをお勧めします。Tanzu Mission Control を使用してネイティブの AWS EKS クラスタを作成する方法については、Tanzu Mission Control ドキュメントの「AWS EKS クラスタのライフサイクルの管理」を参照してください。

詳細については、『VMware Tanzu Kubernetes Grid v2.4 Release Notes』の「AWS および Azure での TKG 管理クラスタとワークロード クラスタの廃止」を参照してください。

既存の VPC のサブネット タグの追加

クラスタで LoadBalancer タイプのサービスを作成する場合は、ワークロード クラスタに使用する予定があるパブリック サブネット(複数可)に kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared タグを追加する必要があります。

kubernetes.io/cluster/YOUR-CLUSTER-NAME=shared タグをパブリック サブネットに追加すると、クラスタの展開後に LoadBalancer タイプのサービスを作成できます。このタグを追加してからクラスタを展開するには、次の手順を実行します。

  1. クラスタに使用する既存の VPC 内のパブリック サブネットの ID を収集します。prod ワークロード クラスタを展開するには、3 つのサブネットを指定する必要があります。

  2. 次のコマンドを実行して、必要なタグを作成します。

    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
    
  3. クラスタを構成します。

  4. クラスタを作成します。例:

    tanzu cluster create my-cluster -f my-cluster-config.yaml
    

GPU 対応クラスタの展開

AWS で使用可能な NVIDIA GPU ベースの仮想マシンを利用するワークロード クラスタを展開するには、次の手順を実行します。

  1. クラスタの構成ファイルで、ワーカー ノードの NODE_MACHINE_TYPE を GPU 互換の仮想マシン タイプ(g4dn.8xlarge など)に設定します。

    • AWS の GPU 仮想マシン タイプについては、AWS ドキュメントの「Accelerated Computing」を参照してください。
  2. クラスタ構成ファイルを使用してクラスタを展開します。

    tanzu cluster create MY-GPU-CLUSTER -f MY-GPU-CONFIG
    
  3. GPU クラスタ ポリシーと GPU オペレータをクラスタにインストールします。

    1. kubectl context が現在のコンテキストでない場合は、クラスタに設定します。

    2. クラスタ API プロバイダ AWS リポジトリから必要な NVIDIA GPU リソースをダウンロードし、現在のディレクトリに保存します。

    3. クラスタ ポリシーを適用します。

      kubectl apply clusterpolicy-crd.yaml
      
    4. GPU オペレータを適用します。

      kubectl apply gpu-operator-components.yaml
      
  4. kubectl get pods -A を実行します。default 名前空間内の gpu-operator- ポッドと gpu-operator-resources 名前空間内の nvidia- ポッドのリストが表示されます。

  5. GPU 対応クラスタをテストするには、NVIDIA ドキュメントの CUDA VectorAdd ベクター追加テストを実行します。

  6. GPU オペレータをテストするには、次の手順を実行します。

    1. ワークロード クラスタのワーカー ノード数をスケール アップします。

      tanzu cluster scale MY-GPU-CLUSTER -w 2
      
    2. kubectl get pods -A を再度実行します。追加のノード用に gpu-operator- および nvidia- ポッドが表示されます。

異なる AWS アカウントでのクラスタの展開

Kubernetes クラスタがインターネットに接続しているか、VPC ピアリングまたは AWS Transit Gateway 経由でピアリングされた VPC に展開されている場合は、複数の AWS アカウントにワークロード クラスタを展開できます。

ワークロード クラスタを展開するためのセカンダリ AWS アカウントを準備するには、セカンダリ アカウントを準備し、そのアカウントと管理クラスタ アカウント間の信頼関係を次のように設定します。

IAM ロールの作成

まず、セカンダリ 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 です。

IAM ロールを引き受ける管理クラスタの有効化

信頼ポリシーを設定したら、管理クラスタ アカウントの 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 の名前です。

check-circle-line exclamation-circle-line close-line
Scroll to top icon