kubectl 命令速查:按场景查 Kubernetes 常用命令
kubectl 常用命令按场景速查:get 看状态、describe 看事件、logs 看日志、exec 进容器、apply 改配置、scale 改副本,附 namespace 用法和排查卡住 Pod 的真实步骤。
kubectl 命令速查:按场景查 Kubernetes 常用命令
刚接手一个集群的时候,最难受的不是命令多,而是不知道当下这个问题该敲哪一条。Pod 红了,到底先 describe 还是先 logs?想重启服务,是 delete pod 还是 rollout restart?这篇按你真实会遇到的场景,把 kubectl 最常用的那几条命令串起来,记不住的部分可以直接到 kubectl 命令速查工具 里搜。
七条撑起日常运维的命令
绝大多数操作其实就围着这七个动词转:get、describe、logs、exec、apply、delete、scale。先看一组完整的实际操作:
kubectl get pods -n default
kubectl describe pod web-7d9c8b6f5-x2kqr -n default
kubectl logs web-7d9c8b6f5-x2kqr -n default -f
kubectl exec -it web-7d9c8b6f5-x2kqr -n default -- sh
kubectl scale deployment/web --replicas=3 -n default
第一条列出当前命名空间所有 Pod,先看 STATUS 和 RESTARTS 两列。describe 把这个 Pod 的事件和容器状态全摊开,排查问题九成信息都在最底下的 Events。logs 加 -f 实时跟日志。exec 加 -it ... -- sh 进容器内部看一眼文件或环境变量。scale 直接改副本数。
记住一个细节:exec 后面那个 -- 不能省,它的作用是把后面的东西交给容器里的命令,而不是被 kubectl 自己吃掉。还有 exec 默认走 sh,alpine 有 sh 没 bash,distroless 连 sh 都没,所以先试 sh 最稳。
namespace:别忘了 -n
新手最常见的困惑是「我明明部署了,怎么 get pods 什么都没有」。十有八九是命名空间不对。kubectl 默认只看 default 这个 namespace,你的服务可能在 kube-system 或者业务自己的 namespace 里。
kubectl get pods --all-namespaces
kubectl get pods -n production
kubectl config set-context --current --namespace=production
第一条跨所有命名空间看一遍,确认服务到底在哪。第二条临时指定一个。第三条把当前上下文的默认 namespace 永久切过去,之后所有命令就不用每次都带 -n 了。我自己接手新集群第一件事就是跑 --all-namespaces 摸清楚有几个业务域,省得后面对着空列表怀疑人生。
排查一个卡住的 Pod
这是最值钱的部分。Pod 状态不对的时候,不同状态对应完全不同的修法,别一上来就乱删。
ImagePullBackOff 是拉镜像出了问题,describe pod 看 Events,一般是 tag 拼错、没配 imagePullSecret、私有 registry 不在集群 DNS 里。改镜像字符串或加密钥就解决。
CrashLoopBackOff 是容器起来又挂了,属于应用层问题。关键一步是看上一次崩之前的日志:
kubectl logs web-7d9c8b6f5-x2kqr -n production --previous
注意那个 --previous,不加它你看到的是新拉起来的容器,不是真正崩的那一次。配合 describe 里的 Exit Code 一起判断:137 是被 OOMKilled,143 是收到 SIGTERM,1 是应用自己抛错,0 是 CMD 正常跑完退出(常见误区是把一次性任务当成常驻服务)。
改配置和重启服务
改完 YAML 用 apply 下发,它是声明式的,幂等,反复跑结果一致:
kubectl apply -f deployment.yaml
kubectl rollout status deployment/web -n production
想重启服务,请用 kubectl rollout restart deployment/web,不要 delete pod。rollout restart 是 1.15 专门为这个加的,走标准滚动更新,maxUnavailable 和 maxSurge 都生效,零停机,还能 rollout undo 回滚。delete pod 靠 ReplicaSet 把它拉回来,没有 rollout 历史,单副本的服务还会瞬间掉到 0 个,线上很危险。
apply 还有个好用的点:apply -f - 是从 stdin 读,所以堡垒机装不了 helm 时可以本地渲染再串起来:helm template release ./chart | kubectl apply -f -。
把它放进肌肉记忆
这些命令真正记牢只能靠多敲,但敲之前忘了参数很正常。我现在的习惯是把 kubectl 命令速查 开在旁边,搜「137」直接跳到 OOMKilled,搜「restart」直接拿到 rollout restart 那条,每条都带一行常见坑,比翻官方文档快得多。容器那一层如果也想顺手查,可以配 Docker 速查 一起用,从镜像构建到集群部署一条线串下来。
kubectl 的命令空间很大,但日常 90% 就是上面这七个动词加 namespace 切换加几条排查命令。先把这些用顺,再慢慢扩到 RBAC、patch、kustomize,比一上来啃 Operator 和 CRD 实在得多。
Made by Toolora · Updated 2026-06-13