第04章:kubectl はじめの10コマンド⌨️🎮
この章は「クラスタの中を“覗く&いじる”ためのリモコン=kubectl」を、最短で手になじませる回だよ〜😄✨ やることはシンプル!“困ったら describe と logs” を軸に、調査→原因→対処のループを回せるようにする🧠🔁
ゴール🎯
- 迷子にならずに、いまクラスタで何が起きてるか確認できる👀
- Podが落ちた/動かないとき、まず何を見るべきか分かる🧯
- “よく使う10コマンド”をコピペで回せるようになる⌨️✨
今日の「はじめの10コマンド」一覧🔟🧰
まずは名前だけでもOK!このあと実際に手を動かして覚えるよ👍
kubectl version:クライアント/クラスタのバージョン確認🧾kubectl config:接続先(context)を確認・切り替え🗺️kubectl get:一覧を見る(基本はこれ)📋kubectl describe:詳細+イベントを見る(超重要)🔍⚡kubectl logs:ログを見る(超重要)📜🔥kubectl exec:Podの中でコマンド実行(現場感)🧑🔧kubectl port-forward:ローカルにポート転送して動作確認🔌kubectl apply:マニフェストを反映(宣言型の入口)📄✅kubectl delete:消す(検証→片付け)🧹kubectl explain:YAMLの“辞書”を見る(次章の予告編)📚
※ 公式のコマンド一覧はここが基準だよ🧭 (Kubernetes)
0️⃣ まずは“詰まった時の型”を覚える🧠🥋
Kubernetesで困ったら、だいたいこの順番でOK👇
kubectl get ...で 状態 を見る👀kubectl describe ...で イベント(何が起きたか)を見る⚡kubectl logs ...で アプリの声 を聞く📜- 必要なら
kubectl exec ...で 中を調べる🧰
この「イベント→ログ」の流れは公式のデバッグ手順でも基本になってるよ🧯 (Kubernetes)
1️⃣ kubectl version:まず“ズレ”を潰す🧾🔧
最初にここで「見えない地雷」を消しておくと、後が楽😌
kubectl version --client --output=yaml
kubectl version --output=yaml
よくあるポイント⚠️
- kubectl のバージョンはクラスタと“±1マイナー以内”が基本(例:v1.35のkubectlは、v1.34〜v1.36のControl Planeと会話できる)📏 (Kubernetes)
- 直近のパッチ更新も把握しておくと安心(例:1.35.1のターゲット日程など)🗓️ (Kubernetes)
2️⃣ kubectl config:いまどこ見てる?🗺️👀
「あれ?別クラスタ見てた😇」事故を防ぐやつ!
kubectl config current-context
kubectl config get-contexts
current-context:今の接続先が一発で分かる✅get-contexts:候補一覧が出る📋
(クラスタを作る系のツールとして、学習では kind がKubernetes 1.35系をデフォルトにする更新が入ってたりするので、contextの見間違いはマジで起きやすい💥) (GitHub)
3️⃣ kubectl get:まずは一覧📋✨
K8sの基本動作は「とりあえず get」😄
kubectl get nodes
kubectl get pods
kubectl get deploy
kubectl get svc
kubectl get events
よく使うオプション🎛️
kubectl get pods -o wide
kubectl get pods -w
kubectl get pods -A
kubectl get pods -n kube-system
kubectl get pods -l app=hello
-o wide:Node配置やIPなど“現場情報”が増える🧠-w:状態変化を追いかける(Pending→Runningとか)👀-A:全Namespace(迷子になったらこれ)🧭-n:Namespace指定(「出てこない!」の9割はこれ)😇
4️⃣ kubectl describe:詳細+イベントで“犯人探し”🔍⚡
困ったらこれ! 最後の方に出る Events が宝の山💎
kubectl describe pod <pod-name>
kubectl describe node <node-name>
kubectl describe deploy <deploy-name>
Eventsでよく見るやつ👀
ImagePullBackOff:イメージ取れない📦❌CrashLoopBackOff:起動→落ちるのループ💥🔁FailedScheduling:置き場所がない(リソース不足/制約など)🪑❌
この “describeで状況→原因を絞る” は公式デバッグでも定番🧯 (Kubernetes)
5️⃣ kubectl logs:アプリの本音を聞く📜🔥
kubectl logs <pod-name>
kubectl logs -f <pod-name>
kubectl logs --since=10m <pod-name>
kubectl logs --tail=200 <pod-name>
マルチコンテナPodのときは -c が必須になることがあるよ👇
kubectl logs <pod-name> -c <container-name>
6️⃣ kubectl exec:Podの中に入って調べる🧑🔧🧰
「環境変数どうなってる?」「ファイルある?」みたいな確認に便利✨
kubectl exec <pod-name> -- env
kubectl exec -it <pod-name> -- sh
💡 注意:イメージによっては sh が無い(distroless等)こともあるよ😇
その場合は exec -- <実在するコマンド> で調べる感じ!
7️⃣ kubectl port-forward:ローカルから動作確認🔌🧪
「Ingress?Service?まだ早い!」って段階で、まず動作だけ見たいときの神コマンド✨
(port-forward はkubectlの正式コマンドだよ) (Kubernetes)
kubectl port-forward pod/<pod-name> 8080:80
## または Deployment へ
kubectl port-forward deploy/<deploy-name> 8080:80
PowerShell なら、リクエスト確認はこれが分かりやすい👇
curl.exe http://localhost:8080/
8️⃣ kubectl apply:宣言型の入口📄✅
次章でYAMLの読み書きを本格的にやるけど、ここでは「反映する感覚」を掴もう😄
コピペ用:ミニDeployment(nginx)🧪
VS Codeで k8s/hello.yaml を作って貼り付けてOK👇
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
replicas: 1
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
spec:
containers:
- name: web
image: nginx:1.27-alpine
ports:
- containerPort: 80
反映!🚀
kubectl apply -f k8s/hello.yaml
確認!👀
kubectl get pods -l app=hello -o wide
9️⃣ kubectl delete:片付けもセット🧹✨
kubectl delete -f k8s/hello.yaml
または個別に👇
kubectl delete deploy/hello
🔟 kubectl explain:YAMLの“辞書”📚✨
「このフィールドって何?どんな型?」を kubectl自身に聞ける のが強い😄 次章(マニフェスト入門)で超効く!
kubectl explain deployment
kubectl explain deployment.spec
kubectl explain deployment.spec.template.spec.containers
🎯 ミニ演習(10分)⏱️😄
kubectl apply -f k8s/hello.yaml✅kubectl get pods -l app=hello -o wide👀kubectl describe pod <pod-name>(Eventsを読む)⚡kubectl port-forward deploy/hello 8080:80🔌- 別ターミナルで
curl.exe http://localhost:8080/🧪 kubectl logs <pod-name> --tail=50(アクセスログが出るか確認)📜kubectl exec -it <pod-name> -- sh(中に入れたら勝ち)🏆kubectl delete -f k8s/hello.yaml🧹
よくある詰まりポイント集😇🧯
- 何も出てこない →
-n間違いが多い!kubectl get pods -Aで全体を見る🧭 - PodがPending →
kubectl describe pod ...の Events に答えがある率高い⚡ - ログが出ない → そもそもリクエスト飛んでない/コンテナ違い(
-c)を疑う📜 - kubectlが繋がらない →
kubectl config current-contextで接続先チェック🗺️
🤖 AI(Copilot/Codex等)で楽する小ワザ✨
kubectl describe pod ...の出力を貼って 「原因候補を3つ」「次に打つkubectlコマンドを順番で」って聞く🔎🧠kubectl logs ...を貼って 「アプリ側の原因とK8s側の原因を分けて説明して」って頼む🧩- ただし Secretっぽい値やトークンは貼らない 🔐🙅♂️(そこは慎重に!)
次の第5章は、今日ちょい出てきた YAML(マニフェスト) を「読める&自分で直せる」ようにしていくよ📄✨
必要なら、この章の演習用に “わざと壊したYAML”(CrashLoop版 / ImagePull失敗版)も作って、describe と logs の練習問題にできるよ😈➡️😇