kubectl 常用命令入门
本教程共 65 篇 · 第 9 篇 · 更新于 2026-08-14 · 约 14 分钟阅读
本节目标:掌握 kubectl 最常用的一批命令,能查看资源、排查问题、进容器调试,并能用 apply/delete 管理对象。
kubectl 是和 k8s 对话的唯一日常工具。命令很多,但常用的就那一二十条。这章按”查看—调试—管理”三类来讲,每条都给能直接敲的示例。
9-1 先开个好用的小功能:自动补全
kubectl 命令长、参数多,敲到手酸。建议先开自动补全(bash 为例):
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
再设个别名,省得每次敲全名:
alias k=kubectl
complete -o default -F __start_kubectl k
Tip设了
alias k=kubectl之后,命令可以写k get pods,少打好几个字母。本书后续示例仍用全名kubectl,你本地用别名完全没问题。
9-2 查看类:get 和 describe
kubectl get 是最常用的”列表”命令,看资源概况。
kubectl get pods # 看当前命名空间的 Pod
kubectl get pods -o wide # 多给点信息,比如 Pod 跑在哪台节点
kubectl get services # 看 Service
kubectl get deployments # 看 Deployment
kubectl get nodes # 看集群节点
kubectl get all # 当前命名空间所有资源都列出来
-A 是 --all-namespaces 的缩写,表示跨所有命名空间:
kubectl get pods -A
kubectl describe 看单个资源的详细情况,排错时几乎是必敲的。
kubectl describe pod <pod名>
kubectl describe node <节点名>
NotePod 一直起不来?八成是
describe看Events那段。它会告诉你镜像拉取失败、资源不足、节点有污点等具体原因。这是新手排查的第一抓手。
9-3 调试类:logs 和 exec
kubectl logs 看容器输出(标准输出/错误)。
kubectl logs <pod名> # 看日志
kubectl logs <pod名> -f # 持续跟随输出,类似 tail -f
kubectl logs <pod名> --previous # 看上一次崩溃实例的日志
多容器 Pod 要指定容器:
kubectl logs <pod名> -c <容器名>
kubectl exec 进到容器里执行命令,调试神器。
kubectl exec <pod名> -- ls / # 在容器里执行 ls
kubectl exec -it <pod名> -- /bin/sh # 进交互式 shell
Warning
-it是交互模式,需要你的终端支持。在脚本或自动化里别用它。另外,很多精简镜像没有bash,/bin/sh比/bin/bash更稳。
9-4 配置类:apply 和 delete
kubectl apply 是声明式管理的核心。给它一个 YAML 文件,它把集群调到文件描述的状态。
kubectl apply -f my-app.yaml # 应用单个文件
kubectl apply -f ./manifests/ # 应用整个目录
先用 --dry-run 和 diff 预览变更,是个好习惯:
kubectl diff -f my-app.yaml # 看看 apply 会改什么(需服务端支持)
kubectl delete 删除资源。
kubectl delete -f my-app.yaml # 按文件删
kubectl delete pod <pod名> # 按名字删
kubectl delete deployment hello-node # 删整个 Deployment
Tip生产推荐”声明式”:所有东西用 YAML +
apply管。临时试手才用create/run这种命令式。下一章会专门对比两种方式。
9-5 扩缩与更新
把副本数从 1 扩到 3:
kubectl scale deployment hello-node --replicas=3
改镜像版本(滚动更新):
kubectl set image deployment/hello-node nginx=nginx:1.27
看滚动更新进度:
kubectl rollout status deployment hello-node
回滚到上一版:
kubectl rollout undo deployment hello-node
Note这些命令背后的机制(Deployment、滚动更新、回滚)后面工作负载章节会细讲。这章你先会敲、知道能干嘛就好。
9-6 节点运维类
标记节点不可调度(维护前用):
kubectl cordon <节点名>
排空节点(把上面的 Pod 挪走):
kubectl drain <节点名> --ignore-daemonsets
恢复可调度:
kubectl uncordon <节点名>
看所有支持的资源类型:
kubectl api-resources
9-7 输出格式的小技巧
kubectl get 默认是表格,但能换成 yaml/json,方便看全貌或接脚本:
kubectl get pod <pod名> -o yaml # 完整 YAML
kubectl get pod <pod名> -o json # 完整 JSON
kubectl get pods -o wide # 宽表,含节点名
Tip想导出某个正在运行的资源、改改再 apply?
kubectl get pod <名> -o yaml > pod.yaml是个常用套路。导出后记得把status那段删掉,那部分是集群填的,不是你该管的。
9-8 一个速查小结
把今天最该记住的贴墙上:
- 看概况:
kubectl get - 看细节:
kubectl describe(重点看 Events) - 看日志:
kubectl logs - 进容器:
kubectl exec - 管资源:
kubectl apply/kubectl delete - 扩缩容:
kubectl scale/kubectl set image/kubectl rollout
9-9 用 explain 查字段,少翻文档
记不住 YAML 里某个字段怎么写?不用跑去查官网,kubectl 自带说明书:
kubectl explain pods # 看 Pod 整体结构
kubectl explain pods.spec.containers # 看容器的字段说明
它会把对应 API 对象的字段、类型、含义直接打印出来,相当于把官方参考文档搬到了命令行。写 YAML 卡壳时,这招比搜网页快得多。
Tip新手写 YAML 最容易在字段名和层级上出错。
kubectl explain能告诉你”这个字段在哪一层、是什么类型、要不要数组”。配合编辑器插件(如 kubernetes-snippets),写起来就顺了。
9-10 几条调试与排错的高频命令
再补几条实战里常敲的:
kubectl get events --sort-by=.metadata.creationTimestamp # 看事件时间线,排错首选
kubectl top pods # 看 Pod 的 CPU/内存占用(需装 metrics-server)
kubectl top nodes # 看节点资源占用
kubectl cp <pod名>:/path/file ./本地文件 # 从 Pod 拷文件出来
kubectl rollout history deployment hello-node # 看这个 Deployment 的发布历史
Warning
kubectl top依赖集群里的 metrics-server 组件。你本地用 minikube 时,它可能默认没开,需要minikube addons enable metrics-server启用后才能用。看不到数据先别慌,多半是这个原因。
标签(Label)是 k8s 里组织资源的利器。给 Pod 打个标签,后面就能按标签批量操作:
kubectl label pods <pod名> env=dev # 打标签
kubectl get pods -l env=dev # 只看带这个标签的 Pod
kubectl delete pods -l env=dev # 批量删带这个标签的 Pod
注解(Annotation)类似,但用来存非标识性的元信息,比如”由哪个工具生成”。两者区别:标签用于筛选和关联,注解用于记录说明。
9-12 进入排错模式:debug
k8s 还提供一个 debug 命令,能往运行中的 Pod 里临时塞一个调试容器,方便你进去排查网络、配置问题:
kubectl debug <pod名> -it --image=busybox -- sh
它不会动你原来的容器,只是并肩起一个调试容器共享同一个 Pod 的命名空间,排查完退出即可。
Tip
debug在容器本身没有 shell(比如distroless镜像)时特别有用——你用带工具的调试容器去”搭把手”,不用改原镜像。
小结
这一章的命令越多,越要抓住主线:查看用 get/describe、调试用 logs/exec/debug、管理用 apply/delete、查字段用 explain、看指标用 top、组织用 label。真正该刻进肌肉记忆的,是”出问题时先 describe 看 Events、再 logs 看输出”这套排查思路。
9-14 一条命令看全貌
最后给你一个”偷懒”命令:想一眼看尽当前命名空间里都有啥,用 kubectl get all:
kubectl get all
它会把 Pod、Service、Deployment、ReplicaSet 等常用资源一次性列出来。排查”我到底建了些什么”时特别方便。配合 -A 还能跨命名空间看。
Tip命令学再多,也建议你在自己集群里真敲一遍。k8s 是”做中学”的技能,光看不敲,过两天就忘。把本章命令逐个试一遍,印象会深很多。
下一章,我们聊聊命令背后的两种管理哲学:声明式 vs 命令式。理解了它,你才算真正入门 k8s 的使用方式。