🎮 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)

"你说的是哪类东西?Pod?Service?Deployment?Node?"

你写的

官方 TYPE

简写

大楼里指

pods

Pod

po

推车(最小干活单元)

deployments

Deployment

deploy

区域经理

services

Service

svc

总机电话

nodes

Node

no

机器/工作台

namespaces

Namespace

ns

房间号

configmaps

ConfigMap

cm

便利贴

secrets

Secret

sec

密封信封

ingress

Ingress

ing

导览规则纸

⚠️ 大小写不敏感,而且 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

⚠️ 忘了写 -n,kubectl 默认去 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 app=app1

"只显示胸前贴纸写 app=app1的"

kubectl get pods -l app=app1

--field-selector status.phase=Running

"按运行状态筛"

kubectl get pods --field-selector status.phase=Running


四、"命令组合"到底是什么意思?—— 不是背单词,是搭积木

所谓"组合",就是:一个动作 → 接不同的 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 按"常用前缀字母"分组

前缀

联想

例子

-n

Namespace(房间号)

-n apps

-o

Output(输出格式)

-o wide / -o yaml

-f

File(文件)

-f xxx.yaml

-l

Label(贴纸)

-l app=app1

-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 --tail=200 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 --namespace=apps

exec报错"not found"/"not executable"

有的镜像没 /bin/bash,只有 /bin/sh

换 -- /bin/sh

logs说没内容

容器启动失败(CrashLoopBackOff)→ 要加 --previous

kubectl logs app1-xxx -n apps --previous

apply 后没变化

YAML 改了不可变字段 / 或改的是 labels 但没改 template

kubectl rollout restart deploy ...强刷


最后一句话收口:kubectl 不是咒语集,它就是一把结构化电话机动作→什么→叫谁→带什么条件,骨架5个字就够用,其余全是翻帮助(-h)和练手感。你要我下一步把这套东西做成一个双面速查卡(正面:命令骨架+4个抽屉;背面:你的集群真实输出逐行翻译)?

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐