Kubectl 速查手册

This article is extracted from the chat log with AI. Please identify it with caution.

AI 协助说明: 本页由 Codex 协助核验和修复站内链接;正文的技术事实和适用范围未因本次修改而改变,仍以文中来源及当前官方文档为准。

下面是一份偏“速查手册”风格的 kubectl 常用命令大全,尽量按功能分类,并给出大量可直接参考执行的命令示例。为了便于阅读,示例统一使用一些通用占位符,如 my-namespace、my-pod、my-deploy、app=myapp 等。

提示:所有命令默认使用当前 kubeconfig 的当前 context 和 namespace,除非显式用 -n、–namespace 或 –context 指定。


1. 基础与配置相关命令#

1.1 查看与切换 kubeconfig / context / cluster / namespace / user#

  1. 查看当前配置的集群信息(类似 kubectl 的“总览”)
kubectl config view

查看 kubeconfig 文件中所有集群、用户、context 等信息。

kubectl config view --minify

只显示当前 context 的配置,更精简。

  1. 查看 / 设置当前 context
kubectl config current-context

显示当前正在使用的 context 名称。

kubectl config get-contexts

列出所有 context,包含 CLUSTER / AUTHINFO / NAMESPACE 等信息。

kubectl config use-context my-context

切换当前 context 到 my-context。

  1. 设置/修改默认 namespace、cluster、user
kubectl config set-context my-context --namespace=my-namespace

将 context my-context 默认 namespace 设置为 my-namespace。

kubectl config set-context my-context --cluster=my-cluster --user=my-user

修改 context my-context 所使用的 cluster 和 user。

  1. 切换 kubeconfig(多集群场景)
export KUBECONFIG=~/.kube/config:~/.kube/config-prod
kubectl config get-contexts

设置 KUBECONFIG 环境变量,合并多个 config 文件后再查看 context。

kubectl --kubeconfig=/path/to/other-config config get-contexts

指定使用另外一个 kubeconfig 文件执行命令。

1.2 查看版本、集群信息#

  1. 查看客户端/服务端版本
kubectl version

显示 kubectl 客户端和服务器端(apiserver)的版本信息。

kubectl version --short

以更简洁的形式显示版本号。

  1. 查看集群信息
kubectl cluster-info

显示 Kubernetes master 和核心服务的访问地址。

kubectl cluster-info dump > cluster-dump.txt

导出集群的一些诊断信息到文件,排障时有用。

  1. 查看当前集群支持的 API
kubectl api-versions
kubectl api-resources

前者列出 API 版本;后者列出可操作的资源类型、短名称和是否属于 namespace,可在编写或排查资源清单时快速确认拼写。

1.3 命令自动补全与别名#

  1. 为 bash 启用 kubectl 自动补全
source <(kubectl completion bash)

在当前 shell 会话启用自动补全(临时)。

echo "source <(kubectl completion bash)" >> ~/.bashrc

永久启用 bash 的 kubectl 补全。

  1. 为 zsh 启用 kubectl 自动补全
source <(kubectl completion zsh)

在 zsh 中启用自动补全。

  1. 为 fish 启用 kubectl 自动补全
kubectl completion fish | source
  1. 配合 alias 使用补全
alias k=kubectl
complete -F __start_kubectl k

设置 k 为 kubectl 的别名,并启用自动补全。

1.4 常用全局参数示例#

  • 指定 namespace:
kubectl get pods -n my-namespace
  • 所有 namespace:
kubectl get pods -A
# 等价于
kubectl get pods --all-namespaces
  • 指定 context:
kubectl --context=my-context get svc
  • 输出格式:
kubectl get pods -o wide
kubectl get pods -o yaml
kubectl get pods -o json

2. 资源查看命令(GET / DESCRIBE / EXPLAIN)#

2.1 通用:kubectl get#

  1. 查看某类资源列表(当前 namespace)
kubectl get pods

查看当前 namespace 下的所有 Pod。

kubectl get deployments
kubectl get svc
kubectl get ingress
kubectl get configmaps
kubectl get secrets

查看 Deployment、Service、Ingress、ConfigMap、Secret 列表。

kubectl get all

快速查看当前 namespace 中的一组常见工作负载与 Service;它并不包含所有 Kubernetes 资源,排查时仍应按需查询 ConfigMap、Secret、Ingress、NetworkPolicy 等对象。

  1. 所有 namespace
kubectl get pods -A
kubectl get svc -A

查看所有命名空间中的 Pod、Service。

  1. 获取单个资源详情(概览格式)
kubectl get pod my-pod
kubectl get deploy my-deploy

快速查看单个资源的状态和一些关键字段。

  1. 使用标签选择器(-l / –selector)
kubectl get pods -l app=myapp
kubectl get svc -l env=prod

只查看匹配指定 label 的资源。

  1. 使用输出选项
kubectl get pods -o wide

显示 Pod 所在节点、IP 等更多信息。

kubectl get deploy my-deploy -o yaml
kubectl get svc my-svc -o json

以 YAML / JSON 格式输出完整资源定义(适合导出修改)。

  1. 按资源类型和名称混合查询
kubectl get pod/my-pod svc/my-svc deploy/my-deploy

一次查看多个不同类型的资源。

2.2 kubectl describe:查看资源详细状态(事件、条件等)#

  1. describe Pod
kubectl describe pod my-pod
kubectl describe pod my-pod -n my-namespace

显示 Pod 的详细信息、调度事件、容器状态等(排障必备)。

  1. describe Deployment / Service / Node 等
kubectl describe deploy my-deploy
kubectl describe svc my-svc
kubectl describe node my-node
kubectl describe ingress my-ingress
kubectl describe configmap my-config
kubectl describe secret my-secret

查看指定资源的详细信息和事件。

2.3 kubectl explain:查看字段解释(结构说明)#

  1. 查看某资源的字段说明
kubectl explain pod
kubectl explain deployment

查看资源类型的基本结构说明。

  1. 查看嵌套字段
kubectl explain pod.spec
kubectl explain pod.spec.containers
kubectl explain pod.spec.containers.image

快速查询 YAML 中字段的含义和类型(非常有用)。


3. Pod 相关常用命令#

3.1 查看 Pod 状态与明细#

  1. 列出 Pod
kubectl get pods
kubectl get pods -n my-namespace
kubectl get pods -A
  1. 按标签查看
kubectl get pods -l app=myapp
  1. 查看 Pod 的 IP、Node 等信息
kubectl get pods -o wide
  1. 查看特定 Pod 详细信息
kubectl describe pod my-pod

查看调度事件、重启次数、镜像拉取错误等信息。

3.2 查看 Pod 日志:kubectl logs#

  1. 查看单容器 Pod 日志
kubectl logs my-pod

打印 Pod 中默认容器的日志。

  1. 查看多容器 Pod 中指定容器的日志
kubectl logs my-pod -c my-container
  1. 实时滚动查看日志(类似 tail -f)
kubectl logs -f my-pod
kubectl logs -f my-pod -c my-container
  1. 查看之前崩溃容器的上一次实例日志
kubectl logs my-pod --previous
kubectl logs my-pod -c my-container --previous

排查 CrashLoopBackOff 时非常常用。

  1. 限制输出行数、时间范围
kubectl logs my-pod --tail=100
kubectl logs my-pod --since=10m
kubectl logs my-pod --since-time="2024-10-01T10:00:00Z"
  1. 按 label 查看多个 Pod 的日志(需要 kubectl >= 1.14 的 -l 支持)
kubectl logs -l app=myapp
kubectl logs -l app=myapp -f

一次性查看多个 Pod 的聚合日志(注意输出混在一起)。

3.3 进入容器:kubectl exec#

  1. 打开一个交互式 shell
kubectl exec -it my-pod -- /bin/bash
# 或
kubectl exec -it my-pod -- /bin/sh
  1. 指定容器执行命令
kubectl exec -it my-pod -c my-container -- /bin/bash
kubectl exec -it my-pod -c my-container -- env
  1. 非交互执行命令(脚本化)
kubectl exec my-pod -- ls /app
kubectl exec my-pod -- cat /etc/hosts

3.4 端口转发:kubectl port-forward#

临时本地调试可使用 kubectl port-forward。目标类型、权限要求、监听地址和安全边界见 port-forward 命令详解

3.5 Pod 的重启 / 删除 / 强制操作#

注意:Pod 通常由 Deployment 等控制器管理,直接删除 Pod 会被重建,这也是常见“重启”方式。

  1. 删除 Pod(优雅删除)
kubectl delete pod my-pod
kubectl delete pod my-pod -n my-namespace
  1. 强制删除(跳过优雅终止)
kubectl delete pod my-pod --grace-period=0 --force

用于卡在 Terminating 状态的 Pod。

  1. 使用 label 批量删除 Pod
kubectl delete pod -l app=myapp
  1. 通过修改 Deployment 来“重启”Pod(更新 annotation)
kubectl rollout restart deploy my-deploy

触发 Deployment 滚动重启,推荐的“重启”方式。


4. 工作负载管理(Deployment / StatefulSet / DaemonSet)#

4.1 创建与基础管理#

  1. 通过 YAML 文件创建
kubectl apply -f my-deploy.yaml
kubectl create -f my-deploy.yaml

apply 支持幂等更新,create 仅用于新建。

  1. 使用命令行快速创建 Deployment
kubectl create deploy my-deploy --image=nginx:1.25

快速创建一个使用 nginx 镜像的 Deployment。

  1. 通过命令设置副本数(scale)
kubectl scale deploy my-deploy --replicas=5
kubectl scale statefulset my-sts --replicas=3

横向扩缩容 Deployment 或 StatefulSet。

  1. 查看 Deployment、StatefulSet、DaemonSet 列表
kubectl get deploy
kubectl get statefulset
kubectl get daemonset
kubectl get rs   # ReplicaSet

4.2 滚动更新与回滚:kubectl rollout/rollout history#

  1. 查看 Deployment 的 rollout 状态
kubectl rollout status deploy my-deploy

查看部署是否成功完成滚动更新。

  1. 查看历史版本(revision)
kubectl rollout history deploy my-deploy

列出 Deployment 的历史 revision。

kubectl rollout history deploy my-deploy --revision=3

查看指定 revision 的详细变更。

  1. 回滚到上一个版本
kubectl rollout undo deploy my-deploy

将 Deployment 回滚到上一个 revision。

  1. 回滚到指定 revision
kubectl rollout undo deploy my-deploy --to-revision=3
  1. 暂停 / 恢复滚动更新(适用于分步更新 spec)
kubectl rollout pause deploy my-deploy
# 修改 Deployment 的 YAML(镜像等)
kubectl rollout resume deploy my-deploy

4.3 查看底层 ReplicaSet / Revision#

  1. 查看 Deployment 对应的 ReplicaSet
kubectl get rs -l app=myapp

由 Deployment 管理的 RS 通常带有相同的 label 和 revision 注解。

kubectl describe rs my-deploy-xxxxx

查看 RS 的详细信息、revision 等。

  1. 查看 StatefulSet 的 Pod 排列
kubectl get pods -l app=my-sts-app -o wide

StatefulSet 的 Pod 通常命名为 my-sts-0、my-sts-1 等。

4.4 其他工作负载示例#

  1. DaemonSet:每个节点一个 Pod
kubectl get ds -A
kubectl describe ds my-daemonset -n kube-system
  1. Job / CronJob
kubectl get jobs
kubectl get cronjob
kubectl describe job my-job
kubectl describe cronjob my-cronjob

5. 配置与资源管理(apply / create / delete / patch 等)#

5.1 apply / create / delete / edit / replace#

  1. apply:推荐的主要资源管理命令
kubectl apply -f my-deploy.yaml
kubectl apply -f ./manifests/

对单文件或目录下所有 YAML 文件进行创建/更新。

kubectl apply -R -f ./manifests/

递归应用子目录。

  1. create:仅创建
kubectl create -f my-configmap.yaml
  1. delete:删除资源
kubectl delete -f my-deploy.yaml
kubectl delete pod my-pod
kubectl delete deploy my-deploy
kubectl delete ns my-namespace
  1. edit:在线编辑资源
kubectl edit deploy my-deploy
kubectl edit svc my-svc

会打开默认编辑器(如 vi),修改后保存即可自动 apply。

  1. replace:用新内容完全替换
kubectl replace -f my-deploy.yaml

注意:要确保 resourceVersion 一致,否则会报错。

5.2 patch:局部更新#

  1. 使用 JSON patch
kubectl patch deploy my-deploy -p '{"spec":{"replicas":5}}'

快速调整副本数。

  1. 使用 strategic merge patch
kubectl patch deploy my-deploy -p \
'{"spec":{"template":{"spec":{"containers":[{"name":"my-container","image":"nginx:1.25"}]}}}}'
  1. 使用 –type merge / json / strategic 控制 patch 方式
kubectl patch deploy my-deploy --type=merge -p '{"spec":{"replicas":3}}'

5.3 ConfigMap / Secret 管理#

  1. 通过文件或字面值创建 ConfigMap
kubectl create configmap my-config --from-literal=KEY=VALUE
kubectl create configmap my-config --from-file=config.properties
kubectl create configmap my-config --from-env-file=.env
  1. 查看 ConfigMap
kubectl get configmap
kubectl describe configmap my-config
kubectl get configmap my-config -o yaml
  1. 创建 Secret(通用类型)
kubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=123456
  1. 通过文件创建 Secret
kubectl create secret generic my-cert --from-file=cert.pem --from-file=key.pem
  1. 查看 Secret(注意数据是 base64 编码)
kubectl get secret
kubectl describe secret my-secret
kubectl get secret my-secret -o yaml
  1. 解码 Secret 数据(配合 base64 使用)
kubectl get secret my-secret -o jsonpath='{.data.username}' | base64 -d
  1. ConfigMap / Secret 常见挂载方式(命令视角)
  • 以环境变量形式引用:通常在 Pod spec 中配置,命令上多用 edit/get/apply 来修改:
kubectl edit deploy my-deploy
# 在 spec.template.spec.containers.env 中添加:
# - name: MY_KEY
#   valueFrom:
#     configMapKeyRef:
#       name: my-config
#       key: KEY
  • 以 volume 方式挂载:
kubectl edit deploy my-deploy
# 在 spec.template.spec.volumes 中添加 configMap/secret 类型 volume
# 在 spec.template.spec.containers.volumeMounts 中挂载到路径
  1. 创建 TLS Secret
kubectl create secret tls my-tls \
  --cert=path/to/cert.pem \
  --key=path/to/key.pem

常用于把已有证书交给 Ingress Controller 或应用引用;私钥文件不应提交到版本库。

5.4 使用 -f 目录或多文件#

  1. 一次性应用整个目录
kubectl apply -f ./k8s/
  1. 多个文件一起操作
kubectl delete -f pod.yaml -f svc.yaml -f deploy.yaml

6. Service / Ingress / 网络相关命令#

6.1 Service、EndpointSlice 与后端查看#

  1. 查看 Service 列表
kubectl get svc
kubectl get svc -A
kubectl get svc -n my-namespace
  1. 查看 Service 详情
kubectl describe svc my-svc

包括 selector、端口映射、关联的 Endpoints 等。

  1. 查看 EndpointSlice(推荐)与兼容的 Endpoints
kubectl get endpointslice -l kubernetes.io/service-name=my-svc
kubectl get endpointslice -l kubernetes.io/service-name=my-svc -o wide

EndpointSlice 是当前 Kubernetes 用于记录 Service 后端的主要对象。

kubectl get endpoints
kubectl get endpoints my-svc
kubectl describe endpoints my-svc

旧集群或兼容性排查仍可能需要查看 Endpoints。

  1. 查看某个 Service 的 YAML
kubectl get svc my-svc -o yaml

6.2 排查 Service 访问问题常用命令#

  1. 检查 Service 是否存在、类型是否正确
kubectl get svc my-svc -o wide
kubectl describe svc my-svc
  1. 检查 Service 的 selector 与 Pod 标签是否匹配
kubectl get pods -l app=myapp -o wide
kubectl describe svc my-svc | grep Selector -A 5
  1. 检查 Endpoints 是否有后端 Pod
kubectl get endpointslice -l kubernetes.io/service-name=my-svc -o wide

如果没有地址,很可能 selector 不匹配或 Pod 未 Ready。

  1. 在 Pod 内使用 curl 访问 Service
kubectl exec -it my-pod -- curl -sS http://my-svc:80/health
  1. 使用临时 Pod 进行网络测试(如果支持 kubectl run)
kubectl run nettest --rm -it --image=busybox --restart=Never -- /bin/sh
# 然后在 Pod 中执行:
# wget -qO- http://my-svc:80

6.3 Ingress 的查看与排查#

  1. 查看 Ingress 列表
kubectl get ingress
kubectl get ing -A
  1. 查看 Ingress 详情
kubectl describe ingress my-ingress
kubectl get ingress my-ingress -o yaml

检查规则、主机名、路径、TLS 配置等。

  1. 检查 Ingress Controller 是否正常
kubectl get pods -n ingress-nginx
kubectl describe pod -n ingress-nginx <ingress-controller-pod>
  1. 查看网络策略
kubectl get networkpolicy -A
kubectl describe networkpolicy -n my-namespace <policy-name>

Service 后端连通性异常时,应同时确认 NetworkPolicy 没有拦截流量。


7. Namespace / Node / 集群级命令#

7.1 Namespace 管理#

  1. 查看 Namespace 列表
kubectl get ns
kubectl get namespaces
  1. 创建 Namespace
kubectl create namespace my-namespace
  1. 删除 Namespace
kubectl delete namespace my-namespace

注意:删除会移除该命名空间下的所有资源。

  1. 切换当前 context 的默认 namespace(参见 1.1)
kubectl config set-context --current --namespace=my-namespace

7.2 Node 信息查看与维护#

  1. 查看所有节点
kubectl get nodes
kubectl get nodes -o wide
  1. 查看节点详细信息
kubectl describe node my-node

包括容量、分配资源、标签、污点、Pod 列表等。

  1. 给节点打标签
kubectl label node my-node env=prod
kubectl label node my-node role=worker --overwrite

用于调度约束等场景。

  1. 给节点添加 taint(污点)
kubectl taint nodes my-node key=value:NoSchedule
kubectl taint nodes my-node key=value:NoSchedule-

后缀 - 表示移除 taint。

  1. cordon / drain / uncordon
kubectl cordon my-node

将节点标记为不可调度(不会影响已有 Pod)。

kubectl drain my-node --ignore-daemonsets --delete-emptydir-data

驱逐节点上所有非 DaemonSet Pod,常用于维护/下线节点。

kubectl uncordon my-node

恢复节点可调度状态。

7.3 集群基础信息与系统组件#

  1. 查看 kube-system 下的 Pod
kubectl get pods -n kube-system
kubectl get pods -n kube-system -o wide
  1. 查看集群组件状态(某些发行版提供)
kubectl get componentstatuses

注意:在一些新版本中该 API 已弃用,仅作参考。

  1. 查看所有命名空间下的关键资源
kubectl get pods -A
kubectl get svc -A
kubectl get deploy -A
  1. 查看存储类与 API Server 就绪状态
kubectl get storageclass
kubectl get --raw='/readyz?verbose'

第二条命令用于检查当前 API Server 的就绪检查端点;它需要相应 API 访问权限。


8. 调试与排障常用命令#

8.1 describe / logs / events#

  1. describe 资源(排查首选)
kubectl describe pod my-pod
kubectl describe deploy my-deploy
kubectl describe node my-node

查看事件、条件、错误消息。

  1. logs(见第 3 部分)
kubectl logs my-pod
kubectl logs my-pod --previous
  1. 查看集群/namespace 事件
kubectl get events
kubectl get events -n my-namespace

按时间倒序:

kubectl get events -A --sort-by='.lastTimestamp'

8.2 kubectl debug(适用支持该命令的版本)#

  1. debug Pod:创建临时 debug 容器
kubectl debug pod/my-pod -it --image=busybox --target=my-container -- /bin/sh

在目标 Pod 上附加一个临时容器,用于调试。

  1. 创建 ephemeral-container(临时容器)
kubectl debug my-pod -it --image=busybox -- /bin/sh
  1. debug Node:创建宿主机命名空间的临时 Pod(仅某些环境支持)
kubectl debug node/my-node -it --image=busybox
  1. 在本地与 Pod 之间复制文件
kubectl cp ./local-file.txt my-pod:/tmp/local-file.txt
kubectl cp my-pod:/tmp/diagnostic.log ./diagnostic.log

多容器 Pod 需按需加 -c my-containerkubectl cp 依赖目标镜像中的归档工具,失败时可改用 kubectl exec 或调试容器。

8.3 top 命令:资源使用情况#

前提:集群已部署 metrics-server。

  1. 查看 Pod 的 CPU/内存使用
kubectl top pods
kubectl top pods -A
kubectl top pods -n my-namespace
  1. 查看 Node 的资源使用
kubectl top nodes
  1. 持续观察资源使用
watch kubectl top pods

适合在发布或排障期间观察短时间内的资源变化。

8.4 label selector / field selector / watch 帮助排查#

  1. label selector(-l / –selector)
kubectl get pods -l app=myapp
kubectl get svc -l env=prod
  1. field selector(–field-selector)
kubectl get pods --field-selector=status.phase=Running
kubectl get pods -A --field-selector=spec.nodeName=my-node
kubectl get pods -A --field-selector=status.phase=Failed

按字段筛选资源。

  1. –watch / -w:持续观察资源变化
kubectl get pods -w
kubectl get pods -n my-namespace -w
  1. watch + selector 综合使用
kubectl get pods -l app=myapp -w

9. 高级用法与技巧#

9.1 label、annotate:给资源打标签、注解#

  1. 添加/修改标签
kubectl label pod my-pod env=prod
kubectl label deploy my-deploy app=myapp --overwrite
  1. 删除标签
kubectl label pod my-pod env-
  1. 添加注解
kubectl annotate pod my-pod description="my test pod"
kubectl annotate deploy my-deploy release="2024-11-18" --overwrite

9.2 使用 jsonpath / custom-columns 高级输出#

  1. jsonpath 输出示例
kubectl get pods -o jsonpath='{.items[*].metadata.name}'

输出当前 namespace 所有 Pod 名称。

kubectl get pods -l app=myapp -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.phase}{"\n"}{end}'

以“PodName 阶段”形式输出。

kubectl get svc my-svc -o jsonpath='{.spec.clusterIP}'

获取 Service 的 ClusterIP。

  1. custom-columns 输出示例
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName
kubectl get nodes -o custom-columns=NAME:.metadata.name,ROLES:.metadata.labels.'kubernetes\.io/role',CPU:.status.capacity.cpu

9.3 导出 YAML 模板用于修改#

  1. 导出资源 YAML 到文件
kubectl get deploy my-deploy -o yaml > my-deploy.yaml
kubectl get svc my-svc -o yaml > my-svc.yaml
  1. 删除多余字段后 apply 到新环境
# 手动编辑 my-deploy.yaml,删除 status 等字段
kubectl apply -f my-deploy.yaml

9.4 常用组合命令(与 grep、awk 等)#

  1. 对 get pods 输出进行过滤
kubectl get pods | grep my-app
  1. 统计某种状态的 Pod 数量
kubectl get pods --no-headers | awk '{print $3}' | sort | uniq -c

统计各个状态(Running、Pending 等)的数量。

  1. 批量删除特定状态的 Pod(慎用)
kubectl get pods --no-headers | grep Evicted | awk '{print $1}' | xargs kubectl delete pod
  1. 使用 xargs 对多个资源执行命令(某些 shell 环境)
kubectl get pods -l app=myapp -o name | xargs kubectl delete

10. 小场景示例:排查某个 Pod 启动失败#

假设 Pod 名为 my-pod,namespace 为 my-namespace,现象是 Pod 一直处于 CrashLoopBackOff 或 ContainerCreating。下面给出一条可能的排查命令流程:

  1. 首先确认 Pod 状态与基本信息
kubectl get pods -n my-namespace
kubectl get pod my-pod -n my-namespace -o wide

确认 Pod 是否真的是该 Pod 以及在哪个节点上。

  1. 查看 Pod 的详细描述信息(重点看 Events)
kubectl describe pod my-pod -n my-namespace
  • 如果是镜像拉取失败(ImagePullBackOff),会在 Events 中看到。
  • 如果是调度问题(节点资源不足、污点等),也会在 Events 中体现。
  1. 如果 Pod 有容器启动但随即退出(CrashLoopBackOff),查看日志
kubectl logs my-pod -n my-namespace
# 多容器 Pod:
kubectl logs my-pod -c my-container -n my-namespace
# 查看上一实例的日志:
kubectl logs my-pod -c my-container -n my-namespace --previous

根据日志确认是否是应用配置错误、连接失败等。

  1. 如果怀疑配置问题(如 ConfigMap/Secret)
kubectl get configmap -n my-namespace
kubectl get secret -n my-namespace
kubectl get deploy -n my-namespace
kubectl describe deploy my-deploy -n my-namespace

确认挂载的 ConfigMap/Secret 是否存在,env/volume 配置是否正确。

  1. 如果怀疑是节点/资源问题
kubectl describe pod my-pod -n my-namespace
kubectl describe node my-node
kubectl top nodes
kubectl top pods -n my-namespace

检查节点是否资源耗尽、是否有 taint、Pod 是否被 OOMKilled 等。

  1. 使用 kubectl debug(如果支持)进入调试容器
kubectl debug my-pod -n my-namespace -it --image=busybox -- /bin/sh

在 Pod 的网络/挂载环境中执行命令测试(如 ping、curl、ls 等)。

  1. 需要临时修改镜像或环境变量时
kubectl edit deploy my-deploy -n my-namespace
# 或导出-修改-apply
kubectl get deploy my-deploy -n my-namespace -o yaml > my-deploy.yaml
# 编辑后
kubectl apply -f my-deploy.yaml
  1. 修改后观察新 Pod 创建与状态
kubectl get pods -n my-namespace -w

通过上述这套命令流程,通常可以较系统地定位 Pod 启动失败的原因。


以上就是一份较为系统的 “kubectl 常用命令大全 / 速查手册”。在日常工作中,建议优先熟练掌握:

  • get / describe / logs / exec
  • apply / edit / delete / scale / rollout
  • label / annotate / jsonpath / -o yaml 等
  • top / events / debug / watch 等

基本可以覆盖 80% 以上的日常 Kubernetes 运维与排障场景。

本文共 6813 字,创建于 Nov 18, 2025

相关标签: Kubernetes, Linux, DevOps, Cloud, ByAI, ChatGPT