← 返回首页 K8S Web / 文档 / kubectl 常用命令速查

⌨️ kubectl 常用命令速查 全部命令 + 输出取自本集群(单节点 qingfeng · v1.35.9 · containerd)真实环境,复制即可用

01集群与节点 —— 先看清脚下的地

# 节点清单 + 宽输出:IP/系统/容器运行时,一眼判断节点健康与运行时类型
kubectl get nodes -o wide
NAME       STATUS   ROLES           AGE    VERSION   INTERNAL-IP    OS-IMAGE             CONTAINER-RUNTIME
qingfeng   Ready    control-plane   5d3h   v1.35.9   10.18.170.34   Ubuntu 22.04.5 LTS   containerd://2.2.1
# STATUS=Ready 才正常;NotReady = 节点失联(kubelet/网络/资源出问题)

# 全部命名空间(集群的"房间"清单)
kubectl get namespaces
NAME              STATUS   AGE
default           Active   5d3h
ergesanbaishou    Active   5d2h     # 业务:本网站
harbor            Active   27h      # 业务:Harbor 镜像仓库
ingress-nginx     Active   2d       # 七层流量入口
kube-flannel      Active   5d3h     # 网络插件
kube-system       Active   5d3h     # 控制面组件

# 控制面组件地址(确认 apiserver 在哪)
kubectl cluster-info
Kubernetes control plane is running at https://10.18.170.34:6443
CoreDNS is running at https://.../kube-dns:dns/proxy
💡 第一条习惯:登上一台新集群,先 get nodes 确认全部 Ready 再干活 —— 节点 NotReady 时,后面一切排障都是白费。

02资源查看全家桶(get)—— 90% 的日常

① 看所有命名空间的 Pod(全局体检)

kubectl get pods -A          # -A = 所有命名空间,先看全局有没有红的
NAMESPACE        NAME                             READY   STATUS    RESTARTS        AGE
ergesanbaishou   k8s-web-67458f5f78-4wc4g         1/1     Running   0               2d
harbor           harbor-core-5cf65fb78f-77ckj      1/1     Running   0               3h33m
harbor           harbor-database-0                 1/1     Running   0               3h34m
harbor           harbor-portal-5d9f48888c-7nbxp    1/1     Running   0               27h
ingress-nginx    ingress-nginx-controller-597...  1/1     Running   0               2d
kube-system      etcd-qingfeng                    1/1     Running   0               5d3h
qingfeng         nginx-hello-76ff6cbd47-kmx9f     1/1     Running   0               5d2h
# 状态速判:Running=好 | Pending=调度失败(查describe) |
# CrashLoopBackOff=进程崩溃(查logs --previous) | Evicted=被节点资源挤压驱逐

② 宽输出:Pod IP 落在哪个节点(排网络必备)

kubectl get pods -n harbor -o wide
NAME                        READY   STATUS    AGE     IP            NODE
harbor-core-...-77ckj       1/1     Running   3h33m   10.244.0.74   qingfeng
harbor-database-0           1/1     Running   3h34m   10.244.0.71   qingfeng
harbor-portal-...-7nbxp     1/1     Running   27h     10.244.0.63   qingfeng
harbor-redis-0              1/1     Running   3h34m   10.244.0.72   qingfeng
# -o wide 多出 IP/NODE 列:10.244.x.x 是 Flannel 分的 overlay 地址

③ 工作负载 + Service + Endpoints(名字都从这查)

kubectl get deploy,sts -n harbor        # deploy 名单一查便知(sts 是另一类!)
deployment.apps/harbor-core         2/2     2   2   27h
deployment.apps/harbor-jobservice   1/1     1   1   27h
deployment.apps/harbor-portal       2/2     2   2   27h
deployment.apps/harbor-registry     2/2     2   2   27h
statefulset.apps/harbor-database    1/1         27h
statefulset.apps/harbor-redis       1/1         27h

kubectl get svc -n harbor               # Service = 集群内稳定入口
NAME              TYPE        CLUSTER-IP      PORT(S)             AGE
harbor-core       ClusterIP   10.102.185.70   80/TCP              27h
harbor-registry   ClusterIP   10.110.89.208   5000/TCP,8080/TCP   27h

kubectl get endpoints harbor-portal -n harbor   # svc 背后真实挂了哪些 Pod
NAME            ENDPOINTS                           AGE
harbor-portal   10.244.0.63:8080,10.244.0.64:8080   27h
# ENDPOINTS 为 <none> = svc 后面没有健康 Pod(选择器错了/探针全挂)
💡 万能偷懒:kubectl get all -n harbor 一屏看全 pod/svc/deploy/sts/rs;日志三姿势、一条命令看全部 Pod 等深度用法见 Harbor 排障实录。

03排障三件套(describe / logs / events)

① describe —— 资源的"体检报告",重点看 Events

kubectl describe pod harbor-database-0 -n harbor | tail -9
  database-data:
    Type:        PersistentVolumeClaim (...)
    ClaimName:   harbor-database      # 挂的哪个 PVC
QoS Class:       BestEffort
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
Events:          <none>              # 健康时无事件;出问题时这里全是线索
# 排障时直接看尾部 Events,典型报错:
#   FailedScheduling ... persistentvolumeclaim "xxx" not found → PVC 名错(本集群真实踩过)
#   FailedMount ... unable to attach volume → 卷挂载失败
#   BackOff ... container has run out of memory → OOM 被杀

② logs —— 看进程输出,日志永远在 Pod 不在 Service

kubectl logs -f harbor-database-0 -n harbor          # -f 实时滚动
kubectl logs -f deploy/harbor-core -n harbor        # deploy 简写(自动挑副本,免抄哈希)
kubectl logs <pod> -n harbor --previous              # ★ 看上一次崩溃的日志(CrashLoop 必杀)
kubectl logs <pod> -n harbor -c registry --tail=100  # 多容器 Pod 指定容器+只看百行

③ events —— 集群级"事件流水",按时间排序

kubectl get events -n harbor --sort-by=.lastTimestamp | tail -5
# 健康集群输出为空(正常);出问题时 Warning 事件会密集出现,
# 与 describe 的 Events 是同源数据,但可跨资源、可排序、可持续 watch:
kubectl get events -A -w --sort-by=.lastTimestamp   # -w 挂着实时盯全集群事件
⚠️ 90% 启动故障 = 三件套两条命令:Pending → describe 看 Events;CrashLoop → logs --previous;连锁崩溃永远先修最上游。完整实战认证见 Pending 23h 排障实录。

04进容器与调试(exec / 端口转发)

# 在容器里执行命令(deploy 简写 + 指定容器,实测输出):
kubectl exec -n harbor deploy/harbor-portal -c portal -- echo 'hello from container'
hello from container

# 交互式进容器排障(相当于 docker exec -it)
kubectl exec -it -n harbor deploy/harbor-core -- sh

# 本地端口转发:不暴露服务,从办公网直接访问集群内 ClusterIP
kubectl port-forward svc/harbor-portal -n harbor 8080:80
# Forwarding from 127.0.0.1:8080 -> 8080 → 浏览器开 http://localhost:8080 即可调试
# Ctrl+C 结束;--address=0.0.0.0 可让局域网访问

# 容器与本地互拷文件
kubectl cp -n harbor harbor-database-0:/tmp/a.log ./a.log   # 容器 → 本机
kubectl cp ./b.txt -n harbor harbor-database-0:/tmp/        # 本机 → 容器
💡 临时调试容器:目标镜像里没有 curl/sh 时,用 kubectl run tmp --rm -it --image=nicolaka/netshoot -n harbor -- bash 起一个万能工具箱 Pod,查 DNS/网络连通性后退出即自动删除。

05变更操作(apply / scale / rollout)—— 动手改集群

# 声明式应用清单(最常用,可重复执行,幂等)
kubectl apply -f k8s/harbor-ingress.yaml     # 单文件
kubectl apply -f k8s/                        # 整个目录一键部署
kubectl apply -f https://xxx/xxx.yaml        # 直接吃远程 URL

# 删除(支持同款简写;删 ns 会连带删里面所有资源,慎用!)
kubectl delete -f k8s/harbor-ingress.yaml
kubectl delete pod harbor-redis-0 -n harbor          # 删 Pod(sts/deploy 会自动重建)
kubectl delete deploy/harbor-portal -n harbor        # 删 deploy(副本全下线)

# 伸缩副本数
kubectl scale deploy/harbor-portal -n harbor --replicas=3
# deployment.apps/harbor-portal scaled → get pods 立刻多出 1 个

# 滚动发布三连
kubectl rollout status deploy/harbor-portal -n harbor
# deployment "harbor-portal" successfully rolled out   ← 实测输出
kubectl rollout restart deploy/harbor-portal -n harbor  # 滚动重启(改了 CM/密钥后常用)
kubectl rollout undo deploy/harbor-portal -n harbor     # 一键回滚上个版本

# 临时在线编辑(改完保存立即生效,适合调探针/环境变量)
kubectl edit deploy/harbor-core -n harbor

# 打标签(svc 靠标签找 Pod,标签错=流量断)
kubectl label pods harbor-portal-xxx -n harbor env=test --overwrite
💡 顺序习惯:改配置 → apply → rollout status 盯到 successfully → get pods 复核;不对就 rollout undo,三步之内必能回到健康态。

06清单生成与 API 探索 —— 不写 YAML 也能起服务

# 命令行直接生成清单(dry-run + yaml,重定向存文件再改)
kubectl run nginx-test --image=nginx:1.27 --dry-run=client -o yaml > pod.yaml
kubectl create deploy web --image=nginx:1.27 --replicas=2 --dry-run=client -o yaml > dep.yaml

# 所有资源类型 + 缩写(写命令提速:po=svc=pvc 都有短名)
kubectl api-resources | head -13
NAME                     SHORTNAMES   APIVERSION   NAMESPACED   KIND
configmaps               cm           v1           true         ConfigMap
endpoints                ep           v1           true         Endpoints
events                   ev           v1           true         Event
namespaces               ns           v1           false        Namespace
nodes                    no           v1           false        Node
persistentvolumeclaims   pvc          v1           true         PersistentVolumeClaim
persistentvolumes        pv           v1           false        PersistentVolume
pods                     po           v1           true         Pod

# 字段说明书(不记得字段时,问 kubectl 比 Google 快)
kubectl explain pod.spec.containers.livenessProbe
KIND:       Pod
VERSION:    v1
FIELD: livenessProbe <Probe>
DESCRIPTION:
    Periodic probe of container liveness. Container will be restarted if the
    probe fails. ...

# 资源监控(本集群未装 metrics-server 的真实报错;装完才能用)
kubectl top nodes
error: Metrics API not available
# 修复:kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/... 后即可 top

07输出格式与实用技巧 —— 速查表

写法作用示例
-o wide多列(IP/NODE 等),排网络必备get pods -o wide
-o yaml完整对象定义,学习/备份/复刻get deploy harbor-core -o yaml
-o jsonpath精准抠字段进脚本get -o jsonpath='{.items[*].metadata.name}'
-w挂住持续 watch 变化get pods -n harbor -w
--show-labels显示标签(svc↔Pod 靠它关联)get pods --show-labels
-l k=v按标签过滤get pods -l app=harbor
--sort-by按字段排序get events --sort-by=.lastTimestamp
-A所有命名空间get pods -A
--all-containers多容器 Pod 全看logs -l app=harbor --all-containers
💡 高频组合拳:kubectl get pods -A | grep -v Running(揪出所有异常 Pod)、kubectl get deploy,sts,svc,pvc -n harbor(一次看四类资源)、watch kubectl get pods -n harbor(全屏盯发布过程)。