このトピックでは、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 にパブリック サブネットの踏み台インスタンスが含まれます。
管理サービスに接続するには、次の手順を実施します。
GKE on AWS 構成のディレクトリに移動します。このディレクトリは、管理サービスをインストールしたときに作成したものです。
cd anthos-aws
トンネルを開くには、
bastion-tunnel.sh
スクリプトを実行します。トンネルはlocalhost:8118
に転送されます。踏み台インスタンスへのトンネルを開くには、次のコマンドを実行します。
./bastion-tunnel.sh -N
SSH トンネルからのメッセージがこのウィンドウに表示されます。接続を閉じる準備ができたら、Ctrl+C を使用するか、ウィンドウを閉じて処理を停止します。
新しいターミナルを開き、
anthos-aws
ディレクトリに移動します。cd anthos-aws
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 からクラスタを手動で作成します。
GKE on AWS 構成のディレクトリに移動します。このディレクトリは、管理サービスをインストールしたときに作成したものです。
cd anthos-aws
anthos-aws
ディレクトリからanthos-gke
を使用して、コンテキストを管理サービスに切り替えます。cd anthos-aws anthos-gke aws management get-credentials
テキスト エディタを開き、次の
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_TYPE は EBS ボリューム タイプに置き換えます。例:
gp3
。ROOT_VOLUME_IOPS は、ボリューム用にプロビジョニングされた IO オペレーション/秒(IOPS)の量に置き換えます。
volumeType
がGP3
の場合のみ有効です。詳細については、汎用 SSD ボリューム(gp3)をご覧ください。ROOT_VOLUME_KEY は、コントロール プレーン インスタンスのルート ボリュームを暗号化する AWS KMS 鍵の Amazon Resource Name に置き換えます。
ETCD_VOLUME_SIZE: etcd が使用するボリュームのサイズ。
ETCD_VOLUME_TYPE は EBS ボリューム タイプに置き換えます。例:
gp3
。ETCD_VOLUME_IOPS は、ボリューム用にプロビジョニングされた IO オペレーション/秒(IOPS)の量に置き換えます。
volumeType
がgp3
の場合のみ有効です。詳細については、汎用 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 バケット名。このフィールドは省略可能です。
クラスタに 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)の量。
volumeType
がgp3
の場合のみ有効です。 - NODE_VOLUME_KEY: ボリュームの暗号化に使用される AWS KMS 鍵の ARN。詳細については、顧客管理の CMK を使用したボリュームの暗号化をご覧ください。
マニフェストを管理サービスに適用します。
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
コンテキストを作成できます。このコンテキストを使用して、ユーザー クラスタまたは管理クラスタに対する認証を行います。
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
kubectl
を使用して、新しいユーザー クラスタに対する認証を行います。env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
クラスタの準備が整っている場合は、出力にクラスタ内の Kubernetes コンポーネントの URL が含まれます。
クラスタのステータスの表示
管理サービスは、AWSCluster
または AWSNodePool
を適用するとき、AWS リソースをプロビジョニングします。
anthos-aws
ディレクトリからanthos-gke
を使用して、コンテキストを管理サービスに切り替えます。cd anthos-aws anthos-gke aws management get-credentials
クラスタをリストするために、
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
を使用します。
anthos-aws
ディレクトリからanthos-gke
を使用して、コンテキストを管理サービスに切り替えます。cd anthos-aws anthos-gke aws management get-credentials
kubectl get events
を実行します。env HTTPS_PROXY=http://localhost:8118 \ kubectl get events
出力には、管理サービスからの情報、警告、関連エラーが含まれます。
ユーザー クラスタの削除
ユーザー クラスタを削除するには、次の手順を行います。
anthos-aws
ディレクトリからanthos-gke
を使用して、コンテキストを管理サービスに切り替えます。cd anthos-aws anthos-gke aws management get-credentials
kubectl delete
を使用して、ユーザー クラスタを含むマニフェストを削除します。env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f CLUSTER_FILE
CLUSTER_FILE は、AWScluster オブジェクトと AWSNodePool オブジェクトを含むマニフェストの名前に置き換えます。例:
cluster-0.yaml
すべてのユーザー クラスタの削除
すべてのユーザー クラスタを削除するには、次の手順を行います。
anthos-aws
ディレクトリからanthos-gke
を使用して、コンテキストを管理サービスに切り替えます。cd anthos-aws anthos-gke aws management get-credentials
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 のアンインストールをご覧ください。
次のステップ
GKE Identity Service で ID プロバイダを構成する。
GKE on AWS で最初のワークロードを起動する。
AWSCluster と AWSNodePool のカスタム リソース定義の仕様を確認する。