灯下哥谭 灯下哥谭
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

灯下哥谭

灯还亮着
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 工作笔记

  • 容器与编排

    • kubectl常用命令
      • 集群与上下文
      • Pod 操作
      • Deployment 与 ReplicaSet
      • Service 与网络
      • ConfigMap 与 Secret
      • 资源创建与编辑
      • 故障排查三板斧
      • 常用选项速查
      • 坑与边界
    • Kubernetes核心概念详解:Namespace、Pod、Deployment、PV和PVC
    • Kubernetes之yaml文件详解
    • k8s部署MySQL
    • Kubernetes (k8s) 相关名词详解
    • PV、PVC、StorageClass的区别和联系
    • Docker使用笔记:容器保活、快速起 MySQL、密码管理器部署三件事
    • Browserless 使用笔记:把 Chrome 变成一个可以被并发调用的网络服务
  • Nginx

  • 监控

  • 网络安全

  • 其他

  • Linux笔记
  • 容器与编排
灯下哥谭
2022-03-29
目录

kubectl常用命令原创

本文定位:速查手册。 只收录日常最高频的 kubectl 子命令,供现场对照执行,不展开 K8s 对象原理。想了解资源类型定义与关系,读同目录的《Kubernetes核心概念详解》。

版本说明

本文基于 kubectl v1.20-v1.31 通用语法整理。kubectl 与 API Server 需遵循版本偏差策略:客户端可比服务端新/旧 1 个小版本。超过此范围可能出现字段不识别或行为差异。建议保持 kubectl 版本与集群版本接近。


# 集群与上下文

命令 用途
kubectl cluster-info 查看集群地址与核心服务地址
kubectl version 查看客户端与服务器版本
kubectl config current-context 查看当前上下文
kubectl config get-contexts 列出所有上下文
kubectl config use-context <name> 切换上下文
kubectl config set-context --current --namespace=<ns> 为当前上下文设置默认命名空间

易错点:跨多个集群操作时,忘记确认当前上下文可能导致误操作生产环境。建议在 prompt 中显示当前 context(如 kube-ps1)。


# Pod 操作

命令 用途
kubectl get pods 列出 default 命名空间的 Pod
kubectl get pods -n <ns> -o wide 指定命名空间,显示节点 IP
kubectl describe pod <name> 查看 Pod 详情(事件、状态变更)
kubectl logs <name> 查看 Pod 日志
kubectl logs <name> --previous 查看上次终止容器的日志(崩溃排查)
kubectl logs -f <name> 实时跟踪日志(tail -f 效果)
kubectl logs <name> -c <container> 多容器 Pod 指定容器名
kubectl exec -it <name> -- /bin/sh 进入容器执行交互命令
kubectl cp <pod>:/path /local/path 复制文件从容器到本地
kubectl top pod 查看 Pod CPU/内存使用(需 metrics-server)

批量操作 Pod:

# 删除某标签的全部 Pod
kubectl delete pods -l app=nginx

# 重启 Deployment 下的全部 Pod(触发滚动更新)
kubectl rollout restart deployment/nginx
1
2
3
4
5

# Deployment 与 ReplicaSet

命令 用途
kubectl get deployments 列出 Deployment
kubectl get deployments -n <ns> 指定命名空间
kubectl describe deployment <name> 查看详情(滚动策略、事件)
kubectl scale deployment <name> --replicas=3 调整副本数
kubectl rollout status deployment/<name> 查看滚动更新状态
kubectl rollout history deployment/<name> 查看更新历史
kubectl rollout undo deployment/<name> 回滚到上一版本
kubectl rollout undo deployment/<name> --to-revision=2 回滚到指定版本

易错点:kubectl apply 更新 Deployment 后,Pod 不会立即全部替换。使用 rollout status 确认完成再验证。


# Service 与网络

命令 用途
kubectl get services 列出 Service
kubectl get svc -n <ns> -o wide 显示 ClusterIP/NodePort
kubectl describe svc <name> 查看 endpoints(关联的 Pod IP 列表)
kubectl port-forward svc/<name> 8080:80 本地端口转发到 Service
kubectl port-forward pod/<name> 8080:80 本地端口转发到 Pod

端口转发调试:

# 本地 3306 转发到集群内 mysql 服务的 3306
kubectl port-forward svc/mysql 3306:3306 -n database

# 然后在本地用 mysql 客户端连接 localhost:3306
1
2
3
4

# ConfigMap 与 Secret

命令 用途
kubectl get configmaps 列出 ConfigMap
kubectl get secrets 列出 Secret(值默认不显示)
kubectl create configmap <name> --from-literal=key=value 从命令行创建
kubectl create configmap <name> --from-file=app.conf 从文件创建
kubectl create secret generic <name> --from-literal=pass=123 创建通用 Secret
kubectl create secret tls <name> --cert=cert.pem --key=key.pem 创建 TLS Secret
kubectl describe secret <name> 查看 Secret 键名(不显示值)
kubectl get secret <name> -o jsonpath='{.data.pass}' | base64 -d 解码查看密码

易错点:Secret 的 value 是 base64 编码,但不是加密。任何有 namespace 读权限的人都能解码查看。


# 资源创建与编辑

命令 用途
kubectl apply -f manifest.yaml 根据 YAML 创建/更新资源
kubectl apply -f /path/to/dir/ 应用目录下所有 YAML
kubectl delete -f manifest.yaml 根据 YAML 删除资源
kubectl edit deployment <name> 交互式编辑资源
kubectl get deployment <name> -o yaml 导出 YAML 到 stdout
kubectl diff -f manifest.yaml 预览变更(试运行)

快捷导出:

# 快速导出 Deployment YAML 以便修改
kubectl get deploy nginx -o yaml > nginx-backup.yaml

# 导出时不带集群特定字段(干净导入其他集群)
kubectl get deploy nginx -o yaml | kubectl-neat > nginx-clean.yaml
1
2
3
4
5

# 故障排查三板斧

1. 看事件:

kubectl get events -n <ns> --sort-by='.lastTimestamp'
1

2. 看日志:

kubectl logs <pod> --previous  # 崩溃前日志
kubectl logs <pod> -f         # 实时日志
1
2

3. 进容器:

kubectl exec -it <pod> -- /bin/sh
# 或指定容器
kubectl exec -it <pod> -c <container> -- /bin/sh
1
2
3

# 常用选项速查

选项 含义
-n, --namespace 指定命名空间
-o wide 额外信息(节点、IP)
-o yaml YAML 格式输出
-o json JSON 格式输出
-o jsonpath='...' 提取特定字段
-l, --selector 按标签筛选
--all-namespaces, -A 所有命名空间
--dry-run=client 客户端试运行(不提交)
-w, --watch 持续监视变化

# 坑与边界

1. 权限不足的表现

kubectl get pods 返回成功但列表为空,通常是 RBAC 限制(当前用户无权查看该 namespace),而非真的没 Pod。

2. 端口转发的局限性

kubectl port-forward 通过 API Server 代理,不适合高吞吐量场景(性能损耗大)。长期暴露服务请用 kubectl expose 或 Ingress。

3. apply vs create

  • create:资源已存在时报错
  • apply:声明式,存在则更新,不存在则创建

生产脚本优先用 apply,配合 GitOps 工作流。

4. 资源删除顺序

删除 Deployment 会自动删除其创建的 ReplicaSet 和 Pod。但删除 Service 不会自动删除后端 Pod。


🤖 Agent 可直接解析的元数据块(点击展开)
{
  "_meta": {
    "doc_version": "2022-03-29",
    "article_id": "kubectl-cheatsheet",
    "profile_context": "k8s",
    "estimated_setup_time": "5min"
  },
  "quick_start": {
    "check_cluster": "kubectl cluster-info",
    "list_pods": "kubectl get pods -n default",
    "view_logs": "kubectl logs -f <pod-name>",
    "exec_shell": "kubectl exec -it <pod-name> -- /bin/sh",
    "port_forward": "kubectl port-forward svc/<svc> 8080:80",
    "apply_manifest": "kubectl apply -f manifest.yaml",
    "rollout_restart": "kubectl rollout restart deployment/<name>"
  },
  "safety_rules": [
    "执行前确认当前 context:kubectl config current-context",
    "生产环境删除前先用 --dry-run=client 预览",
    "Secret 非加密,敏感信息考虑配合 Sealed Secrets 或 Vault",
    "kubectl port-forward 不适合生产流量"
  ],
  "verification": {
    "cluster_ready": "kubectl get nodes",
    "pod_running": "kubectl get pod <name> -o jsonpath='{.status.phase}'",
    "service_endpoints": "kubectl get endpoints <svc-name>"
  },
  "troubleshooting": {
    "pod_crash": "kubectl logs <pod> --previous",
    "pod_pending": "kubectl describe pod <pod> | grep -A 10 Events",
    "rbac_denied": "kubectl auth can-i get pods -n <ns>"
  }
}
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
#生产SOP#Kubernetes#Docker
上次更新: 9/4/2026

← 实用linux命令-curl Kubernetes核心概念详解:Namespace、Pod、Deployment、PV和PVC→

最近更新
01
当监控说没事而 DMV 说有事——N9E 与 SQL Server 指标交叉验证实战 原创
08-28
02
TiKV 节点 CPU 周期性打满,进程却只占 4%:一次热点 Region 的逆向排查 原创
08-28
03
托管 SQL Server 的运维边界:哪些 DBA 手段会失效,以及用什么替代 原创
08-28
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式