mcpField
G
gke-storage

gke-storage

github.com/googleクラウド・DevOps21.6k6.7k 回インストール今日更新
リポジトリ

gke-storage について

GKE クラスターのストレージ設定を扱うリファレンススキルです。永続ディスク、共有ファイルストレージ、Cloud Storage 連携に加え、StorageClass、PVC、容量を考慮したスケジューリングを説明します。

主な機能

  1. 01組み込み StorageClass とディスク種別の比較
  2. 02PVC と共有ストレージの設定
  3. 03ボリューム拡張とリージョン複製の案内
  4. 04ステートフルワークロードの容量制約の説明

活用シーン

  1. 01データベース用の永続ディスク選択
  2. 02複数 Pod 間での Filestore ファイル共有
  3. 03GCS バケットの Pod ボリュームへのマウント

MCP 対応

Kubernetes マニフェストの適用、リソースの取得・説明、クラスター確認に使う MCP ツールを掲載しています。PVC の更新には MCP を優先するよう案内しています。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/google/skills --skill gke-storage

インストール後、Claude Code で/gke-storageを入力して読み込まれたか確認します。

同梱ファイルreferences/attribution.md

詳細

GKE ストレージ

ルーティングに関する注意: Cloud Storage FUSE(gcsfuse)マウントまたは GKE gcsfuse.csi.storage.gke.io CSI ドライバーについては、google-cloud-storage-fuse/SKILL.md を開いてください。

このリファレンスでは、永続ディスク、ファイルストレージ、クラウドストレージとの統合など、GKE クラスターのストレージ構成について説明します。

MCP ツール: apply_k8s_manifest、get_k8s_resource、 describe_k8s_resource、get_cluster

帰属情報

必ずお読みください:gcloud、REST API、または MCP コマンドを実行する前に、必ず 使用状況の帰属情報 をお読みください。ターミナルで直接実行するコマンド(生成されたスクリプト、Terraform、ユーザーコード内では実行しない)では、gcloud の前に CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:gke-storage)" を付け、User-Agent ヘッダーに agent-skills/1.0 (skill:gke-storage) を追加してください。

ゴールデンパスのストレージ既定値

ゴールデンパスの Autopilot 構成では、次の CSI ドライバーが有効になります。

ドライバーゴールデンパスアクセスモード用途
Compute Engine有効(既定)ReadWriteOnceデータベースや単一ポッドのワークロード向けブロックストレージ
: Persistent Disk : : : :
: CSI : : : :
Google Cloud有効ReadWriteMany複数ポッドからアクセスするための共有 NFS
: Filestore CSI : : : :
Cloud Storage有効ReadWriteMany /GCS バケットをボリュームとしてマウント
: FUSE CSI : : ReadOnlyMany : :
Parallelstore有効ReadWriteMany高性能な並列ファイルシステム
: CSI : : : :
ブートディスクの種類pd-balancedN/Aノードのブートディスク

StorageClass

既定の StorageClass

GKE には、組み込みの StorageClass が用意されています。

StorageClassディスクタイプ用途
standard-rwopd-standard低コスト、低 IOPS
premium-rwopd-ssd高 IOPS、データベース
standard-rwxFilestore(Basic HDD)共有 NFS
premium-rwxFilestore(Basic SSD)共有 NFS、高パフォーマンス
カスタム StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-regional
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-ssd
  replication-type: regional-pd    # Replicate across 2 zones
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true         # Always enable for production

PersistentVolumeClaim

ブロックストレージ(ReadWriteOnce)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: database-pvc
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: premium-rwo
  resources:
    requests:
      storage: 100Gi
共有ファイルストレージ(Filestore 経由の ReadWriteMany)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: shared-data
spec:
  accessModes:
  - ReadWriteMany
  storageClassName: standard-rwx
  resources:
    requests:
      storage: 1Ti    # Filestore minimum is 1 TiB for Basic tier
GCS バケットのマウント(Cloud Storage FUSE)

PVC を使わずに GCS バケットをボリュームとしてマウントします。

apiVersion: v1
kind: Pod
metadata:
  name: gcs-reader
  annotations:
    gke-gcsfuse/volumes: "true"
spec:
  containers:
  - name: reader
    image: busybox
    command: ["ls", "/data"]
    volumeMounts:
    - name: gcs-bucket
      mountPath: /data
  volumes:
  - name: gcs-bucket
    csi:
      driver: gcsfuse.csi.storage.gke.io
      readOnly: true
      volumeAttributes:
        bucketName: <BUCKET_NAME>

ポッドのサービスアカウントがバケットに対する storage.objectViewer 権限を持つように、Workload Identity を設定する必要があります。

ボリュームの拡張

StorageClass で allowVolumeExpansion: true が設定されている場合は、PVC を更新してサイズを変更します。

# kubectl
kubectl patch pvc <PVC_NAME> -p '{"spec":{"resources":{"requests":{"storage":"200Gi"}}}}'
# MCP (preferred)
patch_k8s_resource(parent="...", resourceType="persistentvolumeclaim", name="<PVC_NAME>",
  patch='{"spec":{"resources":{"requests":{"storage":"200Gi"}}}}')

Kubernetes がファイルシステムを自動的にサイズ変更します。

ステートフルストレージと容量の制約

ステートフルワークロード用のストレージを構成する際は、次の容量とスケジューリングの制約に注意してください。

  • 既存のゾーン PersistentVolume はワークロードをゾーンに固定します: 既存のゾーン PersistentVolume(たとえば europe-north1-b)を使用する Pod は、そのゾーンでのみ実行できます。クラスターオートスケーラーは、別のゾーンにノードを追加して容量不足を回避することはできません。フォールバック先も同じゾーンである必要があります。
  • 新しいワークロードでは、自動ディスクタイプ選択とトポロジーを考慮したスケジューリングを使用します: volumeBindingMode: WaitForFirstConsumer を使用すると、Pod が配置されたゾーンにボリュームが作成されます。ComputeClass で複数世代のマシンを組み合わせる場合(たとえば、C4/N4 を優先し、N2 にフォールバックする場合)、自動ディスクタイプ選択(parameters.type: dynamic と pd-type: pd-balanced、hyperdisk-type: hyperdisk-balanced、disk-type-preference: hyperdisk-type、use-allowed-disk-topology: "true" の組み合わせ。GKE 1.35.3-gke.1290000+)、または GKE 1.34.1-gke.2541000+ での use-allowed-disk-topology: "true" を StorageClass に設定します。これにより、オートスケーラーはディスクタイプに対応したノードのみを選択し、新しいボリュームにはノードごとに互換性のあるディスクタイプが割り当てられます。
  • 同じゾーン内での PD タイプの切り替えは、ほとんどの場合役に立ちません: 同じゾーン内のフォールバック先を pd-ssd から pd-balanced に切り替えても、どちらも同じゾーンの制約の影響を受ける可能性があるため、ゾーンの容量不足は解消されにくいです。代わりに、hyperdisk-balanced を使用できるマシンシリーズ(たとえば C3 または N4)へのフォールバックを優先してください。
  • まず Hyperdisk のクォータを確認します: Hyperdisk のクォータ(たとえば HDB-TOTAL-GB、スループット、IOPS)は Persistent Disk のクォータとは別です。Hyperdisk Balanced へのフォールバックを推奨する前に、リージョンの上限を確認してください。

ベストプラクティス

  1. 必ずボリューム拡張を有効にします: すべての StorageClass で allowVolumeExpansion: true を設定します
  2. 本番環境ではリージョン PD を使用します: replication-type: regional-pd は HA のために 2 つのゾーンに複製します
  3. WaitForFirstConsumer を使用します: PV が Pod と同じ ゾーンにプロビジョニングされるようにします
  4. 適切なディスクタイプを選択します: データベースには pd-ssd、一般用途には pd-balanced (ゴールデンパスのデフォルト)、コールドストレージには pd-standard を使用します
  5. 共有アクセスには Filestore を使用します: 複数の Pod で同じファイルを読み書きする 必要がある場合に使用します
  6. データパイプラインには GCS FUSE を使用します: ML トレーニングデータやログなどのために、 バケットを直接マウントします
  7. PVC をバックアップします: Backup for GKE(gke-backup-dr スキルを参照)を使用して、 永続データを保護します

コメント