开发者工具 · 命令速查

Kubernetes 速查

kubectl 全命令 + 资源对象

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 66 次使用
Kubernetes · kubectl Cheatsheet
命 令 分 类基础 · Pod · 工作负载 · 网络 · 配置 · 存储 · 上下文 · 集群 · RBAC · 排查 · YAML 模板
命 令 全 表Gallery · 点卡片看语法 / 选项 / 场景 / 示例
点选左侧任一命令
查看 语法 / 常用选项 / 中文说明 / 典型场景 · 示例代码块 · 相关命令
常 用 组 合Combos · 几个高频运维场景速查(点命令可复制)
就绪 · 含分类速查 + 常用选项 + 中文说明 + 典型场景 + 示例 + 资源 YAML 模板 + 危险操作朱砂警示 · 全程浏览器本地
第一节

关于本工具

About

深夜排障,`kubectl get pods` 后对着几十个 YAML 字段愣神——这个资源到底支持哪些 `spec` 子命令?这个工具把 kubectl 全部命令和 Kubernetes 内置资源对象的字段结构,按层级摊开、可检索。输入一个资源类型或命令关键词,直接看到完整子命令列表、必要参数和字段路径。所有数据随页面加载,查询在本地浏览器完成,不发送任何请求到服务器。

使用场景

排查Pod CrashLoopBackOff

凌晨两点,线上服务 Pod 反复 CrashLoopBackOff,开发在群里发来一段模糊的报错日志。运维通过本工具快速查清 kubectl describe pod 与 kubectl logs --previous 的完整参数,准确拿到 Pod 退出前的最后一条日志和事件上下文。对比后发现是 ConfigMap 中数据库连接串末尾多了一个空格,导致应用初始化失败。从收到告警到定位根因,全程不到 3 分钟。

迁移命名空间资源

公司进行多集群合并,需要把旧集群 staging 命名空间下的所有 Deployment 和 Service 迁移到新集群。手动写 YAML 容易遗漏 labels 或 selector 字段。运维用本工具查阅 kubectl get 的 -o yaml 输出格式,配合 --export 参数导出完整资源定义,再通过 kubectl apply -f 批量导入新集群。迁移 12 个服务只用了 15 分钟,且 0 遗漏。

调试Service不通

新上线的微服务通过 ClusterIP 访问另一个服务一直超时,开发怀疑是 DNS 解析或网络策略问题。SRE 用本工具查到 kubectl run -it --rm --image=busybox --restart=Never -- nslookup <service-name> 的完整命令,启动一个临时 Pod 进入集群网络空间测试。结果发现新服务所在命名空间与目标 Service 不在同一个命名空间,补上 <service-name>.<namespace>.svc.cluster.local 全域名后连通。

滚动更新回滚

灰度发布新版本后,监控发现 5xx 错误率从 0.1% 飙升到 8%。需要立即回滚到上一个稳定版本,但开发记不清上一个镜像版本号。运维用本工具查到 kubectl rollout history deployment/<name> 可以查看历史版本号,再通过 kubectl rollout undo deployment/<name> --to-revision=<N> 精确回滚到指定版本。整个回滚操作 10 秒完成,业务恢复后复盘发现是新增的缓存逻辑导致内存泄漏。

清理残留Evicted Pod

集群节点因磁盘压力触发了 Pod 驱逐,虽然节点已恢复,但留下了上百个 Evicted 状态的 Pod 残骸,导致 kubectl get pods 输出混乱,干扰日常巡检。运维用本工具查到 kubectl delete pods --field-selector=status.phase=Failed 的精准过滤语法,一条命令清理掉所有 Evicted Pod。清理后集群列表恢复整洁,后续巡检效率提升 60%。

第二节

使用指南

Getting Started

使用步骤

  1. 1在搜索框输入 kubectl 命令关键词(如 `get pods`),下方列表实时过滤匹配的命令与资源对象
  2. 2点击任意命令条目,右侧展开该命令的完整语法、可用参数及示例输出
  3. 3在「资源对象」标签页选择 Pod / Service / Deployment 等,查看该资源的 YAML 字段说明与常用操作
  4. 4点击命令或示例旁的复制图标,将内容写入剪贴板,粘贴到终端直接使用

输入输出示例

输入输出说明
get podsNAME READY STATUS RESTARTS AGE nginx-6799fc88d8-5x7g2 1/1 Running 0 12d常规:最常用的 kubectl 命令,验证工具返回标准 pod 列表格式
get nodes -o wideNAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION node-1 Ready <none> 45d v1.28.2 10.0.0.1 <none> Ubuntu 22.04 LTS 5.15.0-91-generic常规:带 -o wide 输出额外字段,验证工具支持常见输出选项
get pods --all-namespacesNAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-5d78c9869d-6q9pz 1/1 Running 0 45d kube-system etcd-node-1 1/1 Running 0 45d default nginx-6799fc88d8-5x7g2 1/1 Running 0 12d边界:跨命名空间查询,验证工具正确处理 --all-namespaces 标志
get pods --field-selector=status.phase=RunningNAME READY STATUS RESTARTS AGE nginx-6799fc88d8-5x7g2 1/1 Running 0 12d边界:字段选择器过滤,验证工具支持复杂查询语法
get pods -wNAME READY STATUS RESTARTS AGE nginx-6799fc88d8-5x7g2 1/1 Running 0 12d (持续输出新事件,按 Ctrl+C 退出)边界:watch 模式会阻塞,工具应提示用户该命令非一次性返回
get pods nonexistent-podError from server (NotFound): pods "nonexistent-pod" not found易错:查询不存在的资源,验证工具正确显示标准错误信息而非空结果
get pods --output=json{ "apiVersion": "v1", "items": [ { "apiVersion": "v1", "kind": "Pod", "metadata": { "name": "nginx-6799fc88d8-5x7g2", "namespace": "default", ... }, ... } ], "kind": "List", "metadata": {} }易错:JSON 输出格式冗长,用户常误以为工具会截断;验证工具完整输出或明确提示
describe pod nginx-6799fc88d8-5x7g2Name: nginx-6799fc88d8-5x7g2 Namespace: default Node: node-1/10.0.0.1 Start Time: Mon, 01 Jan 2024 00:00:00 +0000 Labels: app=nginx Annotations: <none> Status: Running IP: 10.1.0.5 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 12d default-scheduler Successfully assigned default/nginx-6799fc88d8-5x7g2 to node-1 Normal Pulled 12d kubelet Container image "nginx:latest" already present on machine Normal Created 12d kubelet Created container nginx Normal Started 12d kubelet Started container nginx易错:describe 输出包含事件时间线,用户常混淆与 get 的区别;验证工具区分两种命令

常见错误对照

1.资源类型缩写与全称混用导致命令不识别

✗ 错误kubectl get deploy -n my-namespace
✓ 修复kubectl get deployments -n my-namespace

kubectl 1.20+ 支持部分缩写(如 deploy→deployments),但某些旧版本或自定义资源缩写未注册时,缩写会报错。建议在脚本或跨环境场景使用全称。

2.忘记指定命名空间,操作了默认 default 空间

✗ 错误kubectl delete pod my-pod
✓ 修复kubectl delete pod my-pod -n production

kubectl 默认使用当前上下文命名空间(通常是 default),不指定 -n 会误删/误查其他空间的资源。生产环境应始终显式指定命名空间。

3.apply 时 YAML 缩进错误导致资源创建失败

✗ 错误apiVersion: v1 kind: Pod metadata: name: test
✓ 修复apiVersion: v1 kind: Pod metadata: name: test

YAML 对缩进敏感,字段名左对齐必须一致。metadata 应与 kind 同级,缩进空格数必须统一(通常 2 空格)。

4.get pods 输出中 STATUS 字段含义理解偏差

✗ 错误认为 CrashLoopBackOff 是 Pod 已停止
✓ 修复CrashLoopBackOff 表示容器反复崩溃重启,kubectl describe pod 可看具体事件

STATUS 显示 CrashLoopBackOff 说明 Pod 仍在运行但容器不断重启,不是终止状态。需查看 logs 或 describe 定位原因。

5.logs 命令未指定容器名,多容器 Pod 报错

✗ 错误kubectl logs my-pod
✓ 修复kubectl logs my-pod -c my-container

Pod 内有多个容器时,kubectl logs 必须用 -c 指定容器名,否则返回错误。单容器 Pod 可省略。

6.exec 进入容器时忘记加 -it,终端无交互

✗ 错误kubectl exec my-pod -- /bin/sh
✓ 修复kubectl exec -it my-pod -- /bin/sh

缺少 -i(stdin 保持打开)和 -t(分配伪终端)会导致无法输入命令,shell 立即退出。交互式调试必须加 -it。

7.port-forward 端口映射方向写反

✗ 错误kubectl port-forward my-pod 8080:80
✓ 修复kubectl port-forward my-pod 8080:80

语法是 `本地端口:容器端口`,但用户常误以为左边是容器端口。实际 8080 是本地监听,80 是容器端口。

8.describe 与 get -o yaml 输出混淆,误改只读字段

✗ 错误kubectl get pod my-pod -o yaml > pod.yaml; 编辑后直接 apply
✓ 修复kubectl get pod my-pod -o yaml --export > pod.yaml (或使用 kubectl edit)

get -o yaml 输出包含 status、metadata.uid 等只读字段,直接 apply 会报冲突。应使用 kubectl edit 或 --export 过滤。

第三节

工作原理

How It Works

核心公式

kubectl <command> [TYPE] [NAME] [flags]

变量说明

  • command操作动词,如 get、describe、apply
  • TYPE资源类型,如 pod、deployment、service
  • NAME资源实例名称,可选
  • flags可选参数,如 -n 指定命名空间

示例

查询 default 命名空间中名为 nginx-pod 的 Pod 详情:kubectl describe pod nginx-pod -n default。命令解析:describe(command)→ pod(TYPE)→ nginx-pod(NAME)→ -n default(flags)。输出包含 Pod 状态、事件、容器日志等字段。

输入命令/资源kubectl get pods本地解析拆分动词+资源查表匹配匹配命令/参数展示速查结果语法/示例/参数模糊匹配未精确命中时推荐近似命令列出相似命令
用户输入 本地处理 输出结果
第五节

常见问题

Q & A
kubectl 命令记不住,这个页面能直接复制粘贴用吗?

可以。每个命令和资源对象定义都做了代码块格式化,点击右侧复制按钮就能直接粘贴到终端。但注意两点:一是如果你的 kubectl 版本低于 1.20,部分新命令(如 `kubectl debug`)可能报错;二是命令中的占位符(如 `{namespace}`)需要替换成实际值,复制后别忘了改。

为什么我查 Deployment 的命令和网上搜到的不一样?

kubectl 版本迭代中部分命令有过变更,比如 `kubectl run` 在旧版用来创建 Deployment,新版默认创建 Pod。本页面基于 Kubernetes 1.28 版本整理,如果你用的是更早版本(如 1.16),个别命令参数可能不兼容。建议先 `kubectl version` 确认服务端版本,再对照本页标注的版本说明使用。

能不能模糊搜索命令?比如我只记得关键词?

页面顶部有搜索框,支持按命令名(如 `get`、`describe`)和资源对象(如 `Pod`、`Ingress`)模糊匹配。但如果你记的是类似“查看日志”这种中文描述,搜不到——因为索引是按 kubectl 实际命令建立的。建议直接用 `kubectl --help` 或本页的“按功能分类”模块定位。

页面里没有 `kubectl apply` 的示例,是不支持吗?

支持的。`kubectl apply` 是声明式管理核心命令,本页在“资源操作”分类下有完整参数说明和 YAML 示例。如果你在页面上没找到,可能是浏览器搜索时没选中“展开所有分组”按钮——默认只展示了常用命令,需要点击分类标题展开才能看到全部条目。

这些命令在 Windows 的 cmd 里也能跑吗?

大部分可以,但注意三点:一是路径分隔符要用反斜杠或双反斜杠(`C:\Users\`);二是引号要用双引号而非单引号(Windows 终端不认单引号);三是管道和重定向符号(`|`、`>`)在 cmd 中行为可能不同,建议用 PowerShell 或 WSL 获得更一致的体验。本页命令默认按 Linux/macOS 写法展示,Windows 用户需要自行调整。

为什么 `kubectl get pods` 显示 No resources found,但我明明部署了?

最常见的原因是 namespace 不对。`kubectl get pods` 默认查当前上下文(context)设置的 namespace,如果你部署时指定了 `-n my-ns`,查询时需要加 `-n my-ns` 或改用 `--all-namespaces`。另一个可能是 Pod 刚创建还在 Pending 状态,等几秒再 `get` 就能看到。

这个页面能离线用吗?没网的时候还能查命令吗?

完全离线可用。本工具是纯前端实现(FE),所有命令数据和资源对象定义都打包在页面本身,不依赖网络请求。首次加载后即使断网,刷新页面也能正常浏览和搜索。建议有网时打开一次,浏览器会自动缓存,之后离线打开即可。

有没有 `kubectl explain` 那种详细字段说明?还是只有命令?

本页侧重命令速查,每个资源对象只列出最常用的字段和典型值(如 `replicas: 3`),不提供 `kubectl explain Pod.spec.containers` 那种逐层展开的完整 schema。如果你需要看字段的校验规则或默认值,建议在终端直接 `kubectl explain --recursive`,本页作为快速回忆的辅助。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭