Kubernetes

kubectl 命令全详解

·18 分钟阅读·7143 字

汇总kubectl 命令全的常用场景、参数用法与排查示例

📋 目录

kubectl 命令全详解

1. Kubernetes 核心 kubectl 命令全详解

生产必备 kubectl 是 Kubernetes 唯一命令行管理工具,本文按运维生产场景分层整理全部高频命令。

2. 前置基础

  1. 所有操作入口:kubectl,依赖 ~/.kube/config 连接 apiserver
  2. 通用全局参数(所有命令通用)

# 指定命名空间

-n / --namespace xxx

# 查看所有命名空间资源

--all-namespaces / -A

# 输出格式 yaml/json/宽表

-o yaml / -o json / -o wide

# 模拟执行,不真实提交

--dry-run=client

# 输出详细调试日志

--debug

# 自定义kubeconfig文件

--kubeconfig /root/prod.kubeconfig

# 资源标签过滤

-l key=value
  1. 资源简写(高频)

po = pods

svc = service

deploy = deployment

sts = statefulset

cm = configmap

secret = secret

pv = persistentvolume

pvc = persistentvolumeclaim

ing = ingress

no = node

ns = namespace

3. 集群上下文 & 连接管理(多集群切换)

4. 查看集群配置


# 查看kubeconfig完整内容

kubectl config view

# 查看所有集群、用户、上下文

kubectl config get-contexts

# 查看当前生效集群上下文

kubectl config current-context

5. 切换集群/命名空间


# 切换集群上下文

kubectl config use-context cluster-prod

# 设置默认命名空间(不用每次加 -n)

kubectl config set-context --current --namespace=online

6. 集群健康校验


# 检测控制平面组件状态(apiserver/controller/scheduler/etcd)

kubectl get cs

# 检测节点健康

kubectl get nodes

# 集群整体自检

kubectl cluster-info

# 查看集群版本

kubectl version

7. 资源增删改查核心:get / create / apply / delete / edit

8. get 查询(最常用)


# 基础查询

kubectl get pods -n online

# 宽表,显示IP、节点、镜像

kubectl get po -o wide

# 查看所有命名空间pod

kubectl get po -A

# 标签过滤

kubectl get po -l app=redis

# 输出yaml/json

kubectl get deploy web -o yaml

# 排序输出(按内存使用)

kubectl top po --sort-by memory

# 批量查看多种资源

kubectl get deploy,svc,ing,pvc

# 查看资源定义详情

kubectl api-resources # 所有api资源

kubectl explain pod.spec.containers # 字段文档

9. create 直接创建资源(一次性)


# 从文件创建

kubectl create -f deploy.yaml

# 创建命名空间

kubectl create ns test

# 创建cm/secret

kubectl create cm app-config --from-file=config.ini

kubectl create secret generic mysql --from-literal=password=123456

# 创建service暴露端口

kubectl create svc clusterip web --tcp=80:80

10. apply 声明式管理(生产标准,推荐)

区别 create:文件变更自动更新资源,不存在则创建


# 单文件

kubectl apply -f deploy.yaml

# 整个目录所有yaml

kubectl apply -f ./manifests/

# 在线更新镜像

kubectl apply -f <(kubectl get deploy web -o yaml | sed 's/image=old/image=new/')

11. edit 在线编辑资源


# 直接编辑在线yaml

kubectl edit deploy web -n online

# 编辑node标签/污点

kubectl edit node node01

12. delete 删除资源


# 删除指定pod

kubectl delete po web-7f9d65c89d-2xqzk

# 按标签批量删除

kubectl delete po -l app=tmp

# 删除整个命名空间(谨慎!会清空内部所有资源)

kubectl delete ns test

# 根据yaml删除资源

kubectl delete -f deploy.yaml

# 强制立即删除卡死pod

kubectl delete po bad-pod --grace-period=0 --force

13. Pod 容器操作(运维排障核心)

14. 进入容器


# 交互式终端(常用sh/alpine)

kubectl exec -it web-xxx -- sh

# 指定多容器pod中的某个容器

kubectl exec -it web-xxx -c sidecar -- bash

# 直接执行单条命令不进入交互

kubectl exec web-xxx -- nslookup mysql.svc

15. 日志查看


# 实时滚动日志

kubectl logs -f web-xxx

# 查看指定容器日志

kubectl logs web-xxx -c log-agent

# 查看最近100行

kubectl logs --tail=100 web-xxx

# 查看之前崩溃容器日志

kubectl logs -p web-xxx

# 时间过滤,近1小时日志

kubectl logs --since=1h web-xxx

16. 文件拷贝 宿主机 <-> Pod


# pod文件下载到本地

kubectl cp ns/web-pod:/data/logs ./pod-logs

# 本地文件上传pod

kubectl cp ./config.conf ns/web-pod:/app/config.conf

# 指定容器拷贝

kubectl cp local.file pod:/path -c main

17. 端口转发(本地访问集群内部服务)


# 本地8080转发pod 80端口

kubectl port-forward pod/web-pod 8080:80 -n online

# 转发service

kubectl port-forward svc/web-svc 8080:80

18. 容器调试临时工具


# 临时启动调试pod共享当前pod网络空间

kubectl debug web-pod -it --image=busybox --share-processes

19. 工作负载控制器:Deployment / StatefulSet / DaemonSet / Job/CronJob

20. Deployment 无状态


# 扩容副本到5

kubectl scale deploy web --replicas=5 -n online

# 滚动更新镜像

kubectl set image deploy web web=harbor/web:v1.2.0

# 查看发布滚动进度

kubectl rollout status deploy web

# 查看发布历史

kubectl rollout history deploy web

# 回滚上一版本

kubectl rollout undo deploy web

# 回滚指定修订版本

kubectl rollout undo deploy web --to-revision=2

# 暂停/恢复发布

kubectl rollout pause deploy web

kubectl rollout resume deploy web

21. StatefulSet 有状态


# 扩容缩容

kubectl scale sts mysql --replicas=3

# 查看滚动更新进度

kubectl rollout status sts mysql

# 回滚

kubectl rollout undo sts mysql

22. DaemonSet 每节点一个Pod(监控、日志)


kubectl get ds calico-node -n kube-system

kubectl rollout restart ds calico-node

23. Job / CronJob 离线任务


# 一次性任务

kubectl create job backup --image=busybox -- echo "backup"

# 定时任务查看

kubectl get cronjob

# 手动触发一次定时任务

kubectl create job --from=cronjob/db-clean manual-job

24. 网络资源 Service / Ingress / NetworkPolicy

25. Service 四层负载均衡


# 查看service与后端pod对应关系

kubectl get svc

kubectl describe svc web-svc # 查看Endpoints

# 创建NodePort暴露外部访问

kubectl create svc nodeport web --tcp=80:80 --node-port=30080

# 查看service后端端点

kubectl get ep web-svc

26. Ingress 七层网关


kubectl get ing

kubectl describe ing web-ingress

# 重载ingress nginx配置

kubectl rollout restart deploy nginx-ingress -n ingress-nginx

27. NetworkPolicy 网络隔离策略


kubectl get netpol -A

kubectl describe netpol deny-external

28. 存储资源 PV / PVC / StorageClass


# 存储类

kubectl get sc

# 持久卷

kubectl get pv

# 存储申请

kubectl get pvc -n online

# 查看pvc绑定详情

kubectl describe pvc data-mysql-0

29. 配置资源 ConfigMap / Secret

30. ConfigMap 明文配置


# 创建从文件

kubectl create cm app-conf --from-file=app.yaml

# 从文字键值创建

kubectl create cm env --from-literal=LOG_LEVEL=info

# 查看内容

kubectl get cm app-conf -o yaml

# 编辑

kubectl edit cm app-conf

31. Secret 加密密钥


# 通用secret

kubectl create secret generic mysql-secret --from-literal=root-pwd=xxxx

# docker镜像仓库认证secret

kubectl create secret docker-registry harbor --docker-server=harbor --docker-user=admin --docker-password=xxx

# 解密查看secret

kubectl get secret mysql-secret -o jsonpath='{.data.root-pwd}' | base64 -d

32. 节点管理 Node 运维命令(集群扩缩容、污点隔离)


# 查看节点基础信息

kubectl get nodes -o wide

# 节点详情(资源、污点、标签、GPU、事件)

kubectl describe node gpu-01

## 24. 节点标签(调度筛选)

# 打标签

kubectl label node node01 workload=online

# 删除标签

kubectl label node node01 workload-

## 25. 污点Taint(排斥Pod)

# 添加污点:禁止普通pod调度

kubectl taint node gpu01 gpu=enable:NoSchedule

# 删除污点

kubectl taint node gpu01 gpu-

## 26. 节点维护隔离(驱逐Pod,不可调度)

# 封锁节点,新pod不再调度上来

kubectl cordon node01

# 驱逐节点上所有pod(缩容/维护)

kubectl drain node01 --ignore-daemonsets --delete-emptydir-data

# 恢复调度

kubectl uncordon node01

33. 权限安全 RBAC:ServiceAccount / Role / ClusterRole


# 服务账号

kubectl get sa -n online

# 角色

kubectl get role,clusterrole

# 角色绑定

kubectl get rolebinding,clusterrolebinding

# 查看账号权限

kubectl auth can-i create pods --as=system:serviceaccount:online:web-sa

34. 监控指标、事件、故障排查

35. 资源使用率 top


# 节点CPU内存

kubectl top node

# Pod CPU内存

kubectl top pod -A --sort-by=cpu

36. 事件查看(故障第一排查手段)


# 当前命名空间所有事件

kubectl get events

# 全集群事件

kubectl get events -A

# 持续刷新事件

kubectl get events -w

# 过滤pod相关事件

kubectl get events --field-selector involvedObject.name=web-xxx

37. describe 详细资源事件(排错核心)

所有资源都可以用describe,输出事件、状态、原因、日志、绑定信息


kubectl describe pod web-xxx

kubectl describe deploy web

kubectl describe node node01

kubectl describe pvc data-mysql-0

38. 批量操作、导出资源、标签过滤


# 导出命名空间所有资源到yaml备份

kubectl get all -n online -o yaml > online-backup.yaml

# 删除命名空间下所有pod(快速重建)

kubectl delete po -n online --all

# 批量重启所有deploy

kubectl rollout restart deploy -n online

# 匹配标签批量重启

kubectl rollout restart deploy -l app=web

# jsonpath精准提取字段(自动化脚本常用)

# 获取pod ip

kubectl get po web -o jsonpath='{.status.podIP}'

# 获取secret明文

kubectl get secret mysql -o jsonpath='{.data.password}' | base64 -d

39. 插件扩展命令

  1. helm:包管理,独立工具,不属于kubectl
  2. kubectl explain:资源字段文档
  3. kubectl api-versions:查看集群所有API版本
  4. kubectl api-resources:查看所有可管理资源
  5. kustomize:kubectl apply -k ./kustomize 多环境资源渲染

40. 高频故障标准排查命令流程

Pod无法启动标准排查链路:

  1. kubectl get po 看状态CrashLoopBackOff/Pending
  2. kubectl describe po xxx 查看事件(镜像拉取失败、PVC未绑定、资源不足、污点不匹配)
  3. kubectl logs xxx 查看应用崩溃日志
  4. kubectl exec -it xxx -- sh 进入容器验证网络、配置文件
  5. kubectl get events -w 实时监控集群事件

41. 面试高频背诵分类

  1. 集群连接:config context version cluster-info
  2. 资源CRUD:get create apply edit delete
  3. Pod操作:exec logs cp port-forward debug
  4. 发布滚动:rollout status history undo restart scale
  5. 节点运维:cordon drain uncordon label taint
  6. 配置:cm secret
  7. 网络:svc ep ing netpol
  8. 存储:pv pvc sc
  9. 排障:describe get events top logs

关联文档

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro