このページでは、GKE on AWS クラスタの設定を更新する方法について説明します。以下の操作を行うと、クラスタ内の更新可能な設定(Kubernetes バージョンなど)を更新できます。バージョンのアップグレードは、最もよく使用されるクラスタ更新操作の一つであるため、クラスタ バージョンのアップグレード方法については別ページ(クラスタをアップグレードする)で説明します。
クラスタを更新する理由
クラスタを更新する理由としては、次のようなものがあります。
- クラスタの説明を更新する。
- クラスタのアノテーションを更新する。
- クラスタの管理ユーザーのリストを更新する。
- クラスタのロギング構成を更新する。
- 暗号鍵をローテーションする。
- クラスタ コントロール プレーンのセキュリティ グループを更新する。
上記以外の理由でクラスタを更新する場合もあります。更新可能なフィールドの詳細については、gcloud container aws clusters update
と projects.locations.awsClusters.patch
のドキュメントをご覧ください。
前提条件
クラスタのフィールドを更新するには、
gkemulticloud.googleapis.com/awsClusters.update
の Identity and Access Management 権限が必要です。クラスタのセキュリティ グループを更新するには、クラスタのコントロール プレーン ロールに
ec2:ModifyNetworkInterfaceAttribute
権限が含まれている必要があります。詳細については、コントロール プレーン ロールを作成するをご覧ください。また、クラスタのタグを更新するには、クラスタの API ロールに次の AWS 権限が必要です。
autoscaling:CreateOrUpdateTags
autoscaling:DeleteTags
ec2:CreateTags
ec2:DescribeLaunchTemplates
ec2:DescribeSecurityGroupRules
ec2:DeleteTags
elasticloadbalancing:AddTags
elasticloadbalancing:RemoveTags
AWS IAM ロールを作成するで、クラスタの API ロールを作成して権限を追加する方法を確認してください。
更新プロセス
GKE on AWS がクラスタを更新するプロセスは、更新の種類によって異なります。GKE on AWS でリソースを再起動したり、リソースを再作成することなく、クラスタを更新できることもあります(クラスタの説明を更新する場合など)。このような変更はすぐに反映されます。
他の変更(Kubernetes バージョンの更新など)の場合は、コントロール プレーン ノードの再起動が必要になります。その場合、GKE on AWS はローリング アップデートを実行します。この更新は次のステップで構成されます。
- 更新するコントロール プレーン インスタンスを 1 つ選択します。異常なインスタンスがある場合、GKE on AWS は、正常なインスタンスよりもそちらを先に更新します。
- インスタンスに新しい起動テンプレートを作成します。
- 自動スケーリング グループの起動テンプレートを更新します。
- インスタンスを削除します。AWS がインスタンスを再作成し、そのインスタンスが新しい構成で起動します。
- 新しいインスタンスにヘルスチェックを行います。
- ヘルスチェックが成功した場合は、別のインスタンスを選択して、同じ手順を繰り返します。すべてのインスタンスが再起動または再作成されるまで、このサイクルを繰り返します。ヘルスチェックが失敗した場合、GKE on AWS はクラスタを
DEGRADED
状態にし、更新を停止します。詳しくは次のセクションをご覧ください。 - 元の起動テンプレートを削除します。
更新に失敗した場合
更新後、GKE on AWS はクラスタでヘルスチェックを実行します。ヘルスチェックに失敗した場合は、クラスタが DEGRADED
とマークされます。クラスタのステータスは、次の Google Cloud CLI コマンドで確認できます。
gcloud container aws clusters describe CLUSTER_NAME \
--location=GOOGLE_CLOUD_LOCATION
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前GOOGLE_CLOUD_LOCATION
: クラスタを管理する Google Cloud リージョン
クラスタを更新する
Google Cloud コンソール、Google Cloud CLI、または GKE Multi-Cloud API を使用して、複数のクラスタ フィールドを一度に更新できます。
更新方法を選択する
ほとんどのフィールドは、コンソール、gcloud CLI、GKE Multi-Cloud API を使用して更新できます。フィールドによっては、いずれかの方法でしか更新できないものもあります。コンソールを使用してクラスタを更新する場合は、まず、クラスタにログインするための認証方法を選択して構成する必要があります。詳細については、クラスタに接続して認証するをご覧ください。
コンソール
Google Cloud コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。
クラスタが存在する Google Cloud プロジェクトを選択します。
クラスタのリストでクラスタの名前を選択し、サイドパネルで [詳細を表示] を選択します。
[詳細] タブで、変更するフィールドの [
編集] を選択します。たとえば、他のユーザーにクラスタ管理者権限を付与するには、[管理者ユーザー] の横にある [
編集] を選択し、ユーザーのメールアドレスを入力します。変更が完了したら、[完了] を選択します。
gcloud
gcloud CLI を使用してクラスタを更新する場合は、更新するクラスタについて GKE on AWS に指示する CLUSTER_NAME
フィールドと GOOGLE_CLOUD_LOCATION
フィールドを常に含める必要があります。次のコマンドには、更新するフィールドのみを含めます。コマンドを実行する前に、他のフィールドは削除します。
gcloud container aws clusters update CLUSTER_NAME \
--location=GOOGLE_CLOUD_LOCATION \
--cluster-version=CLUSTER_VERSION \
--admin-users=USERNAME_LIST \
--root-volume-iops=ROOT_VOLUME_IOPS \
--root-volume-size=ROOT_VOLUME_SIZE \
--root-volume-type=ROOT_VOLUME_TYPE \
--security-group-ids=SECURITY_GROUP_IDS
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前GOOGLE_CLOUD_LOCATION
(必須): クラスタを管理するサポート対象の Google Cloud リージョン(例:us-west1
)CLUSTER_VERSION
: 新しいサポート対象のクラスタ バージョンUSERNAME_LIST
: ユーザー名のカンマ区切りのリスト(例: kai@example.com,hao@example.com,kalani@example.com)。これらは、このクラスタに対する管理者権限を付与するユーザーのメールアドレスです。クラスタの管理者ユーザーの以前のリストは、この設定の名前に置き換えられます。ROOT_VOLUME_IOPS
: ルート ボリュームの最大 I/O オペレーション/秒ROOT_VOLUME_SIZE
: ルート ボリュームのサイズ(GB)ROOT_VOLUME_TYPE
: ルート ボリュームの AWS EBS ボリューム タイプSECURITY_GROUP_IDS
: クラスタ コントロール プレーン インスタンスに追加する AWS セキュリティ グループ IDSECURITY_GROUP_IDS
: クラスタ コントロール プレーン インスタンスに追加する AWS セキュリティ グループ ID
API
GKE Multi-Cloud API を使用してクラスタを更新する場合は、HTTP リクエストに CLUSTER_NAME
フィールドと GOOGLE_CLOUD_LOCATION
フィールドを常に含める必要があります。これらのフィールドは、更新するクラスタを GKE on AWS に指示します。API エンドポイントもリクエストに含める必要があります。更新するフィールドを含む JSON ファイルを作成します。更新するフィールドのみを JSON ファイルと UPDATE_MASK
に含めます。
次の例は、API を使用してクラスタを更新する方法を示しています。更新可能なフィールドの詳細については、projects.locations.awsClusters.patch
メソッドのドキュメントをご覧ください。
更新するフィールドを含む JSON ファイルを
cluster_update.json
という名前で作成します。{ "controlPlane": { "version": "CLUSTER_VERSION", }, "description": "CLUSTER_DESCRIPTION", "authorization": { "adminUsers": [ { "username": USERNAME1, "username": USERNAME2, "username": USERNAME3 } ] } }
次のように置き換えます。
CLUSTER_VERSION
: 新しいサポート対象のクラスタ バージョン。クラスタをアップグレードする場合は、すべてのマイナー バージョンをアップグレードする必要があります。CLUSTER_DESCRIPTION
: 新しいクラスタの説明USERNAME1
、USERNAME2
、USERNAME3
: このクラスタに対する管理者権限を付与するユーザーのメールアドレス。クラスタの管理者ユーザーの以前のリストは、これらのフィールドの名前に置き換えられます。
次のコマンドで GKE Multi-Cloud API を使用してこれらの設定を更新します。
curl -d @cluster_update.json -X PATCH \ ENDPOINT/projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/awsClusters/CLUSTER_NAME?update_mask=UPDATE_MASK
次のように置き換えます。
ENDPOINT
(必須): Google Cloud サービス エンドポイントPROJECT_ID
(必須): Google Cloud プロジェクトGOOGLE_CLOUD_LOCATION
(必須): クラスタを管理するサポート対象の Google Cloud リージョン(例:us-west1
)CLUSTER_NAME
(必須): クラスタ名UPDATE_MASK
(必須): 次の 1 つ以上のフラグのカンマ区切りリスト。これらのフラグは、更新するフィールドを示します。この例では、次のものを指定しています。- controlPlane.version
- description
- authorization.admin_users
クラスタのセキュリティ グループを更新する
クラスタのセキュリティ グループを更新するには、クラスタのコントロール プレーン ロールに ec2:ModifyNetworkInterfaceAttribute
権限が含まれている必要があります。詳細については、コントロール プレーン ロールを作成するをご覧ください。
gcloud container aws clusters update
コマンドを使用して、クラスタ コントロール プレーンに追加のセキュリティ グループを追加できます。
gcloud container aws clusters update CLUSTER_NAME \
--location=GOOGLE_CLOUD_LOCATION \
--security-group-ids=SECURITY_GROUP_IDS
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前GOOGLE_CLOUD_LOCATION
: クラスタを管理するサポート対象の Google Cloud リージョン(例:us-west1
)SECURITY_GROUP_IDS
: クラスタ コントロール プレーン インスタンスに追加する AWS セキュリティ グループ ID
クラスタ セキュリティ グループを削除する
Google Cloud CLI を使用して、クラスタからデフォルト以外のセキュリティ グループをすべて削除できます。クラスタを更新するには、次のコマンドを実行します。
gcloud container aws clusters update CLUSTER_NAME \
--location=GOOGLE_CLOUD_LOCATION \
--clear-security-group-ids
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前GOOGLE_CLOUD_LOCATION
: クラスタを管理するサポート対象の Google Cloud リージョン(例:us-west1
)
クラスタのボリューム情報を更新する
Google Cloud CLI を使用して、クラスタのコントロール プレーン ボリュームを更新できます。ボリュームの KMS 鍵を更新するには、鍵のローテーションをご覧ください。
ボリュームのサイズ、タイプ、または IOPS を更新するには、次のコマンドを実行します。
gcloud container aws clusters update CLUSTER_NAME \
--location=GOOGLE_CLOUD_LOCATION \
--root-volume-iops=ROOT_VOLUME_IOPS
--root-volume-size=ROOT_VOLUME_SIZE
--root-volume-type=ROOT_VOLUME_TYPE
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前GOOGLE_CLOUD_LOCATION
: クラスタを管理するサポート対象の Google Cloud リージョン(例:us-west1
)ROOT_VOLUME_IOPS
: ルート ボリュームの I/O オペレーション数/秒ROOT_VOLUME_SIZE
: ルート ボリュームのサイズ(GB)ROOT_VOLUME_TYPE
: ルート ボリュームの AWS EBS ボリューム タイプ
ロギング構成を更新する
Google Cloud CLI を使用して、クラスタの Cloud Logging の構成を更新できます。ロギング構成を更新するには、次のコマンドを実行します。
gcloud container aws clusters update CLUSTER_NAME \
--location=GOOGLE_CLOUD_LOCATION \
--logging=LOGGING_CONFIG \
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前GOOGLE_CLOUD_LOCATION
: クラスタを管理するサポート対象の Google Cloud リージョン(例:us-west1
)LOGGING_CONFIG
: [SYSTEM] または [SYSTEM,WORKLOAD]
次のステップ
- ボリュームの KMS 鍵を更新する。鍵のローテーションをご覧ください。
gcloud container aws clusters update
リファレンス ドキュメントで、更新可能なフィールドの詳細を確認する。projects.locations.awsClusters.patch
REST API のドキュメントを確認する。