kubectl 10条必备命令速查:从入门到排错,运维人每天都在用
整理了10条生产环境最常用的kubectl命令,涵盖资源查看、日志追踪、容器调试、滚动更新、扩缩容等核心场景,附常用参数和实战技巧。
对于运维工程师来说,kubectl 是使用频率最高的命令行工具——没有之一。每天少则几十次,多则上百次的敲击,熟练程度直接影响排查效率。
但很多人在日常使用中只停留在kubectl get pods和kubectl describe层面,碰到稍微复杂一点的场景就开始查文档、搜命令。
本文整理了10条生产环境每天都在用的kubectl命令,从基础到进阶,每一条都附上常用参数和实战场景。建议收藏,用到的时候直接翻。
01 kubectl get — 查看资源
最基础也是最常用的命令,用于查看集群中各种资源的状态。
# 查看 Podkubectl get pods# 查看所有命名空间的 Podkubectl get pods-A# 查看节点状态kubectl get nodes# 宽格式输出(含 IP、节点名、容器数)kubectl get pods-owide# 按标签过滤kubectl get pods-lapp=nginx常用技巧:
-o wide是必加参数,一次看到 Pod IP 和所在 Node,排查网络问题省去额外查询-A(--all-namespaces)在不知道 Pod 在哪个命名空间时快速定位--show-labels输出标签列,做标签筛选时很有用- 配合
--sort-by可按字段排序,例如kubectl get pods --sort-by=.metadata.creationTimestamp
kubectl get支持查看几乎所有 K8s 资源类型:deployment、service、configmap、secret、pvc、ingress 等,格式统一,一通百通。
02 kubectl describe — 查看详情
排错第一利器。get只能看到概览,describe则输出资源的完整详情,包括关联事件(Events),是排查问题的第一入口。
# Pod 详情(含最近事件,排错时必看)kubectl describe pod<pod-name># 节点详情(资源分配情况、条件状态)kubectl describenode<node-name># 只看最近的事件kubectl describe pod<pod-name>|grep-A20Events什么时候用 describe?
- Pod 一直 Pending → 看 Events 找调度失败原因
- Pod 反复 CrashLoopBackOff → 看 Events 和 Conditions
- 节点 NotReady → describe node 看资源压力和条件状态
- Service 访问不通 → describe service 检查 Endpoints 是否正常
排查问题时,我的习惯是:先
get看状态 → 状态异常就用describe看事件 → 事件指向具体原因后再用logs或exec深入。
03 kubectl logs — 查看日志
查看容器标准输出,实时追踪应用日志。相当于docker logs的 K8s 版本。
# 查看最近 100 行日志kubectl logs<pod-name>--tail=100# 实时跟踪日志(类似 tail -f)kubectl logs-f<pod-name># 多容器 Pod 指定容器kubectl logs<pod-name>-c<container-name># 查看前一个崩溃容器的日志(Pod 重启后排查崩溃原因)kubectl logs<pod-name>--previous# 查看过去 30 分钟的日志kubectl logs<pod-name>--since=30m# 按时间戳查看日志kubectl logs<pod-name>--timestamps实战场景:
- 应用启动失败 →
--previous看崩溃前的日志 - 实时追踪请求 →
-f连续输出 - 日志量太大 →
--tail=100只看最近,或--since=5m限定时间范围 - 多容器 Pod → 必须用
-c指定容器名,否则报错
对于生产环境建议配合 ELK/Loki 等集中式日志系统,但紧急排错时
kubectl logs仍然是最快的方式。
04 kubectl exec — 进入容器
在容器内执行命令,相当于docker exec。调试应用、排查网络、检查配置时必备。
# 进入容器 Shellkubectlexec-it<pod-name>-- /bin/bash kubectlexec-it<pod-name>-- /bin/sh# 精简镜像用 sh# 执行单条命令(不进 Shell)kubectlexec<pod-name>--ls/app kubectlexec<pod-name>--cat/etc/resolv.conf# 多容器 Pod 指定容器kubectlexec-it<pod-name>-c<container-name>-- /bin/bash# 执行命令并获取返回码kubectlexec<pod-name>--curl-s-o/dev/null-w"%{http_code}"http://localhost:8080/health注意事项:
-it组合:-i(stdin)+-t(tty),进交互式 Shell 必须加--分隔符后面才是容器内要执行的命令,不能省略- 镜像可能没有 bash(如 alpine),此时用
/bin/sh - 生产环境谨慎操作,进容器后不要随意修改文件
05 kubectl apply — 声明式部署
应用 YAML 配置文件,声明式管理资源。K8s 的核心操作方式。
# 应用单个配置文件kubectl apply-fdeployment.yaml# 应用整个目录下的所有 YAMLkubectl apply-fk8s/# 使用 Kustomize(多环境管理推荐)kubectl apply-k./overlays/prod# 预览变更但不真正执行(dry-run)kubectl apply-fdeployment.yaml --dry-run=clientapply vs create 的区别:
apply是声明式:对比差异,只更新变化部分,资源存在就更新,不存在就创建create是命令式:资源已存在会报错- 生产环境推荐用
apply,配合 Git 做版本管理(GitOps 的基础)
建议先用
--dry-run=client和-o yaml验证配置正确性,再正式执行。
06 kubectl delete — 删除资源
删除资源,带确认提示。删除用 YAML 创建的资源时效率最高。
# 删除单个 Podkubectl delete pod<pod-name># 按 YAML 文件删除(删掉 apply 创建的所有资源)kubectl delete-fdeployment.yaml# 按标签批量删除kubectl delete pods-lapp=nginx# 强制立即删除(跳过优雅终止,资源卡在 Terminating 时使用)kubectl delete pod<pod-name>--force--grace-period=0# 删除 Deployment 及关联的 Podkubectl delete deployment<deploy-name>注意事项:
--force --grace-period=0是最后手段,跳过 preStop hook 和优雅终止,仅在 Pod 长时间卡在 Terminating 时使用- 删除 Deployment 会自动删除关联的 ReplicaSet 和 Pod
- 删除 Service 不会影响 Pod 本身,只移除访问入口
- 建议优先用
delete -f <yaml>的方式清理,不会漏删
07 kubectl rollout — 滚动更新
管理 Deployment 的滚动更新过程,包括查看状态、查看历史、回滚操作。
# 查看滚动更新进度kubectl rollout status deployment/<deploy-name># 查看部署历史版本(用于回滚)kubectl rollouthistorydeployment/<deploy-name># 回滚到上一个版本(发版出问题时最快恢复方式)kubectl rollout undo deployment/<deploy-name># 回滚到指定版本kubectl rollout undo deployment/<deploy-name>--to-revision=3# 暂停/恢复滚动更新(分批次发布时使用)kubectl rollout pause deployment/<deploy-name>kubectl rollout resume deployment/<deploy-name>实战场景:
- 更新镜像后 → 用
rollout status实时监控进度 - 新版本有问题 →
rollout undo一键回滚,秒级恢复 - 分批灰度发布 →
pause+ 手动验证 +resume - 查看历史版本 →
rollout history,配合--revision查看具体变更
rollout undo是运维的"后悔药",建议每次发布前先确认历史版本信息,确保能快速回滚。
08 kubectl scale — 扩缩容
快速调整副本数,应对流量变化或紧急情况。
# 手动扩容kubectl scale deployment/<deploy-name>--replicas=5# 一键缩到 0(停止服务但保留配置,节省成本)kubectl scale deployment/<deploy-name>--replicas=0# 查看当前副本数kubectl get deployment<deploy-name>-ojsonpath='{.spec.replicas}'应用场景:
- 流量突增 → 快速扩容分担压力
- 节点维护 → 扩容到其他节点后缩容维护节点
- 非核心服务 → 闲时缩到0节省资源
- 配合 HPA(HorizontalPodAutoscaler)实现自动扩缩容,
scale作为手动应急手段
注意区分
scale和 HPA:HPA 是自动的长期策略,scale是手动干预的临时手段。两者可以共存。
09 kubectl port-forward — 端口转发
将集群内的 Pod 或 Service 端口映射到本地,调试必备。
# 转发 Pod 端口到本地kubectl port-forward pod/<pod-name>8080:80# 转发 Service 端口kubectl port-forward svc/<svc-name>8080:80# 后台运行(加 &)kubectl port-forward pod/<pod-name>8080:80&# 本地访问curlhttp://localhost:8080使用场景:
- 本地调试集群内服务,无需暴露 NodePort 或 Ingress
- 临时访问未暴露端口的内部服务(如数据库、管理后台)
- 配合本地工具(Postman、浏览器)直接访问 K8s 内部服务
- 端口转发会一直占用终端,建议配合
&后台运行或另开终端
port-forward不需要 Service/Ingress/NodePort,直接通过 API Server 隧道连接,是最轻量的访问方式。
10 kubectl top — 资源使用
查看 Pod 和节点的实时 CPU/内存消耗。
# 查看节点资源使用kubectltopnodes# 查看 Pod 资源使用kubectltoppods# 按命名空间查看kubectltoppods-n<namespace># 按内存排序(定位资源大户)kubectltoppods --sort-by=memory# 按 CPU 排序kubectltoppods --sort-by=cpu前置条件:
- 集群必须安装 metrics-server 组件才能使用
kubectl top - 如果提示
Metrics API not available,说明 metrics-server 未安装或异常 - 阿里云 ACK、华为云 CCE 等托管集群通常已内置
top是快速定位资源瓶颈的第一步,发现 CPU/内存异常后,再用describe和logs深入排查。
💡 额外技巧:kubectl 别名 + 自动补全
每天敲几百次kubectl,一个简单的别名能省下大量按键次数。
# 加到 ~/.bashrc 或 ~/.zshrc,重新登录后生效aliask='kubectl'aliaskgp='kubectl get pods'aliaskgd='kubectl get deployment'aliaskgs='kubectl get service'aliaskd='kubectl describe'aliaskl='kubectl logs'aliaske='kubectl exec -it'aliaskpf='kubectl port-forward'aliaska='kubectl apply -f'aliaskrm='kubectl delete -f'# 启用 kubectl 自动补全(效率翻倍)source<(kubectl completionbash)# Bashsource<(kubectl completionzsh)# Zsh别名使用建议:
| 别名 | 完整命令 | 用途 |
|---|---|---|
k | kubectl | 基础前缀 |
kgp | kubectl get pods | 查看 Pod |
kd | kubectl describe | 查看详情 |
kl | kubectl logs | 查看日志 |
ke | kubectl exec -it | 进容器 |
kpf | kubectl port-forward | 端口转发 |
ka | kubectl apply -f | 应用配置 |
krm | kubectl delete -f | 删除资源 |
总结
这10条命令覆盖了日常运维 90% 的 kubectl 使用场景:
- get/describe/logs/exec→ 日常排错四件套
- apply/delete→ 资源管理基本功
- rollout/scale→ 发布与扩缩容
- port-forward/top→ 调试和监控
建议把常用参数形成肌肉记忆,排错时不用再翻文档,效率能提升不少。配合别名和自动补全,每天能省好几百次按键。
坚持练习,每条命令敲3遍,一周就能熟练掌握。
