kubectl 全部命令:像教10岁小孩玩“遥控器+通讯录“一样记住
🎮 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 [看/改/删] [什么东西] [叫啥名?] [在哪间房?]
只要你念出来:
-
"kubectl get(拿)pods(推车清单)在哪?(-n apps)"
-
"kubectl logs(日志)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个抽屉;背面:你的集群真实输出逐行翻译)?
更多推荐



所有评论(0)