首页 / Kubernetes (k8s) 入门教程 / kubectl 常用命令入门

Kubernetes (k8s) 入门教程

kubectl 常用命令入门

本教程共 65 篇 · 第 9 篇 · 更新于 2026-08-14 · 约 14 分钟阅读

Kuberneteskubectl命令排查getdescribe

本节目标:掌握 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 <节点>
Note

Pod 一直起不来?八成是 describeEvents 那段。它会告诉你镜像拉取失败、资源不足、节点有污点等具体原因。这是新手排查的第一抓手。

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-rundiff 预览变更,是个好习惯:

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 的使用方式。