カスタム ユーザー クラスタの作成

このトピックでは、GKE on AWS ユーザー クラスタの構成をカスタマイズする方法について説明します。

カスタム ユーザー クラスタを作成する理由としては、次のようなものがあります。

  • ステージング環境またはテスト環境用に別のクラスタを作成する。
  • 異なるマシンタイプのノードプールを追加する。
  • 特定の AWS アベイラビリティ ゾーン(AZ)にクラスタを作成する。

始める前に

GKE on AWS の使用を始める前に、次のことを確認してください。

  • 管理サービスをインストールしている。

  • terraform output example_cluster を使用せずにクラスタを作成する場合は、コントロール プレーン用にプライベート AWS サブネットを用意している。各サブネットは、同じ AWS リージョン内の異なる AZ に属している必要があります。また、プライベート サブネット間のトラフィックを許可するようにルートテーブルを構成する必要があります。各サブネットは NAT ゲートウェイにアクセスできる必要があります。

  • AWS Virtual Private Cloud(VPC)ID を用意します。VPC ID は vpc-012345678abcde のようになります。VPC ID は AWS Console で確認できます。

GKE on AWS リソースに接続するには、次の操作を行います。既存の AWS VPC(または VPC への直接接続)があるか、管理サービスの作成時に専用の VPC を作成したかに基づいて、以下の手順を実施します。

既存の VPC

既存の VPC への直接接続または VPN 接続がある場合は、このトピックのコマンドから env HTTP_PROXY=http://localhost:8118 行を省略します。

専用の VPC

専用の VPC で管理サービスを作成すると、GKE on AWS にパブリック サブネットの踏み台インスタンスが含まれます。

管理サービスに接続するには、次の手順を実施します。

  1. GKE on AWS 構成のディレクトリに移動します。このディレクトリは、管理サービスをインストールしたときに作成したものです。

    cd anthos-aws

  2. トンネルを開くには、bastion-tunnel.sh スクリプトを実行します。トンネルは localhost:8118 に転送されます。

    踏み台インスタンスへのトンネルを開くには、次のコマンドを実行します。

    ./bastion-tunnel.sh -N
    

    SSH トンネルからのメッセージがこのウィンドウに表示されます。接続を閉じる準備ができたら、Ctrl+C を使用するか、ウィンドウを閉じて処理を停止します。

  3. 新しいターミナルを開き、anthos-aws ディレクトリに移動します。

    cd anthos-aws
  4. kubectl を使用してクラスタに接続できることを確認します。

    env HTTPS_PROXY=http://localhost:8118 \
    kubectl cluster-info
    

    出力には、Management Service API サーバーの URL が含まれます。

コントロール プレーン インスタンス サイズの選択

GKE on AWS は、コントロール プレーン インスタンスのサイズ変更をサポートしていません。ユーザー クラスタを作成する前に、コントロール プレーンのインスタンス サイズを選択してください。コントロール プレーンのサイズは、クラスタ内のノードの数によって異なります。次の表に、さまざまなクラスタサイズに対し推奨されるコントロール プレーンのインスタンス サイズを示します。

クラスタサイズ(ノード) コントロール プレーン インスタンス タイプ
1~10 m5.large
11~100 m5.xlarge
101~200 m5.2xlarge

カスタム構成で新しいクラスタを作成する

terraform output example_cluster を使用すると、管理クラスタごとに 1 つのユーザー クラスタの構成を作成できます。追加のクラスタを作成する場合は、カスタム構成を適用する必要があります。

この例では、AWSCluster CRD と AWSNodePool CRD からクラスタを手動で作成します。

  1. GKE on AWS 構成のディレクトリに移動します。このディレクトリは、管理サービスをインストールしたときに作成したものです。

    cd anthos-aws

  2. anthos-aws ディレクトリから anthos-gke を使用して、コンテキストを管理サービスに切り替えます。

    cd anthos-aws
    anthos-gke aws management get-credentials

  3. テキスト エディタを開き、次の AWSCluster 定義を custom-cluster.yaml という名前のファイルにコピーします。

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSCluster
    metadata:
      name: CLUSTER_NAME
    spec:
      region: AWS_REGION
      networking:
        vpcID: VPC_ID
        podAddressCIDRBlocks: POD_ADDRESS_CIDR_BLOCKS
        serviceAddressCIDRBlocks: SERVICE_ADDRESS_CIDR_BLOCKS
        ServiceLoadBalancerSubnetIDs: SERVICE_LOAD_BALANCER_SUBNETS
      controlPlane:
        version:  CLUSTER_VERSION # Latest version is 1.25.5-gke.2100
        instanceType: AWS_INSTANCE_TYPE
        keyName: SSH_KEY_NAME
        subnetIDs:
        - CONTROL_PLANE_SUBNET_IDS
        securityGroupIDs:
        - CONTROL_PLANE_SECURITY_GROUPS
        iamInstanceProfile: CONTROL_PLANE_IAM_ROLE
        rootVolume:
          sizeGiB: ROOT_VOLUME_SIZE
          volumeType: ROOT_VOLUME_TYPE # Optional
          iops: ROOT_VOLUME_IOPS # Optional
          kmsKeyARN: ROOT_VOLUME_KEY # Optional
        etcd:
          mainVolume:
            sizeGiB: ETCD_VOLUME_SIZE
            volumeType: ETCD_VOLUME_TYPE # Optional
            iops: ETCD_VOLUME_IOPS # Optional
            kmsKeyARN: ETCD_VOLUME_KEY # Optional
        databaseEncryption:
          kmsKeyARN: ARN_OF_KMS_KEY
        hub: # Optional
          membershipName: ANTHOS_CONNECT_NAME
        cloudOperations: # Optional
          projectID: YOUR_PROJECT
          location: GCP_REGION
          enableLogging: ENABLE_LOGGING
          enableMonitoring: ENABLE_MONITORING
        workloadIdentity: # Optional
          oidcDiscoveryGCSBucket: WORKLOAD_IDENTITY_BUCKET
    

    以下を置き換えます。

    • CLUSTER_NAME: クラスタの名前。
    • AWS_REGION: クラスタが稼働している AWS リージョン。

    • VPC_ID: クラスタが稼働している VPC の ID。

    • POD_ADDRESS_CIDR_BLOCKS: クラスタの Pod で使用される IPv4 アドレスの CIDR 範囲。現時点では 1 つの範囲のみがサポートされています。この範囲は、ネットワークから到達可能なサブネットと重複してはなりません。複数の異なる AWSCluster オブジェクト間では、同じ範囲を使用できます。例: 10.2.0.0/16

    • SERVICE_ADDRESS_CIDR_BLOCKS: クラスタの Service で使用される IPv4 アドレスの範囲。現時点では 1 つの範囲のみがサポートされています。この範囲は、ネットワークから到達可能なサブネットと重複してはなりません。複数の異なる AWSCluster オブジェクト間では、同じ範囲を使用できます。例: 10.1.0.0/16

    • SERVICE_LOAD_BALANCER_SUBNETS: GKE on AWS がパブリック ロードバランサまたはプライベート ロードバランサを作成できるサブネット ID で置き換えます。

    • CLUSTER_VERSION: GKE on AWS でサポートされている Kubernetes バージョン。最新バージョンは 1.25.5-gke.2100 です。

    • AWS_INSTANCE_TYPE: サポートされている EC2 インスタンス タイプ

    • SSH_KEY_NAME: AWS EC2 鍵ペア

    • CONTROL_PLANE_SUBNET_IDS: コントロール プレーン インスタンスが実行される AZ のサブネット ID。

    • CONTROL_PLANE_SECURITY_GROUPS: 管理サービスのインストール中に作成された securityGroupID。これをカスタマイズするには、コントロール プレーンへの接続に必要な securityGroupID を追加します。

    • CONTROL_PLANE_IAM_PROFILE: コントロール プレーンのレプリカに割り当てられた AWS EC2 インスタンス プロファイルの名前。

    • ROOT_VOLUME_SIZE: コントロール プレーン ルート ボリュームのサイズ(GiB)。

    • ROOT_VOLUME_TYPEEBS ボリューム タイプに置き換えます。例: gp3

    • ROOT_VOLUME_IOPS は、ボリューム用にプロビジョニングされた IO オペレーション/秒(IOPS)の量に置き換えます。volumeTypeGP3 の場合のみ有効です。詳細については、汎用 SSD ボリューム(gp3)をご覧ください。

    • ROOT_VOLUME_KEY は、コントロール プレーン インスタンスのルート ボリュームを暗号化する AWS KMS 鍵の Amazon Resource Name に置き換えます。

    • ETCD_VOLUME_SIZE: etcd が使用するボリュームのサイズ。

    • ETCD_VOLUME_TYPEEBS ボリューム タイプに置き換えます。例: gp3

    • ETCD_VOLUME_IOPS は、ボリューム用にプロビジョニングされた IO オペレーション/秒(IOPS)の量に置き換えます。volumeTypegp3 の場合のみ有効です。詳細については、汎用 SSD ボリューム(gp3)をご覧ください。

    • ETCD_VOLUME_KEY は、コントロール プレーン etcd のデータ ボリュームを暗号化する AWS KMS 鍵の Amazon Resource Name に置き換えます。

    • ARN_OF_KMS_KEY: クラスタ Secret の暗号化に使用される AWS KMS 鍵。

    • ANTHOS_CONNECT_NAME: クラスタの登録に使用する Connect メンバーシップ名。メンバーシップ名は一意である必要があります。たとえば、projects/YOUR_PROJECT/locations/global/memberships/CLUSTER_NAME の場合、YOUR_PROJECT は Google Cloud プロジェクト、CLUSTER_NAME はプロジェクト内の一意の名前です。このフィールドは省略可能です。

    • YOUR_PROJECT: プロジェクト ID。

    • GCP_REGION: ログを保存する Google Cloud リージョン。AWS リージョンに近接したリージョンを選択します。詳細については、グローバル ロケーション - リージョンとゾーンをご覧ください。例: us-central1

    • ENABLE_LOGGING: true または false。コントロール プレーン ノードで Cloud Logging が有効かどうか。

    • ENABLE_MONITORING: true または false。コントロール プレーン ノードで Cloud Monitoring が有効かどうか。

    • WORKLOAD_IDENTITY_BUCKET: ワークロード ID ディスカバリ情報を含む Cloud Storage バケット名。このフィールドは省略可能です。

  4. クラスタに 1 つ以上の AWSNodePools を作成します。テキスト エディタを開き、次の AWSCluster 定義を custom-nodepools.yaml という名前のファイルにコピーします。

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSNodePool
    metadata:
      name: NODE_POOL_NAME
    spec:
      clusterName: AWSCLUSTER_NAME
      version:  CLUSTER_VERSION # latest version is 1.25.5-gke.2100
      region: AWS_REGION
      subnetID: AWS_SUBNET_ID
      minNodeCount: MINIMUM_NODE_COUNT
      maxNodeCount: MAXIMUM_NODE_COUNT
      maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT
      instanceType: AWS_NODE_TYPE
      keyName: KMS_KEY_PAIR_NAME
      iamInstanceProfile: NODE_IAM_PROFILE
      proxySecretName: PROXY_SECRET_NAME
      rootVolume:
        sizeGiB: ROOT_VOLUME_SIZE
        volumeType: VOLUME_TYPE # Optional
        iops: IOPS # Optional
        kmsKeyARN: NODE_VOLUME_KEY # Optional 
    

    以下を置き換えます。

    • NODE_POOL_NAME: AWSNodePool の一意の名前。
    • AWSCLUSTER_NAME: AWSCluster の名前。例: staging-cluster
    • CLUSTER_VERSION: サポートされている GKE on AWS Kubernetes のバージョン
    • AWS_REGION: AWSCluster と同じ AWS リージョン。
    • AWS_SUBNET_ID: AWSCluster と同じリージョン内の AWS サブネット。
    • MINIMUM_NODE_COUNT: ノードプール内のノードの最小数。詳しくは、ユーザー クラスタのスケーリングをご覧ください。
    • MAXIMUM_NODE_COUNT: ノードプール内のノードの最大数。
    • MAXIMUM_PODS_PER_NODE_COUNT: GKE on AWS がノードに割り当てることができる Pod の最大数。
    • AWS_NODE_TYPE: AWS EC2 インスタンス タイプ
    • KMS_KEY_PAIR_NAME: 各ノードプールのワーカーに割り当てられる AWS KMS 鍵ペア。
    • NODE_IAM_PROFILE: プール内のノードに割り当てられる AWS EC2 インスタンス プロファイルの名前。
    • ROOT_VOLUME_SIZE: コントロール プレーン ルート ボリュームのサイズ(GiB)。
    • VOLUME_TYPE: ノードの AWS EBS ボリューム タイプ。例: gp3
    • IOPS: ボリュームに対してプロビジョニングされた IO オペレーション/秒(IOPS)の量。volumeTypegp3 の場合のみ有効です。
    • NODE_VOLUME_KEY: ボリュームの暗号化に使用される AWS KMS 鍵の ARN。詳細については、顧客管理の CMK を使用したボリュームの暗号化をご覧ください。
  5. マニフェストを管理サービスに適用します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f custom-cluster.yaml
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f custom-nodepools.yaml
    

kubeconfig を作成する

ユーザー クラスタが起動している間、新しいユーザー クラスタの kubeconfig コンテキストを作成できます。このコンテキストを使用して、ユーザー クラスタまたは管理クラスタに対する認証を行います。

  1. anthos-gke aws clusters get-credentials を使用して、~/.kube/config にユーザー クラスタの kubeconfig を生成します。

    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    

    CLUSTER_NAME をクラスタ名に置き換えます。例: cluster-0

  2. kubectl を使用して、新しいユーザー クラスタに対する認証を行います。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl cluster-info
    

    クラスタの準備が整っている場合は、出力にクラスタ内の Kubernetes コンポーネントの URL が含まれます。

クラスタのステータスの表示

管理サービスは、AWSCluster または AWSNodePool を適用するとき、AWS リソースをプロビジョニングします。

  1. anthos-aws ディレクトリから anthos-gke を使用して、コンテキストを管理サービスに切り替えます。

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. クラスタをリストするために、kubectl get AWSClusters を使用します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get AWSClusters
    

    出力には、各クラスタの名前、状態、経過時間、バージョン、エンドポイントが含まれます。

    たとえば、次の出力には cluster-0 という名前の AWSCluster が 1 つだけ含まれています。

    NAME        STATE          AGE     VERSION         ENDPOINT
    cluster-0   Provisioning   2m41s   1.25.5-gke.2100   gke-xyz.elb.us-east-1.amazonaws.com
    

クラスタのイベントを表示する

ユーザー クラスタの最近の Kubernetes イベントを表示するには、kubectl get events を使用します。

  1. anthos-aws ディレクトリから anthos-gke を使用して、コンテキストを管理サービスに切り替えます。

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. kubectl get events を実行します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get events
    

出力には、管理サービスからの情報、警告、関連エラーが含まれます。

ユーザー クラスタの削除

ユーザー クラスタを削除するには、次の手順を行います。

  1. anthos-aws ディレクトリから anthos-gke を使用して、コンテキストを管理サービスに切り替えます。

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. kubectl delete を使用して、ユーザー クラスタを含むマニフェストを削除します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f CLUSTER_FILE
    

    CLUSTER_FILE は、AWScluster オブジェクトと AWSNodePool オブジェクトを含むマニフェストの名前に置き換えます。例: cluster-0.yaml

すべてのユーザー クラスタの削除

すべてのユーザー クラスタを削除するには、次の手順を行います。

  1. anthos-aws ディレクトリから anthos-gke を使用して、コンテキストを管理サービスに切り替えます。

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. kubectl delete を使用して、管理サービスから AWSNodePool と AWSCluster を削除します。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete AWSNodePool --all
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete AWSCluster --all
    

詳細については、GKE on AWS のアンインストールをご覧ください。

次のステップ