Kubernetes

Kubernetes 核心 kubectl 命令全详解

·18 分钟阅读·7102 字
📋 目录

Kubernetes 核心 kubectl 命令全详解

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

1. 前置基础

  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

一、集群上下文 & 连接管理(多集群切换)

2. 查看集群配置

# 查看kubeconfig完整内容
kubectl config view
# 查看所有集群、用户、上下文
kubectl config get-contexts
# 查看当前生效集群上下文
kubectl config current-context

3. 切换集群/命名空间

# 切换集群上下文
kubectl config use-context cluster-prod
# 设置默认命名空间(不用每次加 -n)
kubectl config set-context --current --namespace=online

4. 集群健康校验

# 检测控制平面组件状态(apiserver/controller/scheduler/etcd)
kubectl get cs
# 检测节点健康
kubectl get nodes
# 集群整体自检
kubectl cluster-info
# 查看集群版本
kubectl version

二、资源增删改查核心:get / create / apply / delete / edit

5. 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 # 字段文档

6. 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

7. 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/')

8. edit 在线编辑资源

# 直接编辑在线yaml
kubectl edit deploy web -n online
# 编辑node标签/污点
kubectl edit node node01

9. 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

三、Pod 容器操作(运维排障核心)

10. 进入容器

# 交互式终端(常用sh/alpine)
kubectl exec -it web-xxx -- sh
# 指定多容器pod中的某个容器
kubectl exec -it web-xxx -c sidecar -- bash
# 直接执行单条命令不进入交互
kubectl exec web-xxx -- nslookup mysql.svc

11. 日志查看

# 实时滚动日志
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

12. 文件拷贝 宿主机 <-> 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

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

# 本地8080转发pod 80端口
kubectl port-forward pod/web-pod 8080:80 -n online
# 转发service
kubectl port-forward svc/web-svc 8080:80

14. 容器调试临时工具

# 临时启动调试pod共享当前pod网络空间
kubectl debug web-pod -it --image=busybox --share-processes

四、工作负载控制器:Deployment / StatefulSet / DaemonSet / Job/CronJob

15. 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

16. StatefulSet 有状态

# 扩容缩容
kubectl scale sts mysql --replicas=3
# 查看滚动更新进度
kubectl rollout status sts mysql
# 回滚
kubectl rollout undo sts mysql

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

kubectl get ds calico-node -n kube-system
kubectl rollout restart ds calico-node

18. Job / CronJob 离线任务

# 一次性任务
kubectl create job backup --image=busybox -- echo "backup"
# 定时任务查看
kubectl get cronjob
# 手动触发一次定时任务
kubectl create job --from=cronjob/db-clean manual-job

五、网络资源 Service / Ingress / NetworkPolicy

19. 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

20. Ingress 七层网关

kubectl get ing
kubectl describe ing web-ingress
# 重载ingress nginx配置
kubectl rollout restart deploy nginx-ingress -n ingress-nginx

21. NetworkPolicy 网络隔离策略

kubectl get netpol -A
kubectl describe netpol deny-external

六、存储资源 PV / PVC / StorageClass

# 存储类
kubectl get sc
# 持久卷
kubectl get pv
# 存储申请
kubectl get pvc -n online
# 查看pvc绑定详情
kubectl describe pvc data-mysql-0

七、配置资源 ConfigMap / Secret

22. 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

23. 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

八、节点管理 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

九、权限安全 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

十、监控指标、事件、故障排查

27. 资源使用率 top

# 节点CPU内存
kubectl top node
# Pod CPU内存
kubectl top pod -A --sort-by=cpu

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

# 当前命名空间所有事件
kubectl get events
# 全集群事件
kubectl get events -A
# 持续刷新事件
kubectl get events -w
# 过滤pod相关事件
kubectl get events --field-selector involvedObject.name=web-xxx

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

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

kubectl describe pod web-xxx
kubectl describe deploy web
kubectl describe node node01
kubectl describe pvc data-mysql-0

十一、批量操作、导出资源、标签过滤

# 导出命名空间所有资源到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

十二、插件扩展命令

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

十三、高频故障标准排查命令流程

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 实时监控集群事件

十四、面试高频背诵分类

  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

关联文档