metadata.generateName
Claude Code.icon
Kubernetesがリソース名をサーバー側で自動生成するためのフィールド
基本
通常リソースは metadata.name で名前を明示しますが、generateName を使うと指定した文字列をプレフィックスとして、APIサーバーがランダムなサフィックスを付与した名前を生成します。
code:yaml
apiVersion: v1
kind: Pod
metadata:
generateName: my-pod-
spec:
containers:
- name: app
image: nginx
これを作成すると、実際の名前は my-pod-x7k2p のようになります(5文字程度のランダム英数字が末尾に付く)。
重要なポイント
1. create 専用、apply では効かない
generateName が機能するのは kubectl create や API の POST(create操作)のときだけです。kubectl apply は内部で「名前で既存リソースを探す」動作をするため、name が無いとエラーになります。
code:bash
kubectl create -f pod.yaml # ✅ 動く
kubectl apply -f pod.yaml # ❌ "resource name may not be empty"
2. name と併用すると name が優先
両方指定した場合、generateName は無視され name が使われます。
3. レスポンスで実際の名前を確認する必要がある
生成された名前は作成リクエストのレスポンスに含まれます。事前に名前が分からないため、kubectl create -f pod.yaml -o name などで取得します。
主なユースケース
Job/Pod を何度も使い捨てで起動するケース。名前衝突(AlreadyExists)を気にせず連続作成できる
Controller/Operator が子リソースを動的生成するとき。ReplicaSet が Pod を作る際などにも内部的に使われている仕組み