Kubectl 命令速查手册

写在前面

本文整理了日常使用 Kubernetes 最常用的 kubectl 命令,涵盖资源查看、部署管理、排错调试和集群运维。每个命令都力求实用,避免罗列用不到的冷门参数。


一、基础操作

1.1 集群信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 查看集群信息
kubectl cluster-info

# 查看集群节点
kubectl get nodes

# 查看节点详细信息
kubectl describe node <node-name>

# 查看节点资源使用
kubectl top nodes

# 查看 kubeconfig 配置
kubectl config view

# 切换命名空间(需要 kubectx 或手动切换)
kubectl config set-context --current --namespace=<namespace>

1.2 命名空间

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 查看所有命名空间
kubectl get namespaces
kubectl get ns

# 创建命名空间
kubectl create namespace dev

# 删除命名空间
kubectl delete namespace dev

# 在指定命名空间下操作(-n 或 --namespace)
kubectl get pods -n dev

# 查看所有命名空间的资源
kubectl get pods --all-namespaces
kubectl get pods -A

1.3 通用操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 查看资源列表
kubectl get <resource>                    # 如 kubectl get pods
kubectl get <resource> -o wide            # 显示更多信息
kubectl get <resource> -o yaml            # 输出 YAML 格式
kubectl get <resource> -o json            # 输出 JSON 格式
kubectl get <resource> -o name            # 只显示资源名
kubectl get <resource> --show-labels      # 显示标签
kubectl get <resource> --sort-by=.metadata.creationTimestamp   # 按创建时间排序

# 查看资源详情
kubectl describe <resource> <name>

# 创建/更新资源
kubectl apply -f manifest.yaml            # 推荐,幂等操作
kubectl apply -f ./manifests/             # 应用目录下所有文件
kubectl apply -f https://url/manifest.yaml  # 从 URL 应用

# 删除资源
kubectl delete -f manifest.yaml           # 按文件删除
kubectl delete pod <pod-name>             # 按名称删除
kubectl delete pod <pod-name> --grace-period=0 --force  # 强制删除(卡住时用)

# 编辑资源
kubectl edit <resource> <name>            # 打开编辑器修改

# 查看资源定义帮助
kubectl explain pod
kubectl explain pod.spec.containers

二、Pod 管理

2.1 查看 Pod

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 列出 Pod
kubectl get pods
kubectl get pods -o wide                  # 显示 IP 和所在节点
kubectl get pods -w                       # 持续监控变化(watch)
kubectl get pods --field-selector status.phase=Running   # 按状态过滤

# 查看所有命名空间的 Pod
kubectl get pods -A

# 按标签筛选
kubectl get pods -l app=nginx
kubectl get pods -l 'app in (nginx, redis)'

# 查看 Pod 详情
kubectl describe pod <pod-name>

# 查看 Pod 的 YAML
kubectl get pod <pod-name> -o yaml

2.2 Pod 生命周期

1
2
3
4
5
6
7
8
Pod 状态:
Pending     — 正在调度或拉取镜像
Running     — 正在运行
Succeeded   — 执行完成(Job/CronJob)
Failed      — 执行失败
Unknown     — 无法获取状态(通常是节点失联)
CrashLoopBackOff — 容器反复崩溃重启
ImagePullBackOff — 镜像拉取失败

2.3 快速创建 Pod

1
2
3
4
5
6
# 用命令行快速创建(临时测试用)
kubectl run nginx --image=nginx:latest
kubectl run busybox --image=busybox --rm -it -- /bin/sh   # 运行后进入,退出自动删除

# 从 YAML 生成(不执行,输出到文件)
kubectl run nginx --image=nginx --dry-run=client -o yaml > pod.yaml

2.4 容器交互

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看容器日志
kubectl logs <pod-name>                          # 查看当前日志
kubectl logs <pod-name> -f                       # 实时跟踪日志
kubectl logs <pod-name> -f --tail=100            # 最后100行,持续跟踪
kubectl logs <pod-name> -c <container-name>      # 指定容器(多容器 Pod)
kubectl logs <pod-name> --previous               # 查看上一次崩溃的日志(排错神器)
kubectl logs <pod-name> --since=1h               # 最近1小时的日志
kubectl logs <pod-name> --since-time="2026-01-01T00:00:00Z"

# 进入容器
kubectl exec -it <pod-name> -- /bin/bash         # 进入容器 shell
kubectl exec -it <pod-name> -- /bin/sh            # 没有 bash 时用 sh
kubectl exec -it <pod-name> -c <container> -- sh  # 指定容器

# 在容器中执行命令(不进入)
kubectl exec <pod-name> -- cat /etc/config/app.conf
kubectl exec <pod-name> -- env                    # 查看环境变量
kubectl exec <pod-name> -- df -h                  # 查看磁盘

# 文件拷贝
kubectl cp <pod-name>:/tmp/file.txt ./file.txt           # 从容器拷贝到本地
kubectl cp ./file.txt <pod-name>:/tmp/file.txt           # 从本地拷贝到容器
kubectl cp ./file.txt <pod-name>:/tmp/ -c <container>    # 指定容器

2.5 端口转发

1
2
3
4
5
# 本地端口转发到 Pod(调试用)
kubectl port-forward <pod-name> 8080:80           # 本地8080 → Pod的80
kubectl port-forward <pod-name> 8080:80 3306:3306  # 同时转发多个端口
kubectl port-forward svc/<service-name> 8080:80    # 转发到 Service
kubectl port-forward deploy/<deploy-name> 8080:80  # 转发到 Deployment

三、工作负载管理

3.1 Deployment

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 查看 Deployment
kubectl get deployments
kubectl get deploy

# 创建 Deployment
kubectl create deployment nginx --image=nginx:latest --replicas=3
kubectl create deployment nginx --image=nginx --replicas=3 --dry-run=client -o yaml > deploy.yaml

# 扩缩容
kubectl scale deployment nginx --replicas=5

# 更新镜像(触发滚动更新)
kubectl set image deployment/nginx nginx=nginx:1.25
kubectl edit deployment nginx              # 直接编辑

# 查看滚动更新状态
kubectl rollout status deployment/nginx

# 查看更新历史
kubectl rollout history deployment/nginx

# 回滚到上一版本
kubectl rollout undo deployment/nginx

# 回滚到指定版本
kubectl rollout undo deployment/nginx --to-revision=2

# 暂停/恢复滚动更新(用于多次修改一次性生效)
kubectl rollout pause deployment/nginx
kubectl set image deployment/nginx nginx=nginx:1.25
kubectl set resources deployment/nginx -c nginx --limits=memory=512Mi
kubectl rollout resume deployment/nginx

# 查看 ReplicaSet(每个版本对应一个 RS)
kubectl get replicaset

3.2 StatefulSet

1
2
3
4
5
6
7
8
9
# 查看 StatefulSet
kubectl get statefulsets
kubectl get sts

# 扩缩容
kubectl scale statefulset mysql --replicas=3

# 查看详情
kubectl describe statefulset mysql

3.3 DaemonSet

1
2
3
4
5
6
# 查看 DaemonSet
kubectl get daemonsets
kubectl get ds

# 查看每个节点上的 Pod
kubectl get pods -o wide | grep <daemonset-name>

3.4 Job 和 CronJob

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查看 Job
kubectl get jobs

# 查看 CronJob
kubectl get cronjobs

# 手动触发 CronJob
kubectl create job --from=cronjob/<cronjob-name> <job-name>

# 删除 Job
kubectl delete job <job-name>

四、服务与网络

4.1 Service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 查看 Service
kubectl get services
kubectl get svc

# 查看 Service 详情(查看 Endpoints)
kubectl describe svc <service-name>

# 查看 Endpoints
kubectl get endpoints <service-name>

# 暴露 Deployment 为 Service
kubectl expose deployment nginx --port=80 --target-port=80 --type=ClusterIP
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort
kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancer

# 常用 Service 类型:
# ClusterIP     — 集群内部访问(默认)
# NodePort      — 通过节点端口外部访问(30000-32767)
# LoadBalancer  — 云厂商提供的负载均衡器
# ExternalName  — 映射到外部 DNS 名

4.2 Ingress

1
2
3
4
5
6
# 查看 Ingress
kubectl get ingress
kubectl get ing

# 查看 Ingress 详情
kubectl describe ingress <ingress-name>

4.3 网络诊断

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 临时启动一个网络调试 Pod
kubectl run debug --image=busybox --rm -it --restart=Never -- sh

# 在调试 Pod 中测试 DNS
nslookup <service-name>
nslookup <service-name>.<namespace>.svc.cluster.local

# 测试 Service 连通性
wget -qO- http://<service-name>:<port>
curl http://<service-name>:<port>

# 查看集群 DNS 配置
kubectl get configmap coredns -n kube-system

五、配置与存储

5.1 ConfigMap

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 从字面量创建
kubectl create configmap app-config --from-literal=DB_HOST=mysql --from-literal=DB_PORT=3306

# 从文件创建
kubectl create configmap app-config --from-file=config.properties

# 从目录创建(目录下每个文件变成一个 key)
kubectl create configmap app-config --from-file=./config/

# 查看 ConfigMap
kubectl get configmaps
kubectl get cm
kubectl describe configmap app-config

5.2 Secret

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 创建 Secret
kubectl create secret generic db-secret --from-literal=username=admin --from-literal=password='P@ssw0rd'

# 从文件创建
kubectl create secret generic tls-secret --from-file=tls.crt=./cert.pem --from-file=tls.key=./key.pem

# 查看 Secret(内容是 base64 编码的)
kubectl get secrets
kubectl describe secret <secret-name>

# 解码查看 Secret 内容
kubectl get secret <secret-name> -o jsonpath='{.data.password}' | base64 --decode

5.3 PV 和 PVC

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 查看持久卷
kubectl get persistentvolumes
kubectl get pv

# 查看持久卷声明
kubectl get persistentvolumeclaims
kubectl get pvc

# 查看 PVC 绑定状态
kubectl get pvc -o wide

# 查看 PV 详情
kubectl describe pv <pv-name>
kubectl describe pvc <pvc-name>

六、排错调试

6.1 排查流程

1
2
3
4
5
Pod 一直 Pending       → kubectl describe pod 查看 Events,通常是资源不足
Pod 一直 CrashLoopBackOff → kubectl logs --previous 查看上次崩溃日志
Pod ImagePullBackOff   → 检查镜像名和镜像仓库权限
Service 无法访问       → 检查 Endpoints 是否有 Pod,标签是否匹配
Pod 间无法通信         → 检查 NetworkPolicy,检查 DNS 解析

6.2 常用排错命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看 Pod 事件(排错第一步)
kubectl describe pod <pod-name> | grep -A 20 Events

# 查看 Pod 状态和重启次数
kubectl get pods -o wide

# 查看容器日志
kubectl logs <pod-name> --previous              # 上次崩溃的日志
kubectl logs <pod-name> -c <container> -f       # 指定容器,实时跟踪

# 进入容器排查
kubectl exec -it <pod-name> -- sh

# 查看 Pod 失败原因
kubectl get pod <pod-name> -o jsonpath='{.status.conditions[?(@.type=="Ready")].message}'

# 查看节点事件
kubectl get events --sort-by='.lastTimestamp'
kubectl get events --field-selector involvedObject.name=<pod-name>

# 查看 API 资源消耗
kubectl get --raw /metrics

6.3 资源使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查看节点资源使用(需要 metrics-server)
kubectl top nodes

# 查看 Pod 资源使用
kubectl top pods
kubectl top pods -n <namespace>
kubectl top pods --sort-by=memory              # 按内存排序
kubectl top pods --sort-by=cpu                 # 按 CPU 排序

# 安装 metrics-server(如果 top 命令报错)
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

七、标签与选择器

7.1 标签操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 查看标签
kubectl get pods --show-labels

# 添加标签
kubectl label pod <pod-name> env=prod

# 修改标签(覆盖已有值)
kubectl label pod <pod-name> env=staging --overwrite

# 删除标签
kubectl label pod <pod-name> env-

# 按标签筛选
kubectl get pods -l app=nginx
kubectl get pods -l 'tier in (frontend,backend)'
kubectl get pods -l 'env!=debug'
kubectl get pods -l 'version in (v1, v2),app=nginx'

7.2 注解

1
2
3
4
5
6
7
8
# 添加注解
kubectl annotate pod <pod-name> description="测试 Pod"

# 查看注解
kubectl describe pod <pod-name> | grep -A 5 Annotations

# 删除注解
kubectl annotate pod <pod-name> description-

八、集群运维

8.1 节点管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 查看节点详情
kubectl describe node <node-name>

# 节点资源使用
kubectl top nodes

# 标记节点为不可调度(维护前操作)
kubectl cordon <node-name>

# 恢复节点调度
kubectl uncordon <node-name>

# 驱逐节点上的 Pod(维护用)
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

# 查看节点标签
kubectl get nodes --show-labels

# 给节点打标签(用于调度)
kubectl label node <node-name> disktype=ssd

8.2 集群资源

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 查看 API 资源类型
kubectl api-resources

# 查看 API 版本
kubectl api-versions

# 查看所有资源(包括 CRD)
kubectl get all -A

# 查看集群组件状态
kubectl get componentstatuses
kubectl get cs

8.3 RBAC

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查看角色
kubectl get roles
kubectl get clusterroles

# 查看角色绑定
kubectl get rolebindings
kubectl get clusterrolebindings

# 查看角色详情
kubectl describe role <role-name>
kubectl describe clusterrole <clusterrole-name>

九、常用组合命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 快速查看所有命名空间的 Pod 状态(排除 Running 的)
kubectl get pods -A --field-selector=status.phase!=Running

# 查看 CrashLoopBackOff 的 Pod
kubectl get pods -A | grep -E "CrashLoop|Error|Pending"

# 批量删除 Completed 状态的 Pod
kubectl get pods -A --field-selector=status.phase=Succeeded -o json | \
  kubectl delete -f -

# 批量删除 Evicted 状态的 Pod
kubectl get pods -A | grep Evicted | awk '{print $2 " --namespace=" $1}' | xargs -n 2 kubectl delete pod

# 查看 Deployment 的 Pod 模板镜像版本
kubectl get deployment <name> -o jsonpath='{.spec.template.spec.containers[*].image}'

# 查看所有 Deployment 的镜像版本
kubectl get deployments -A -o custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name,IMAGES:.spec.template.spec.containers[*].image'

# 快速导出资源定义(去掉集群特有字段)
kubectl get <resource> <name> -o yaml | kubectl neat

# 查看资源配额
kubectl describe resourcequota -n <namespace>

# 查看限制范围
kubectl describe limitrange -n <namespace>

十、kubectl 命令速查

按场景选命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
查状态    → kubectl get pods/svc/deploy -A
查日志    → kubectl logs <pod> -f --tail=100
查原因    → kubectl describe pod <pod>
进容器    → kubectl exec -it <pod> -- sh
调端口    → kubectl port-forward <pod> 8080:80
更新镜像  → kubectl set image deploy/<name> <container>=<image>
扩缩容    → kubectl scale deploy <name> --replicas=5
回滚      → kubectl rollout undo deploy/<name>
看资源    → kubectl top pods/nodes
节点维护  → kubectl drain <node> --ignore-daemonsets

输出格式

1
2
3
4
5
-o wide            # 更多列(IP、节点等)
-o yaml            # YAML 格式
-o json            # JSON 格式
-o name            # 只显示资源名
-o custom-columns  # 自定义列

常用简写

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
po/pods           → pod
svc/services      → service
deploy/deployments → deployment
sts/statefulsets  → statefulset
ds/daemonsets     → daemonset
cm/configmaps     → configmap
sec/secrets       → secret
ns/namespaces     → namespace
pv/persistentvolumes → persistentvolume
pvc/persistentvolumeclaims → persistentvolumeclaim
ing/ingress       → ingress
no/nodes          → node