DevOps 入门系列:kubectl 常用命令

DevOps 入门系列:kubectl 常用命令 kubectl 常用命令概念篇—— 如何与 K8s 集群交互前置知识已掌握 Kubernetes 核心资源Pod、Deployment、Service、Ingress、ConfigMap、Secret、PVC文档说明本文只讲解命令概念、用途、适用场景无命令执行输出示例1. 什么是 kubectlkubectl 是 Kubernetes 官方命令行客户端工具通过向集群 API Server 发送 HTTP 请求实现集群交互核心能力查看各类集群资源运行状态声明式创建、更新、删除集群资源查看容器运行日志、交互式进入容器内部管理命名空间、集群节点等底层集群资源docker管控单机容器kubectl是集群级容器管理工具管控跨多台宿主机的 Pod 与各类 K8s 资源。2. 基础命令查看资源状态get2.1 命令作用K8s 采用声明式 APIYAML 定义期望状态kubectl get用来查询资源实际运行状态是日常排查、巡检最高频命令。2.2 资源查看常用指令命令功能说明kubectl get pods查询当前命名空间下所有 Podkubectl get pods -o wide拓展输出Pod IP、所属节点、控制器信息kubectl get deployments查询 Deployment 控制器列表kubectl get services查询 Service 资源列表kubectl get configmap查询配置字典 ConfigMapkubectl get secret查询密文配置 Secretkubectl get pvc查询存储申请 PVCkubectl get nodes查询集群所有节点状态kubectl get events查询集群事件资源变更、异常记录kubectl get all汇总查看 Pod/Deploy/SVC 等主流资源2.3 通用高频参数参数作用-n指定目标命名空间缺省使用 default-A / --all-namespaces全集群所有命名空间资源-o wide扩展字段输出-o yaml以 YAML 格式输出资源完整配置-w / --watch实时监听资源变化动态刷新示例概念# 默认default命名空间查询Podkubectl get pods# 查看系统组件命名空间kube-system的Podkubectl get pods-nkube-system# 全集群所有命名空间Podkubectl get pods-A# 查看Pod拓展信息kubectl get pods-owide资源异常排查第一步永远先用get确认运行状态。3. 查看资源详情describe3.1 命令作用get仅展示资源简略信息Pod 出现Pending/CrashLoopBackOff/ImagePullBackOff等异常时kubectl describe输出完整配置 生命周期事件是定位异常关键指令。输出内容包含资源全量配置容器、环境变量、存储挂载、Events 事件清单排错核心。3.2 常用指令命令作用kubectl describe podPod 详情 生命周期事件kubectl describe deploymentDeployment 控制器详情kubectl describe serviceService 详情 后端 Endpoints 列表kubectl describe node节点资源、调度、污点详情3.3 Events 常见异常释义事件关键字故障原因FailedSchedulingPod 调度失败节点资源不足、亲和 / 污点策略不匹配FailedPullImage镜像拉取失败镜像地址错误、私有仓库密钥缺失、节点外网不通BackOff容器反复异常退出需结合日志排查Liveness probe failed存活探针失败应用卡死 / 启动异常Pod 异常优先执行describe重点翻阅 Events 区块。4. 查看容器运行日志logs4.1 命令作用Pod 状态显示 Running但业务报错 / 无响应时通过容器标准输出日志定位应用代码异常kubectl logs可跨节点统一拉取集群容器日志无需登录宿主机。4.2 常用指令命令功能kubectl logs单容器 Pod 查看全量日志kubectl logs -c多容器 Pod 指定容器查看日志kubectl logs --tail100仅输出末尾 100 行日志kubectl logs -f实时流式跟踪日志tail -fkubectl logs --previous查看上一轮崩溃容器历史日志4.3 使用场景应用启动报错日志检索异常堆栈信息CrashLoopBackOff 反复重启--previous查看崩溃前日志业务接口异常实时跟踪请求链路日志5. 进入容器交互调试exec5.1 命令作用日志无法定位故障时交互式进入运行中容器校验环境变量、挂载配置、网络连通性。5.2 常用指令命令说明kubectl exec -- whoami非交互执行单条命令kubectl exec -it -- /bin/sh交互式进入容器终端bash/shkubectl exec -c -- ls /app多容器指定容器执行命令5.3 容器内调试常用操作进程查询ps aux环境变量校验env连通性测试curl service-name、nslookup配置校验cat 挂载配置文件路径备注我们之前使用的 alpine 精简镜像无 bash/curl优先使用 /bin/sh临时安装工具仅限调试场景。6. 资源生命周期管理apply /delete/edit6.1 apply声明式创建 更新核心遵循 K8s 声明式设计基于 YAML 文件定义集群期望状态。命令作用kubectl apply -f deployment.yaml单个 YAML 创建 / 更新资源kubectl apply -f ./manifests/目录下所有 yaml 批量生效kubectl apply -f https://xxx/deploy.yaml远程 URL 加载 yaml 部署create VS applycreate 仅支持新建资源重复执行报资源已存在apply 资源不存在则创建、已存在则增量更新变更字段。6.2 delete资源删除命令说明kubectl delete pod直接删除 PodDeployment 控制器自动重建新 Podkubectl delete deployment删除控制器关联 Pod 同步销毁kubectl delete -f deployment.yaml删除对应 yaml 定义的全部资源kubectl delete pod --all删除当前命名空间所有 Pod高危操作kubectl delete ns删除整个命名空间内部资源全销毁高危风险提醒删除 PVC 可能连带后端云存储盘销毁由 PV 回收策略决定谨慎操作。6.3 edit在线直接编辑集群资源无需修改本地 YAML直接编辑集群内运行资源配置保存立即生效kubectl edit deploymentdeploy-namekubectl editservicesvc-name规范建议正式环境使用 GitYAMLapply 做版本管控edit 仅限紧急临时修复。7. 命名空间 Namespace 管理7.1 命名空间概念K8s 集群资源隔离机制类比系统目录同一集群内不同命名空间可存在同名资源。使用场景环境隔离dev/test/prod 三套环境拆分命名空间团队隔离多业务团队资源隔离配额管控按命名空间限制 CPU / 内存资源上限权限管控RBAC 绑定用户限制仅能操作指定 NS 资源类比集群 整栋大楼命名空间 楼层同房间号在不同楼层互不冲突。7.2 命名空间常用命令命令功能kubectl get ns / kubectl get namespaces查看全集群命名空间kubectl create namespace创建命名空间kubectl delete namespace删除命名空间高危kubectl get pods -n查询指定命名空间 Podkubectl get pods -A全集群所有命名空间 Podkube-system 存放集群核心组件CoreDNS、Ingress 控制器禁止随意删除修改日常业务部署优先自定义命名空间。8. 通用故障排查标准流程排错三板斧业务异常固定排查顺序get → describe → logs → exec8.1 第一步get 查看全量资源状态kubectl get pods kubectl get deployments kubectl get services kubectl get pvc kubectl get events --sort-by.lastTimestampPod 异常状态对照表状态含义下一步操作Running运行正常业务异常直接查看日志Pending调度失败 / 镜像拉取阻塞describe 查看 EventsImagePullBackOff镜像拉取失败校验镜像地址、私有仓库密钥、节点网络CrashLoopBackOff容器反复崩溃重启logs --previous 查看崩溃历史日志ErrImagePull镜像拉取失败同 ImagePullBackOff8.2 第二步describe 定位事件根源kubectl describe pod异常Pod名称重点读取 Events 区块捕获调度失败、镜像异常、健康探针失败信息。8.3 第三步logs 读取应用运行日志kubectl logspod-namekubectl logspod-name--previouskubectl logs--tail100-fpod-name8.4 第四步exec 进入容器深度调试kubectlexec-itpod-name-- /bin/sh排错逻辑流程图业务异常 │ ▼ kubectl get pods → 状态异常──是→ kubectl describe pod → 分析Events故障点 │ 正常 │ ▼ kubectl logs → 日志报错──是→ 根据日志修复配置/代码 │ 无报错 │ ▼ kubectl exec 进入容器手动核查配置、网络、环境变量9. kubectl 分类速查表9.1 集群基础信息命令作用kubectl version查看 kubectl 客户端 集群 API 服务端版本kubectl cluster-info查看集群 API 地址、集群管控信息kubectl get nodes集群节点状态kubectl api-resources列出集群支持的所有资源种类9.2 资源查询命令作用kubectl get pods [-n ns] [-o wide]查询 Podkubectl get deployments [-n ns]查询 Deploymentkubectl get services [-n ns]查询 Servicekubectl get configmap [-n ns]查询 ConfigMapkubectl get secret [-n ns]查询 Secretkubectl get pvc [-n ns]查询 PVCkubectl get events --sort-by‘.lastTimestamp’时序化查看集群事件kubectl get all [-n ns]主流资源汇总9.3 资源详情命令作用kubectl describe pod [-n ns]Pod 详情 事件kubectl describe deployment [-n ns]Deployment 详情kubectl describe svc [-n ns]Service 后端 Endpoint 详情9.4 日志 容器交互命令作用kubectl logs [-c container]查看容器日志kubectl logs --previous查看崩溃历史日志kubectl logs -f实时日志跟踪kubectl exec -it -- /bin/sh交互式进入容器kubectl exec -- cmd容器内执行单次命令9.5 资源 CRUD 操作命令作用kubectl apply -f yaml创建 / 更新资源kubectl delete -f yaml删除 yaml 定义资源kubectl delete pod删除单个 Podkubectl delete deployment删除控制器kubectl edit deployment在线编辑配置kubectl port-forward pod/ 8080:5000本地端口转发访问 Pod9.6 命名空间操作命令作用kubectl get ns查看命名空间kubectl create ns创建命名空间kubectl delete ns删除命名空间kubectl get pods -n指定 NS 查 Podkubectl get pods -A全集群查 Pod10. 文档总结核心命令分类汇总分类核心指令核心用途资源概览get快速查看资源运行状态详情排错describe读取配置 事件定位底层异常应用日志logs查看应用标准输出排查业务报错容器调试exec进入容器手动验证配置、网络资源管理apply/delete/edit资源创建、删除、配置修改资源隔离-n/-A按命名空间隔离筛选资源必背排错三板斧kubectl get pods确认资源运行状态kubectl describe pod pod名查看事件定位异常根源kubectl logs pod名查看应用运行日志