Kubernetes YAMLマニフェストのフォーマットと検証
Kubernetes YAMLマニフェスト(Deployment、Service、ConfigMap)を適切なインデントでフォーマットします。クラスターに適用する前に構造を検証し、一般的なK8s YAMLエラーをキャッチします。
Configuration Files
詳細な説明
Kubernetes YAMLフォーマット
Kubernetesは主要な設定言語としてYAMLを使用します。Deployment、Service、ConfigMap、IngressなどすべてのリソースはYAMLマニフェストで定義されます。KubernetesはYAML構造に厳密なため、適切なフォーマットは不可欠です。
Kubernetesマニフェストの構造
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-server
namespace: production
labels:
app: web-server
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
app: web-server
template:
metadata:
labels:
app: web-server
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
よくあるフォーマットの問題
- 一貫しないインデント — 1つのマニフェスト内で2スペースと4スペースのインデントを混在させる
- タブ文字 — Kubernetesはタブを含むYAMLを拒否する。スペースのみ許可
- 末尾の空白 — バージョン管理で予期しないdiffを引き起こす可能性がある
---セパレータの欠落 — 複数リソースファイルにはリソース間のドキュメントセパレータが必要- クォート付き vs クォートなしの値 —
"250m"のようなリソース制限は数値としてパースされないようにクォートが必要
複数リソースファイル
Kubernetesマニフェストには、--- で区切られた複数のリソースが1つのファイルに含まれることがよくあります:
apiVersion: v1
kind: Service
metadata:
name: web-server
spec:
selector:
app: web-server
ports:
- port: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-server
# ...
YAMLフォーマッターはマルチドキュメントファイルを正しく処理し、--- セパレータを保持しながら各ドキュメントを独立してフォーマットする必要があります。
ベストプラクティス
- 2スペースインデントを使用する(Kubernetesエコシステム標準)
- 数値やブール値のように見える文字列値は常にクォートする
- 複数リソースの区切りに
---を使用する - フォーマット後に
kubectl apply --dry-run=clientを実行して検証する
ユースケース
Kubernetes YAMLフォーマットはDevOpsエンジニアやプラットフォームチームの日常的なタスクです。マニフェストをクラスターに適用する前に、フォーマットによりkubectlがファイルを拒否する原因となるインデントエラーをキャッチできます。チームはkubevalやkubeconformの検証と並行して、CIパイプラインにYAMLフォーマットを統合することがよくあります。