0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

KubernetesのYAMLでハマったときのデバッグ手順

0
Posted at

Kubernetes のマニフェストを書いていて error: error validatingerror: error parsing に遭遇した経験は一度はあると思う。YAML はインデントで構造を表現するので、スペース 1 つのズレで壊れる。

この記事では、K8s YAML のデバッグを効率的に進める手順をまとめる。

ステップ 1: YAML の構文自体が正しいか確認する

K8s のバリデーションエラーの前に、そもそも YAML として壊れていることが多い。

よくある構文エラー

タブ文字の混入:

# NG: タブ文字を使っている
spec:
	replicas: 3

YAML ではタブは使えない。スペースのみ。エディタの設定で「タブをスペースに変換」を有効にしておく。

インデントのズレ:

# NG: containers のインデントが 1 つ足りない
spec:
  template:
    spec:
    containers:
      - name: nginx

正しくは:

spec:
  template:
    spec:
      containers:
        - name: nginx

YAML → JSON 変換で構造を確認する

YAML のインデントが正しいかどうかは、JSON に変換すると一目瞭然になる。ネストが意図通りになっているかを JSON のブレースで確認できる。

FormatArc の YAML to JSON ツール にマニフェストを貼ると、構文エラーがあれば行番号付きで教えてくれる。エラーがなければ JSON として正しい構造が表示される。

k8s-yaml-convert.png

ステップ 2: kubectl でドライランする

YAML の構文が正しいことを確認したら、次は K8s のスキーマバリデーション。

kubectl apply -f deployment.yaml --dry-run=client

--dry-run=client はクラスタに適用せず、マニフェストの妥当性だけをチェックする。サーバー側のバリデーションも含めたい場合は --dry-run=server を使う。

ステップ 3: kubectl diff で差分を確認する

既存リソースとの差分を確認してから適用する。

kubectl diff -f deployment.yaml

意図しないフィールドが変わっていないかをここで確認できる。

ステップ 4: よくあるハマりパターン

コンテナポートの書き方

# NG: ポートを文字列で書いている
ports:
  - containerPort: "80"
# OK: 数値で書く
ports:
  - containerPort: 80

YAML は "80" を文字列として解釈する。K8s のスキーマは integer を期待するのでエラーになる。

ラベルセレクタの不一致

metadata:
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: ngnix  # typo

selector.matchLabelstemplate.metadata.labels が一致しないと Pod が見つからない。地味だが頻発する。

複数ドキュメントの区切り

---
apiVersion: v1
kind: Service
# ...
---
apiVersion: apps/v1
kind: Deployment
# ...

--- を忘れると 2 つ目のリソースが無視される。

デバッグの流れまとめ

1. YAML 構文チェック(JSON 変換で構造確認)
2. kubectl --dry-run で K8s スキーマチェック
3. kubectl diff で差分確認
4. kubectl apply で適用

YAML の構文エラーは K8s のエラーメッセージだけだと原因がわかりにくいので、まず JSON に変換して構造を確認するステップを挟むと効率がいい。

ブラウザでサクッと変換したい場合は FormatArc が便利: https://formatarc.com/ja/yaml-to-json/

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?