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. 一貫しないインデント — 1つのマニフェスト内で2スペースと4スペースのインデントを混在させる
  2. タブ文字 — Kubernetesはタブを含むYAMLを拒否する。スペースのみ許可
  3. 末尾の空白 — バージョン管理で予期しないdiffを引き起こす可能性がある
  4. --- セパレータの欠落 — 複数リソースファイルにはリソース間のドキュメントセパレータが必要
  5. クォート付き 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フォーマットを統合することがよくあります。

試してみる — YAML Formatter & Validator

フルツールを開く