このページでは、Google Kubernetes Engine(GKE)クラスタを実行するノードプールを追加して操作する方法を説明します。ノードプールの仕組みについては、ノードプールについてをご覧ください。
始める前に
作業を始める前に、次のことを確認してください。
- Google Kubernetes Engine API を有効にします。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。
ノードプールを追加する
新しいノードプールを GKE Standard クラスタに追加するには、gcloud CLI または Google Cloud コンソールを使用します。GKE は、スケーリング要件に基づいてクラスタ内のノードプールを自動的に管理するノード自動プロビジョニングもサポートしています。
いずれの場合も、ノードプールに最小権限の Identity and Access Management(IAM)サービス アカウントを作成して、Compute Engine のデフォルト サービス アカウントの代わりに使用することをおすすめします。最小権限のみを持つサービス アカウントを作成する手順については、クラスタのセキュリティの強化をご覧ください。
gcloud
ノードプールを作成するには、gcloud container node-pools create
コマンドを実行します。
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--service-account SERVICE_ACCOUNT
以下を置き換えます。
POOL_NAME
: 新しいノードプールの名前。CLUSTER_NAME
: 既存のクラスタの名前。SERVICE_ACCOUNT
: ノードで使用する IAM サービス アカウントの名前。省略した場合、ノードプールは Compute Engine のデフォルトのサービス アカウントを使用します。- プライベート IP アドレスを使用してノードをプロビジョニングするには、
--enable-private-nodes
フラグを追加します。このフラグは、Private Service Connect を使用する一般公開クラスタで使用できます。クラスタで Private Service Connect を使用しているかどうかを確認するには、Private Service Connect を使用する一般公開クラスタをご覧ください。
指定できるオプションのフラグの完全なリストについては、gcloud container node-pools create
のドキュメントをご覧ください。
出力は次のようになります。
Creating node pool POOL_NAME...done.
Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/us-central1/clusters/CLUSTER_NAME/nodePools/POOL_NAME].
NAME: POOL_NAME
MACHINE_TYPE: e2-medium
DISK_SIZE_GB: 100
NODE_VERSION: 1.21.5-gke.1302
この出力で、ノードで実行されているマシンタイプや GKE バージョンなど、ノードプールの詳細が表示されます。
ノードプールが正常に作成されても、サーバーからステータスが報告されず、gcloud
コマンドがタイムアウトになる場合があります。プロビジョニングが完了していないノードプールを含め、すべてのノードプールのステータスを確認するには、次のコマンドを使用します。
gcloud container node-pools list --cluster CLUSTER_NAME
Console
既存のクラスタにノードプールを追加するには、次の手順を行います。
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[add_boxノードプールを追加] をクリックします。
ノードプールを構成します。
ナビゲーション メニューで [セキュリティ] をクリックします。
[サービス アカウント] プルダウン メニューで、使用するノードプールに IAM サービス アカウントを選択します。デフォルトでは、ノードプールは Compute Engine のデフォルトのサービス アカウントを使用します。
[作成] をクリックしてノードプールを追加します。
クラスタ内のノードプールを表示する
gcloud
クラスタのすべてのノードプールを一覧表示するには、gcloud container node-pools list
コマンドを実行します。
gcloud container node-pools list --cluster CLUSTER_NAME
特定のノードプールの詳細を表示するには、gcloud container node-pools describe
コマンドを実行します。
gcloud container node-pools describe POOL_NAME \
--cluster CLUSTER_NAME
以下を置き換えます。
CLUSTER_NAME
: クラスタの名前。POOL_NAME
: 表示するノードプールの名前。
Console
クラスタのノードプールを表示するには、次の手順を行います。
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
クラスタのリストで、クラスタの名前をクリックします。
[ノード] タブをクリックします。
[ノードプール] で、表示するノードプールの名前をクリックします。
ノードプールのサイズを変更する
gcloud
クラスタのノードプールのサイズを変更するには、gcloud container clusters resize
コマンドを実行します。
gcloud container clusters resize CLUSTER_NAME \
--node-pool POOL_NAME \
--num-nodes NUM_NODES
以下を置き換えます。
CLUSTER_NAME
: サイズを変更するクラスタの名前。POOL_NAME
: サイズを変更するノードプールの名前。NUM_NODES
: ゾーンクラスタ内のプール内のノードの数。マルチゾーン クラスタまたはリージョン クラスタを使用する場合、NUM_NODES はノードプールが存在している各ゾーンのノード数です。
各ノードプールに対してこのコマンドを繰り返します。クラスタにノードプールが 1 つしかない場合は、--node-pool
フラグを省略します。
Console
クラスタのノードプールのサイズを変更するには、次の手順を行います。
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[ノード] タブをクリックします。
[ノードプール] セクションで、サイズを変更するノードプールの名前をクリックします。
edit [サイズ変更] をクリックします。
[ノード数] フィールドに、ノードプールに含めるノード数を入力し、[サイズ変更] をクリックします。
必要に応じてノードプールごとに同じ操作を繰り返します。
ノードプールをアップグレードする
デフォルトでは、クラスタのノードで自動アップグレードが有効になっています。無効にすることはおすすめしません。 ノードの自動アップグレードにより、クラスタのコントロール プレーンとノードのバージョンが同期され、Kubernetes バージョン スキュー ポリシーに準拠するようになります。
GKE ノードプールのアップグレードでは、サージ アップグレードと Blue/Green アップグレードの 2 つの構成可能なアップグレード戦略を選択できます。
クラスタ環境のニーズに最適な戦略を選択し、戦略を調整するパラメータを使用します。
ノードがアップグレードされている間、GKE は新しいポッドのスケジュールを停止し、実行中のポッドを他のノードにスケジュールします。これは、ノードプールで機能を有効または無効にする場合など、ノードの再作成を行う他のイベントも同様です。
アップグレードは、すべてのノードが再作成され、クラスタが目的の状態になったときにはじめて完了します。新しくアップグレードされたノードがコントロール プレーンに登録されると、GKE ではノードがスケジューリング可能であるとマークされます。
新しいノード インスタンスでは、目的の Kubernetes バージョンと次のものが実行されます。
ノードプールの手動アップグレード
手動でアップグレードできるノードプールのバージョンは、コントロール プレーンと同じバージョンか、引き続き使用可能でコントロール プレーンと互換性のある以前のバージョンです。Kubernetes バージョンとバージョン スキューのサポート ポリシーにより、コントロール プレーンは、コントロール プレーンの 2 つ前までのマイナー バージョンのノードと互換性が保証されています。たとえば、Kubernetes 1.23 コントロール プレーンは Kubernetes 1.21 ノードと互換性があります。
ノードプールを手動でアップグレードすると、kubectl
を使用して個々のノードに追加したラベルが削除されます。これを回避するには、ノードプールにラベルを適用します。
ノードプールは、Google Cloud Console か Google Cloud CLI を使用して、コントロール プレーンと互換性のあるバージョンに手動でアップグレードできます。
gcloud
このセクションのコマンドでは、次の変数を使用します。
CLUSTER_NAME
: アップグレードするノードプールのクラスタの名前。NODE_POOL_NAME
: アップグレードするノードプールの名前。VERSION
: ノードをアップグレードする Kubernetes のバージョン。たとえば、--cluster-version=1.7.2
やcluster-version=latest
です。
ノードプールをアップグレードする:
gcloud container clusters upgrade CLUSTER_NAME \
--node-pool=NODE_POOL_NAME
ノードで GKE の別のバージョンを指定するには、オプションの --cluster-version
フラグを使用します。
gcloud container clusters upgrade CLUSTER_NAME \
--node-pool=NODE_POOL_NAME \
--cluster-version VERSION
バージョンの指定の詳細については、バージョニングをご覧ください。
詳細については、gcloud container clusters upgrade
のドキュメントをご覧ください。
Console
Google Cloud コンソールを使用してノードプールをアップグレードするには、次の手順を行います。
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
編集するクラスタの横にある [more_vert アクション] をクリックし、[edit 編集] をクリックします。
[クラスタの詳細] ページで [ノード] タブをクリックします。
[ノードプール] セクションで、アップグレードするノードプールの名前をクリックします。
[edit 編集] をクリックします。
[ノードのバージョン] で [変更] をクリックします。
[ノードのバージョン] プルダウン リストから目的のバージョンを選択し、[変更] をクリックします。
Pod を特定のノードプールにデプロイする
Pod マニフェストで nodeSelector
を使用して、Pod を特定のノードプールに明示的にデプロイできます。nodeSelector
は、ラベルが一致するノードに Pod のスケジュールを設定します。
すべての GKE ノードプールには、cloud.google.com/gke-nodepool: POOL_NAME
という形式のラベルがあります。次の例に示すように、このラベルを Pod の nodeSelector
フィールドに追加します。
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
cloud.google.com/gke-nodepool: POOL_NAME
詳細は、ノードに Pod を割り当てるをご覧ください。
ノードセレクタの代わりに、ノード アフィニティを使用できます。Pod が制約を満たそうと試みる一方で、制約を満たせない場合でも Pod のスケジュールが設定される「ソフト」ルールを適用したい場合は、ノード アフィニティを使用します。詳細は、ノード アフィニティをご覧ください。コンテナのリソース リクエストを指定することもできます。
ノードプールをダウングレードする
ノードプールをダウングレードすることで、たとえば、ノードプールのアップグレードに失敗した場合に軽減できます。ノードプールをダウングレードする前に、制限事項を確認してください。
- クラスタのメンテナンスの除外を設定して、ダウングレード後に GKE がノードプールを自動的にアップグレードしないようにします。
- ノードプールをダウングレードするには、ノードプールの手動アップグレードの手順に沿って、以前のバージョンを指定します。
ノードプールを削除する
ノードプールを削除すると、ノードとそのノードへのルートが削除されます。それらのノードで実行されているポッドはすべて強制排除され、再スケジュールされます。ポッドに特定のノードセレクタが設定されており、クラスタ内の他のノードが条件を満たさない場合、そのポッドはスケジュールできない状態のままになることがあります。 詳細については、ノードプールの削除をご覧ください。
gcloud
ノードプールを削除するには、gcloud container node-pools delete
コマンドを実行します。
gcloud container node-pools delete POOL_NAME \
--cluster CLUSTER_NAME
Console
ノードプールを削除するには、次の手順を行います。
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[ノード] タブをクリックします。
[ノードプール] セクションで、削除するノードプールの横にある delete をクリックします。
確認のメッセージが表示されたら、[削除] をクリックします。