🎮 kubectl 全部命令:像教10岁小孩玩"遥控器+通讯录"一样记住
先记住一句话(官方语法)
kubectl [动作] [对象类型] [对象名字] [附加条件...]官方写的是:kubectl command TYPE NAME flags
翻译成小孩话就是:
"前台总机(kubectl)→ 你说:对什么类型的东西(TYPE)→ 叫什么名字(NAME)→ 做什么事(command)→ 带上什么条件(flags)"
一、kubectl 本质 = 一个电话机,不是魔法
你在终端敲kubectl,它做的事只有一件:
把你的话翻译成 HTTP 请求 → 打到 API Server(大楼前台总机)→ 前台查档案(etcd)→ 控制器们去干活
所以你每次敲命令,脑子里就放一张图:
你 → kubectl → [打电话给] → API Server → etcd(记录) → 控制器(执行)二、拆开一条命令的"四节车厢"模型
以你最常用的为例:
kubectl get pods -n apps -o wide车厢①:kubectl = 电话机本身(你拿起话筒)
车厢②:get = 动作(command)
"我要看清单。"
动作动词 | 大楼里什么意思 | 什么时候用 |
|---|---|---|
| "给我列一下清单" | 99%的起始操作 |
| "把这页病历念一遍(含事件)" | Pod 起不来 / 看哪里卡了 |
| "按这份说明书,把大楼改成这样" | 日常主力(声明式) |
| "撤掉" | 清理 |
| "把店员的小本子念给我听" | 看输出 |
| "走到推车边,掀帘子跟店员说话" | 紧急排障 |
| "从外面拉一根临时对讲机线进来" | 本地浏览器临时访问 |
| "改排班人数" | 扩/缩 |
| "换菜单进度/撤回" | 升级管理 |
| "当场改说明书写错的地方" | 应急微调 |
官方的分组精神也是这样分的:查看 → 创建更新 → 调试 → 集群配置
车厢③:pods(或po) = 对象类型(TYPE)
"你说的是哪类东西?Pod?Service?Deployment?Node?"
你写的 | 官方 TYPE | 简写 | 大楼里指 |
|---|---|---|---|
| Pod |
| 推车(最小干活单元) |
| Deployment |
| 区域经理 |
| Service |
| 总机电话 |
| Node |
| 机器/工作台 |
| Namespace |
| 房间号 |
| ConfigMap |
| 便利贴 |
| Secret |
| 密封信封 |
| Ingress |
| 导览规则纸 |
⚠️大小写不敏感,而且pods / pod / po三个都能用,kubectl会帮你认出来
车厢④:my-pod(可选) = 名字(NAME)
"具体哪一个?不说名字 = 全部"
kubectl get pods # 不写名字 → 看全部 kubectl get pods app1-xxx # 写名字 → 只看它附加条件:-n apps -o wide = flags(旗帜/开关)
"顺便带上的条件:在哪个房间?要多列吗?输出成 YAML 吗?"
三、flags(那些-n/-o/-f/-l到底怎么记?)
不要死背。把它们分成4 个抽屉,每个抽屉里只有 3~5 个你天天用的:
抽屉A:「你在敲哪个房间?」—— namespace 系
旗子 | 人话 | 例子 |
|---|---|---|
| "去apps 房间里找/做事" |
|
| "所有房间一起看"(注意:短写是大写A,不是小写) |
|
⚠️ 忘了写
-n,kubectl 默认去default 房间——这就是为什么你之前 app1 全在default里(不是故意的,只是没指定)
抽屉B:「你想看多详细?」—— output 系
旗子 | 人话 | 例子 |
|---|---|---|
| "多给几列(IP / Node 这种)" |
|
| "给我看它的完整档案(YAML原文)" |
|
| "给我看 JSON 版档案" |
|
| "把贴纸(labels)也列出来" |
|
抽屉C:「从哪里读说明书?」—— file 系
旗子 | 人话 | 例子 |
|---|---|---|
| "按这份文件执行" |
|
| "按这个文件夹里所有文件执行" |
|
-f=file,记住这一个字母就够
抽屉D:「筛选/过滤」—— selector 系
旗子 | 人话 | 例子 |
|---|---|---|
| "只显示胸前贴纸写 |
|
| "按运行状态筛" |
|
四、"命令组合"到底是什么意思?—— 不是背单词,是搭积木
所谓"组合",就是:一个动作 → 接不同的 TYPE → 带不同的 flags,骨架永远不变:
kubectl [动作] [TYPE] [名字?] [-n?] [其他flags]举几个你一看就懂的组合:
组合①:日常三板斧(占你 80% 操作)
# 1. 先看有什么 kubectl get pods -n apps kubectl get pods -A # 所有房间扫一眼 # 2. 不对劲?看病历(重点看底部 Events) kubectl describe pod app1-xxx -n apps # 3. 看店员写了啥日志 kubectl logs app1-xxx -n apps kubectl logs -f app1-xxx -n apps # -f = 跟着看(直播) kubectl logs --tail=100 app1-xxx -n apps # 只看最后100行组合②:进推车里(排障专用)
# 掀开帘子聊天 kubectl exec -it app1-xxx -n apps -- /bin/sh # ↑ ↑ ↑ ↑ # stdin TTY Pod名字 房间 分隔符(必须写两个横杠)这里的-- 超级重要——它是一条分界线:
--左边:给 kubectl 看的参数--右边:给容器里的命令看的
忘了写--有时会诡异报错,记住"两个横杠=把话筒递过去"
组合③:拉临时对讲机(本地调试神器)
# 你浏览器 → localhost:8080 → Pod的80 kubectl port-forward -n apps pod/app1-xxx 8080:80 # 或更常用:直接forward到Service kubectl port-forward -n apps svc/app1-service 8080:80然后浏览器开http://localhost:8080/app1——不走 Ingress,不碰防火墙,纯本地
组合④:改排班数
kubectl scale deployment app1-deployment --replicas=3 -n apps组合⑤:换菜单(镜像升级)→ 看进度 → 翻车就撤
kubectl set image deployment/app1-deployment app1=myimage:v2 -n apps kubectl rollout status deployment/app1-deployment -n apps # 翻车了: kubectl rollout undo deployment/app1-deployment -n apps五、记忆法:不是背表,是"造三个心理锚点"
锚点1️⃣:所有命令都长得像一句英语
kubectl [看/改/删] [什么东西] [叫啥名?] [在哪间房?]只要你念出来:
"kubectlget(拿)pods(推车清单)在哪?(-n apps)"
"kubectllogs(日志)app1-xxx(哪个推车)在哪?(-n apps)"
大脑就不需要背了,语法自己长出来。
锚点2️⃣:flags 按"常用前缀字母"分组
前缀 | 联想 | 例子 |
|---|---|---|
| Namespace(房间号) |
|
| Output(输出格式) |
|
| File(文件) |
|
| Label(贴纸) |
|
| All-namespaces | 大写A! |
看到
-A就想到"All房间",看到-n就想到"N号房"
锚点3️⃣:忘了参数?永远的救命稻草
kubectl -h # 总帮助 kubectl get -h # get 这个动作有哪些参数+例子 kubectl logs -h # logs 有哪些参数(--tail / --since / -p 全在这)官方文档也明确说了:不确定就加-h/--help,它会直接给你 Usage + Examples
六、你最可能用的"一条龙排障组合"(肌肉记忆)
# ① 扫一眼全楼 kubectl get pods -A --show-labels # ② 找到可疑的 → 看它的"病历本"(底部 Events 是金矿) kubectl describe pod app1-xxx -n apps # ③ 看它在嘟囔什么 kubectl logs app1-xxx -n apps kubectl logs -f --tail=200 app1-xxx -n apps # ④ 实在不行,掀帘子进去 kubectl exec -it app1-xxx -n apps -- /bin/sh # ⑤ 改完了?看它活没活 kubectl get pods -n apps -w # -w = watch(实时刷新)七、一个防坑小抄(为什么你某些命令"好像没生效")
症状 | 原因 | 修法 |
|---|---|---|
明明创建了,但 | 忘了 | 加 |
| 有的镜像没 | 换 |
| 容器启动失败( |
|
apply 后没变化 | YAML 改了不可变字段 / 或改的是 labels 但没改 template |
|
最后一句话收口:kubectl 不是咒语集,它就是一把结构化电话机:动作→什么→叫谁→带什么条件,骨架5个字就够用,其余全是翻帮助(-h)和练手感。你要我下一步把这套东西做成一个双面速查卡(正面:命令骨架+4个抽屉;背面:你的集群真实输出逐行翻译)?