gcloud container

Table of Contents

  1. 前提
  2. 基本コマンド
  3. クラスタの作成
    1. Autopilot モード(推奨)
    2. Standard モード
    3. リリースチャンネル
    4. 作成オプション
  4. kubectl の接続設定
  5. クラスタ管理
  6. ノードプール
  7. Workload Identity
  8. Artifact Registry との連携
  9. Autopilot vs Standard
  10. 注意点
  11. 参考リンク

gcloud container は Google Kubernetes Engine(GKE)のクラスタやノードプールを管理するコマンドです。クラスタの作成から kubectl の認証設定まで行えます。

前提

1
2
# GKE API を有効化
gcloud services enable container.googleapis.com

基本コマンド

コマンド 用途
gcloud container clusters create クラスタを作成
gcloud container clusters list クラスタの一覧を表示
gcloud container clusters describe クラスタの詳細を表示
gcloud container clusters delete クラスタを削除
gcloud container clusters get-credentials kubectl の認証情報を取得
gcloud container clusters resize ノード数を変更
gcloud container node-pools create ノードプールを追加
gcloud container node-pools list ノードプールの一覧を表示

クラスタの作成

Autopilot モード(推奨)

Google がノードを自動管理します。インフラ管理の手間を減らしたい場合に推奨です。

1
2
3
4
5
6
7
8
# Autopilot クラスタを作成
gcloud container clusters create-auto my-cluster \
--region=asia-northeast1

# リリースチャンネルを指定
gcloud container clusters create-auto my-cluster \
--region=asia-northeast1 \
--release-channel=regular

Standard モード

ノードの構成を細かく制御したい場合に使います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Standard クラスタを作成
gcloud container clusters create my-cluster \
--region=asia-northeast1 \
--num-nodes=1 \
--machine-type=e2-medium \
--disk-size=50 \
--enable-autoscaling \
--min-nodes=1 \
--max-nodes=5

# プライベートクラスタ(ノードに外部 IP を付けない)
gcloud container clusters create my-cluster \
--region=asia-northeast1 \
--num-nodes=1 \
--enable-private-nodes \
--master-ipv4-cidr=172.16.0.0/28 \
--enable-ip-alias

リリースチャンネル

チャンネル 説明
rapid 最新機能をいち早く利用
regular 安定性と新機能のバランス(デフォルト)
stable 最も安定したバージョン

作成オプション

オプション 説明
--region=REGION リージョナルクラスタ(マルチゾーンで高可用性)
--zone=ZONE ゾーンクラスタ(単一ゾーン)
--num-nodes=N ゾーンあたりのノード数
--machine-type=TYPE ノードのマシンタイプ(例: e2-medium
--disk-size=GB ノードのディスクサイズ
--enable-autoscaling ノードオートスケーリングを有効化
--min-nodes=N / --max-nodes=N オートスケーリングの範囲
--release-channel=CH リリースチャンネル
--network=NETWORK VPC ネットワーク
--subnetwork=SUBNET サブネットワーク
--enable-private-nodes ノードに外部 IP を付けない
--workload-pool=POOL Workload Identity を有効化

kubectl の接続設定

1
2
3
4
5
6
7
# クラスタの認証情報を取得(kubectl が使えるようになる)
gcloud container clusters get-credentials my-cluster \
--region=asia-northeast1

# 接続確認
kubectl cluster-info
kubectl get nodes

get-credentials~/.kube/config にクラスタのエントリを追加します。

gcloud container clusters get-credentials リファレンス

クラスタ管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# クラスタの一覧
gcloud container clusters list

# クラスタの詳細
gcloud container clusters describe my-cluster --region=asia-northeast1

# クラスタの更新(メンテナンスウィンドウの設定など)
gcloud container clusters update my-cluster \
--region=asia-northeast1 \
--maintenance-window-start=2025-01-01T03:00:00Z \
--maintenance-window-end=2025-01-01T07:00:00Z \
--maintenance-window-recurrence="FREQ=WEEKLY;BYDAY=SA,SU"

# クラスタの削除
gcloud container clusters delete my-cluster --region=asia-northeast1

ノードプール

ノードプールを追加して、ワークロードごとに異なるマシンタイプを使えます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# ノードプールを追加
gcloud container node-pools create high-memory-pool \
--cluster=my-cluster \
--region=asia-northeast1 \
--machine-type=e2-highmem-4 \
--num-nodes=1 \
--enable-autoscaling \
--min-nodes=0 \
--max-nodes=3

# ノードプールの一覧
gcloud container node-pools list \
--cluster=my-cluster \
--region=asia-northeast1

# ノードプールのサイズを変更
gcloud container clusters resize my-cluster \
--region=asia-northeast1 \
--node-pool=default-pool \
--num-nodes=3

# ノードプールを削除
gcloud container node-pools delete high-memory-pool \
--cluster=my-cluster \
--region=asia-northeast1

Workload Identity

Pod がサービスアカウントキーなしで Google Cloud API にアクセスできます。GKE での認証の推奨方法です。

1
2
3
4
5
6
7
8
9
10
# クラスタで Workload Identity を有効化(作成時)
gcloud container clusters create-auto my-cluster \
--region=asia-northeast1 \
--workload-pool=PROJECT_ID.svc.id.goog

# Kubernetes サービスアカウントと Google サービスアカウントを紐付け
gcloud iam service-accounts add-iam-policy-binding \
my-gsa@PROJECT_ID.iam.gserviceaccount.com \
--role="roles/iam.workloadIdentityUser" \
--member="serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"

Workload Identity(公式)

Artifact Registry との連携

コンテナイメージの保存先として Artifact Registry を使います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Artifact Registry API を有効化
gcloud services enable artifactregistry.googleapis.com

# Docker リポジトリを作成
gcloud artifacts repositories create my-repo \
--repository-format=docker \
--location=asia-northeast1

# Docker 認証を設定
gcloud auth configure-docker asia-northeast1-docker.pkg.dev

# イメージをプッシュ
docker tag my-image asia-northeast1-docker.pkg.dev/PROJECT_ID/my-repo/my-image:v1
docker push asia-northeast1-docker.pkg.dev/PROJECT_ID/my-repo/my-image:v1

Artifact Registry ドキュメント

Autopilot vs Standard

項目 Autopilot Standard
ノード管理 Google が自動管理 自分で管理
スケーリング Pod ベースで自動 ノードプールのオートスケーリングを設定
課金 Pod のリソースリクエスト ノードの VM 料金
カスタマイズ 制限あり 自由度が高い
SSH アクセス 不可 可能
推奨ケース 一般的なワークロード GPU、特殊なカーネル設定が必要な場合

注意点

  • リージョナルクラスタ(--region)はマルチゾーンで高可用性だが、ノード数 × ゾーン数のコストがかかる
  • get-credentials は kubeconfig のコンテキストを上書きするので、複数クラスタを切り替える場合は kubectl config で管理する
  • Autopilot モードではノードへの SSH やホストパスマウントなど一部機能が制限される
  • クラスタの削除はノード上のリソースも含めて削除される。Persistent Volume の reclaimPolicy を確認しておく

参考リンク