メインコンテンツまでスキップ

第05章:マニフェスト入門(YAMLの読み方と“宣言型”)📄✨

この章は 「Kubernetesの設計図=マニフェスト(YAML)」を、読めて・少し書けて・安全に適用できる ようになる回です😊 コマンド暗記よりも “読み方の型” を先に作るよ〜!🧠🔧


この章でできるようになること ✅🎯

  • YAMLを見て「何のリソースで、何がしたいか」をざっくり読める 👀✨
  • apiVersion / kind / metadata / spec の4点セットを理解する 📦
  • kubectl apply で作成・更新できる(=宣言型の入口)🚪
  • kubectl diff--dry-run=client事故らず 変更できる 🧯
  • kubectl explain で「このフィールド何?」を自力で調べられる 🔎

まず「宣言型」ってなに?🤔🧾

Kubernetesはざっくりこういう世界観です👇

  • 命令型:「今すぐこれをやって!」(手順を指示)🗣️
  • 宣言型:「こういう状態にしておいて!」(理想の状態を宣言)🧙‍♂️✨

マニフェストは後者。 つまり “理想の完成図(desired state)” を書く → Kubernetesが 現実を寄せてくる って感じです💪

この「理想を宣言する」思想がKubernetesのど真ん中です。 マニフェストの必須フィールドとして apiVersion / kind / metadata / spec が挙げられてます。(Kubernetes)


YAMLミニ基礎(ここでコケるの、だいたいこれ)🥲🧱

1) インデントが命(基本はスペース)🫠

  • YAMLは インデントで構造が決まる
  • 同じ階層はインデントを揃える(タブは避けるのが安全)⚠️

2) 配列(リスト)は - で始まる 📌

例:containers は配列なので - が出ます。

3) 文字列のクォートは「困ったら付ける」🧷

コロン :{}# が混ざると誤解されがちなので、怪しい文字列はクォートすると安心😌


Kubernetesマニフェストの“4大パーツ”🧩

マニフェストを見たら、まずこれを探す!👇

  1. apiVersion:どのAPIグループ/バージョン?🧬
  2. kind:何の種類?(Pod / Service / Deployment…)📦
  3. metadata:名前・ラベル・namespaceなど名札🏷️
  4. spec:理想の状態(何をどう動かすか)🧠

この4つは公式にも「必要なフィールド」としてまとめられてます。(Kubernetes)

逆にいうと、最初は spec の細部がわからなくてもOK! 「kind と metadata.name と spec の雰囲気」が読めれば勝ちです🎉


重要:status は基本 “書かない” 🙅‍♂️📛

kubectl get -o yaml で出したYAMLには status が出てきたりします。 でも statusクラスタ側が記録する“結果” なので、基本は触りません✋


まずは1個、手で作ってみよう(超ミニPod)🐣🚀

0) 作業用フォルダとファイル📁

ファイル名は例:05-hello-pod.yaml

1) マニフェストを書く ✍️

apiVersion: v1
kind: Pod
metadata:
name: hello-pod
labels:
app: hello
spec:
containers:
- name: hello
image: node:24-alpine
ports:
- containerPort: 3000
command: ["node"]
args:
- "-e"
- "require('http').createServer((req,res)=>{res.end('hello k8s');}).listen(3000)"
  • kind: Pod → Podを作るよ!📦
  • metadata.name → 名前は hello-pod 🏷️
  • spec.containers[] → コンテナの配列(ここで - が出る)📌
  • image: node:24-alpine → Node 24 は Active LTS 扱い(2026-02時点)🟢(nodejs.org)

2) “事故らない”チェック(dry-run)🧯✅

いきなり適用せず、まず クライアント側でdry-run します。

kubectl apply --dry-run=client -f 05-hello-pod.yaml

--dry-run=client は「実際には送らず、送る予定の内容をプレビューできる」系の用途として案内されています。(Kubernetes)

さらに出力も見たいなら:

kubectl apply --dry-run=client -f 05-hello-pod.yaml -o yaml

3) 差分も見ておく(diff)🧠🔍

「いまのクラスタ」と「ファイル」の差分を見ます。

kubectl diff -f 05-hello-pod.yaml

kubectl diff は差分がある/ないで終了コードも変わります(CIで便利)🧪(Kubernetes)


4) いよいよ適用(apply)🚀

kubectl apply -f 05-hello-pod.yaml

apply は「存在しなければ作成、あれば更新」という流れで動きます。(Kubernetes)

確認!

kubectl get pod hello-pod -o wide
kubectl logs hello-pod

ポートフォワードしてブラウザ/HTTPで確認もできます📡

kubectl port-forward pod/hello-pod 3000:3000

別ターミナルで:

curl http://localhost:3000

5) “宣言型っぽさ” を体験しよう(更新してapply)🔁✨

hello k8s の文字を変えてみて👇

- "require('http').createServer((req,res)=>{res.end('hello manifest!!');}).listen(3000)"

そしてもう一回:

kubectl diff -f 05-hello-pod.yaml
kubectl apply -f 05-hello-pod.yaml
kubectl logs hello-pod

これが 「完成図を更新 → 現実が追従」 の体験です😎


「このフィールド何…?」を解決する最強コマンド🔎💪

kubectl explain

マニフェストはフィールド名が多くて迷子になります😵‍💫 そんな時に 公式の“構造説明”をその場で引ける のがこれ!

kubectl explain pod
kubectl explain pod.spec
kubectl explain pod.spec.containers
kubectl explain pod.spec.containers.ports

kubectl explain はサーバが提供する OpenAPI 情報からフィールド構造を説明してくれます。(Kubernetes)


よくあるミス集(最短で直す)🧯🛠️

A) mapping values are not allowed...(だいたいコロン周り)😇

  • 文字列に : が混ざってる → クォートで囲う
  • インデントがズレてる → 近い行のスペースを確認

B) spec: containers: ... の階層ミス(インデント)🫠

  • containersspec の下にいない
  • - name: の位置がずれてる

C) “配列なのに - がない” 🙃

  • containersports は配列になりがち
  • - を忘れると別構造として解釈される

AIで楽するポイント(でも丸投げしない🤖🧠)

AIは 「整形」「説明」「ミス探し」 が得意です💪✨ おすすめの使い方👇

1) YAML読解係にする📖

「このYAMLがやってることを日本語で3行で」 「kindごとに目的を箇条書きで」📝

2) “よくあるミス”検知係にする🧯

  • kubectl apply のエラー全文
  • 問題のYAML

を貼って「原因候補3つ+直し方」で出してもらう👍

3) でも最後に自分で確認する✅

AIはフィールド名を それっぽく 作ることがあるので、最後に

  • kubectl explain ... で存在確認 🔎(Kubernetes)
  • kubectl apply --dry-run=client ... で安全確認 🧯(Kubernetes)

この2枚ガードが超おすすめです💯


ミニ課題(10〜15分)⏱️🎒

課題1:ラベルを増やす🏷️

metadata.labelstier: demo を追加して、diff → apply してみよう!

課題2:ポートをわざと壊して直す😈➡️😇

containerPort: 3000containerPort: "3000"(文字列)にしてみる → dry-runapply でどう怒られるか見る → 元に戻す

課題3:kubectl explain で “自力で調べる”🔍

kubectl explain pod.spec を見て 「containers以外にどんな項目があるか」眺めてみる👀(Kubernetes)


片付け(消すのも大事)🧹

kubectl delete -f 05-hello-pod.yaml

まとめ🎉

  • マニフェストは 理想の状態を宣言する設計図 🧾✨
  • まずは apiVersion / kind / metadata / spec を読む癖!(Kubernetes)
  • 変更は dry-run → diff → apply の順で安全運転🧯🚦(Kubernetes)
  • わからないフィールドは kubectl explain で殴る🔎💥(Kubernetes)

次の章(6章)では、マルチノード前提で 「イメージをクラスタに届ける」 が主役になります📦🚚 マニフェストが読めるようになると、そこがめちゃスムーズになりますよ〜!😄