このドキュメントでは、Google Kubernetes Engine(GKE)でクラスタを管理する方法について説明します。クラスタの仕組みについては、クラスタのアーキテクチャをご覧ください。
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API を有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。gcloud CLI をインストール済みの場合は、
gcloud components updateコマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
クラスタを表示する
gcloud
特定のクラスタを表示するには、次のコマンドを実行します。
gcloud container clusters describe CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION次のように置き換えます。
CLUSTER_NAME: クラスタの名前。CONTROL_PLANE_LOCATION: クラスタのコントロール プレーンの Compute Engine ロケーション。リージョン クラスタの場合はリージョン、ゾーンクラスタの場合はゾーンを指定します。
リージョンまたはゾーンのプロジェクト内のすべてのクラスタを一覧表示するには、次のコマンドを実行します。
gcloud container clusters list特定のリージョンまたはゾーンにあるクラスタを一覧表示するには、次のコマンドを実行します。
gcloud container clusters list \ --location=CONTROL_PLANE_LOCATION
コンソール
クラスタを表示するには、 Cloud de Confiance コンソールで Google Kubernetes Engine ページに移動します。
クラスタの詳細情報を表示するには、リストからクラスタを選択します。
kubectl のデフォルト クラスタを設定する
複数のクラスタがある場合は、kubectl コマンドライン ツール用のデフォルト クラスタを設定できます。
詳細については、kubectl コマンドのデフォルト クラスタを設定するをご覧ください。
gcloud のデフォルト クラスタを設定する
gcloud コマンドのデフォルト クラスタを設定するには、次のコマンドを実行します。
gcloud config set container/cluster CLUSTER_NAME
CLUSTER_NAME は、使用するクラスタの名前に置き換えます。
クラスタをアップグレードする
デフォルトでは、GKE はクラスタを自動的にアップグレードします。ただし、Standard クラスタをご自分でアップグレードすることもできます。詳細については、クラスタの手動アップグレードをご覧ください。
クラスタのアップグレードに関するガイダンスについては、クラスタのアップグレードに関するベスト プラクティスをご覧ください。
Standard クラスタでゾーンを追加または削除する
以降のセクションでは、クラスタゾーンを追加または削除する方法を説明します。すべてのゾーンがクラスタのリージョン内に存在する必要があります。
ゾーンクラスタのゾーンを変更する
既存のゾーンクラスタについては、ゾーンを追加または削除できます。
gcloud
ゾーンクラスタのゾーンを追加または削除するには、gcloud container
clusters update コマンドを使用します。
gcloud container clusters update CLUSTER_NAME \
--location CONTROL_PLANE_LOCATION \
--node-locations COMPUTE_ZONE1,COMPUTE_ZONE2
次のように置き換えます。
CLUSTER_NAME: クラスタに付ける名前。CONTROL_PLANE_LOCATION: クラスタのコントロール プレーンの Compute Engine のゾーン。COMPUTE_ZONE1,COMPUTE_ZONE2,[...]: ノードが作成されるゾーン。クラスタに必要な数だけゾーンを指定できます。すべてのゾーンは、--locationフラグで指定された、クラスタのコントロール プレーンと同じリージョンに存在する必要があります。ゾーンクラスタの場合、--node-locationsにはクラスタのプライマリ ゾーンが含まれている必要があります。
たとえば、example-cluster が us-central1-a で実行されているとします。さらに 2 つのゾーンをクラスタに追加するには、次のコマンドを実行します。
gcloud container clusters update example-cluster \
--location us-central1-a
--node-locations us-central1-a,us-central1-b,us-central1-c
別の例として、example-cluster が us-central1-a、us-central1-b、us-central1-c で実行されているとします。クラスタを us-central1-a と us-central1-b のみで実行させる場合は、次のコマンドを実行します。
gcloud container clusters update example-cluster \
--location us-central1-a \
--node-locations us-central1-a,us-central1-b
Console
既存のクラスタでゾーンを追加または削除するには、次の手順を行います。
Cloud de Confiance コンソールで [Google Kubernetes Engine] ページに移動します。
編集するクラスタの横にある more_vert [アクション] をクリックし、edit [編集] をクリックします。
[詳細] タブの [デフォルトのノードゾーン] フィールドで、[edit ノードプールを編集] をクリックします。
目的のゾーンを選択し、変更を保存します。
リージョン クラスタのゾーンを変更する
現時点では、既存のリージョン クラスタのゾーンの変更は、gcloud コマンドを使用した方法のみ可能です。
リージョン クラスタのゾーンを追加または削除するには、--node-locations フラグを指定した gcloud container
clusters update コマンドを使用します。
gcloud container clusters update CLUSTER_NAME \
--location CONTROL_PLANE_LOCATION \
--node-locations COMPUTE_ZONE1,COMPUTE_ZONE2
次のように置き換えます。
CLUSTER_NAME: クラスタの名前。CONTROL_PLANE_LOCATION: クラスタのコントロール プレーンの Compute Engine のリージョン。COMPUTE_ZONE1,COMPUTE_ZONE2,[...]: ノードが作成される、コントロール プレーン リージョンのゾーン。ゾーンは、--locationフラグで指定された、クラスタのコントロール プレーンと同じCONTROL_PLANE_LOCATIONに存在する必要があります。
たとえば、example-cluster が us-central1-a と us-central1-b で実行されているとします。
us-central1-c を追加するには、次のコマンドを実行します。
gcloud container clusters update example-cluster \
--location us-central1 \
--node-locations us-central1-a,us-central1-b,us-central1-c
別の例として、example-cluster が us-central1-a、us-central1-b、us-central1-c で実行されているとします。クラスタを us-central1-a と us-central1-b のみで実行させる場合は、次のコマンドを実行します。
gcloud container clusters update example-cluster \
--location us-central1 \
--node-locations us-central1-a,us-central1-b
クラスタのサイズを変更する
Standard クラスタのサイズを変更して、クラスタ内のノードの数を増減できます。たとえば、クラスタを削除せずにクラスタでリソースを消費しないようにするには、ノードをゼロにスケールダウンします。サイズ変更の詳細については、クラスタのサイズ変更をご覧ください。
オートパイロット クラスタは、Pod の仕様に基づいて自動的にサイズが調整されます。そのため、クラスタのサイズを変更する必要はありません。たとえば、Pod のレプリカの数や、リクエストするリソースを変更すると、クラスタのサイズに応じて適切なサイズが設定されます。
クラスタをさらに効率的に最適化するには、垂直 Pod 自動スケーリング(VPA)も使用できます。オートスケーラーは、CPU リクエストの値とメモリのリクエストと制限の値を推奨したり、それらの値を自動的に更新したりできます。
クラスタの削除
必要に応じて、クラスタを削除できます。詳細については、クラスタの削除をご覧ください。
拒否ポリシーを使用してクラスタの削除を防ぐ
IAM 拒否ポリシーを使用すると、削除を試みるプリンシパルに関係なく、特定の重要なクラスタの削除を防ぐことができます。拒否ポリシーで特定のクラスタをターゲットにするには、それらのクラスタにタグを追加します。次に、拒否条件を使用して、そのタグを持つクラスタにのみ拒否ポリシーを適用します。
特定のクラスタを削除から保護する手順は次のとおりです。
保護されたクラスタを識別するために、タグキーを作成して定義します。たとえば、
do_not_deleteという名前のタグキーを作成できます。次のいずれかのオプションを選択して、IAM 拒否ポリシーを作成します。
コンソール
Cloud de Confiance コンソールで、[IAM] ページの [拒否] タブに移動します。
[ 拒否ポリシーを作成] をクリックします。[拒否ポリシーを作成] ページが開きます。
[ID] フィールドで、拒否ポリシーの一意の不変 ID を指定します。
[新しい拒否ルール] セクションで、次の操作を行います。
[拒否されたプリンシパル] フィールドに、すべてのプリンシパルを対象とする
principalSet://goog/public:allを指定します。[拒否された権限] セクションの [権限 1] プルダウン リストで、
container.googleapis.com/clusters.delete権限を見つけて選択します。[ 拒否条件を追加] をクリックします。[拒否条件を追加] ペインが開きます。
条件のわかりやすいタイトルを指定します(例:
Cluster has the do_not_delete tag)。[条件作成ツール] タブの [条件タイプ 1] プルダウン リストから、[タグ] を選択します。
[演算子] プルダウン リストで、[キーがある] を選択します。
[キーパス] プルダウン リストで、クラスタに適用したタグキー(
do_not_deleteなど)を選択します。[保存] をクリックします。
[作成] をクリックします。
gcloud
次の拒否ポリシーを含む JSON ファイルを作成します。
{ "displayName": "Prevent cluster deletion based on tag", "rules": [ { "description": "Prevent cluster deletion based on tag", "deniedPrincipals": [ "principalSet://goog/public:all" ], "deniedPermissions": [ "container.googleapis.com/clusters.delete" ], "denialCondition": { "title": "Cluster has the do_not_delete tag", "expression": "resource.hasTagKey('TAG_KEY_NAME') } } ] }TAG_KEY_NAMEは、作成したタグキーのパスに置き換えます。gcloud iam policies createコマンドを使用して、拒否ポリシーを作成します。gcloud iam policies create POLICY_ID \ --attachment-point=ATTACHMENT_POINT \ --kind=denypolicies --policy-file=POLICY_FILE次のように置き換えます。
POLICY_ID: 拒否ポリシーの ID。ATTACHMENT_POINT: 拒否ポリシーを適用する組織、フォルダ、またはプロジェクト。たとえば、拒否ポリシーをフォルダに適用すると、そのフォルダ内のすべてのプロジェクトのクラスタにポリシーが適用されます。詳細については、アタッチメント ポイントをご覧ください。POLICY_FILE: 前の手順で作成した JSON ファイルのパス。
拒否ポリシーを作成すると、拒否条件で指定されたタグキーを持つクラスタを削除できなくなります。クラスタを削除しようとすると、Permission denied エラー メッセージが表示されて失敗します。クラスタの削除を許可するには、クラスタからタグキーを切り離す必要があります。
クラスタをフリートに追加する
組織で複数のクラスタを使用している場合は、Kubernetes クラスタの論理グループであるフリートにクラスタを追加することで、マルチクラスタ管理を簡素化できます。フリートを作成すると、組織は個々のクラスタの管理からクラスタ グループ全体の管理にレベルアップでき、フリート対応の機能(マルチクラスタ Ingress、 Config Sync、Policy Controller など)を使用できます。
GKE クラスタをフリートに追加するには、Cloud de Confiance コンソールまたは gcloud CLI を使用します。宣言型で行うには、Terraform または Config Connector を使用します。
フリートの仕組みについては、フリートの管理をご覧ください。フリートの作成については、フリートを作成してマルチクラスタ管理を簡素化するをご覧ください。