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我要看清单。动作动词大楼里什么意思什么时候用get给我列一下清单99%的起始操作describe把这页病历念一遍含事件Pod 起不来 / 看哪里卡了apply -f按这份说明书把大楼改成这样日常主力声明式delete撤掉清理logs把店员的小本子念给我听看输出exec走到推车边掀帘子跟店员说话紧急排障port-forward从外面拉一根临时对讲机线进来本地浏览器临时访问scale改排班人数扩/缩rollout换菜单进度/撤回升级管理edit当场改说明书写错的地方应急微调官方的分组精神也是这样分的查看 → 创建更新 → 调试 → 集群配置车厢③pods或po 对象类型TYPE你说的是哪类东西PodServiceDeploymentNode你写的官方 TYPE简写大楼里指podsPodpo推车最小干活单元deploymentsDeploymentdeploy区域经理servicesServicesvc总机电话nodesNodeno机器/工作台namespacesNamespacens房间号configmapsConfigMapcm便利贴secretsSecretsec密封信封ingressIngressing导览规则纸⚠️大小写不敏感而且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 系旗子人话例子-n apps或--namespace apps去apps 房间里找/做事kubectl get pods -n apps-A或--all-namespaces所有房间一起看注意短写是大写A不是小写kubectl get pods -A⚠️ 忘了写-nkubectl 默认去default 房间——这就是为什么你之前 app1 全在default里不是故意的只是没指定抽屉B「你想看多详细」—— output 系旗子人话例子-o wide多给几列IP / Node 这种kubectl get pods -o wide-o yaml给我看它的完整档案YAML原文kubectl get pod app1-xxx -o yaml-o json给我看 JSON 版档案kubectl get pod app1-xxx -o json--show-labels把贴纸labels也列出来kubectl get pods --show-labels抽屉C「从哪里读说明书」—— file 系旗子人话例子-f nginx.yaml按这份文件执行kubectl apply -f nginx.yaml-f ./dir/按这个文件夹里所有文件执行kubectl apply -f ./k8s/-ffile记住这一个字母就够抽屉D「筛选/过滤」—— selector 系旗子人话例子-l appapp1只显示胸前贴纸写appapp1的kubectl get pods -l appapp1--field-selector status.phaseRunning按运行状态筛kubectl get pods --field-selector status.phaseRunning四、命令组合到底是什么意思—— 不是背单词是搭积木所谓组合就是一个动作 → 接不同的 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 --tail100 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 --replicas3 -n apps组合⑤换菜单镜像升级→ 看进度 → 翻车就撤kubectl set image deployment/app1-deployment app1myimage:v2 -n apps kubectl rollout status deployment/app1-deployment -n apps # 翻车了 kubectl rollout undo deployment/app1-deployment -n apps五、记忆法不是背表是造三个心理锚点锚点1️⃣所有命令都长得像一句英语kubectl [看/改/删] [什么东西] [叫啥名?] [在哪间房?]只要你念出来kubectlget拿pods推车清单在哪-n appskubectllogs日志app1-xxx哪个推车在哪-n apps大脑就不需要背了语法自己长出来。锚点2️⃣flags 按常用前缀字母分组前缀联想例子-n​Namespace房间号-n apps-o​Output输出格式-o wide / -o yaml-f​File文件-f xxx.yaml-l​Label贴纸-l appapp1-A​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 --tail200 app1-xxx -n apps # ④ 实在不行掀帘子进去 kubectl exec -it app1-xxx -n apps -- /bin/sh # ⑤ 改完了看它活没活 kubectl get pods -n apps -w # -w watch实时刷新七、一个防坑小抄为什么你某些命令好像没生效症状原因修法明明创建了但kubectl get pods看不到忘了-n去看了 default 房间加-n apps或kubectl config set-context --current --namespaceappsexec报错not found/not executable有的镜像没/bin/bash只有/bin/sh换-- /bin/shlogs说没内容容器启动失败CrashLoopBackOff→ 要加--previouskubectl logs app1-xxx -n apps --previousapply 后没变化YAML 改了不可变字段 / 或改的是 labels 但没改 templatekubectl rollout restart deploy ...强刷最后一句话收口kubectl 不是咒语集它就是一把结构化电话机动作→什么→叫谁→带什么条件骨架5个字就够用其余全是翻帮助-h和练手感。你要我下一步把这套东西做成一个双面速查卡正面命令骨架4个抽屉背面你的集群真实输出逐行翻译