当前位置: 首页 > ai >正文

Kubernetes(K8s)常用命令全解析:从基础到进阶

Kubernetes(K8s)常用命令全解析:从基础到进阶

引言:为什么掌握K8s命令是云原生时代的必备技能?

Kubernetes(简称K8s)作为容器编排的事实标准,已成为云原生应用部署、扩展和管理的核心平台。其命令行工具kubectl是与集群交互的主要入口,掌握其常用命令不仅能提高日常运维效率,更能深入理解K8s的资源模型(如声明式API、控制器模式)和调度逻辑。

本文将系统梳理kubectl命令,按资源管理集群运维部署与伸缩故障排查高级操作五大维度分类,涵盖高频使用、易混淆及进阶命令,补充场景化示例与注意事项。

目录

  • Kubernetes(K8s)常用命令全解析:从基础到进阶
    • 引言:为什么掌握K8s命令是云原生时代的必备技能?
    • 一、资源管理基础命令
      • 1.1 资源查看(`kubectl get`)
      • 1.2 资源创建(`kubectl create`与`kubectl apply`)
      • 1.3 资源删除(`kubectl delete`)
      • 1.4 资源详情查看(`kubectl describe`)
      • 1.5 配置资源修改(`kubectl edit`)
    • 二、集群管理命令
      • 2.1 集群信息查看
      • 2.2 节点管理
      • 2.3 命名空间管理
    • 三、部署与伸缩命令
      • 3.1 Deployment管理
      • 3.2 自动伸缩(HPA)
      • 3.3 StatefulSet与DaemonSet
    • 四、故障排查命令
      • 4.1 Pod诊断
      • 4.2 网络诊断
      • 4.3 存储诊断
    • 五、高级操作命令
      • 5.1 标签与注解管理
      • 5.2 配置与密钥管理(ConfigMap/Secret)
      • 5.3 权限管理(RBAC)
      • 5.4 作业与定时任务
    • 六、易错点与最佳实践
    • 总结

一、资源管理基础命令

1.1 资源查看(kubectl get

最常用的命令之一,用于查询集群中各类资源的状态,支持多种输出格式和过滤条件。

命令作用示例补充说明
kubectl get pods查看当前命名空间的所有Podkubectl get pods(简写成po输出包含名称、就绪数、状态、重启次数、年龄
kubectl get pods -n <namespace>查看指定命名空间的Podkubectl get po -n kube-system-n指定命名空间,如kube-system是系统组件所在命名空间
kubectl get pods --all-namespaces查看所有命名空间的Podkubectl get po -A-A是简写)适合全局排查跨命名空间问题
kubectl get pods -o wide查看Pod的详细信息kubectl get po -o wide额外显示Pod的IP、所在节点、镜像等
kubectl get pods -l <label>按标签过滤Podkubectl get po -l app=nginx标签是K8s资源关联的核心,如Service通过标签关联Pod
kubectl get deployments查看Deploymentkubectl get deploy(简写deployDeployment是无状态应用的主要控制器
kubectl get services查看Servicekubectl get svc(简写svc输出包含ClusterIP、端口映射等网络信息
kubectl get nodes查看集群节点kubectl get no(简写no显示节点状态(Ready/NotReady)、角色、版本等
kubectl get namespaces查看命名空间kubectl get ns(简写ns命名空间用于资源隔离,默认有defaultkube-system
kubectl get <resource> -o yaml/json以YAML/JSON格式输出资源详情kubectl get pod nginx -o yaml用于查看资源的完整配置(如标签、注解、调度策略等)

1.2 资源创建(kubectl createkubectl apply

用于创建或更新集群资源,两者的核心区别在于:create是"命令式创建"(已存在则报错),apply是"声明式更新"(存在则更新,不存在则创建)。

命令作用示例适用场景
kubectl create -f <file>通过配置文件创建资源kubectl create -f nginx-deploy.yaml仅用于新资源创建,重复执行会报错
kubectl create <resource> <name>直接创建资源(简单场景)kubectl create deployment nginx --image=nginx:1.23快速创建测试资源,不适合复杂配置
kubectl apply -f <file>通过配置文件创建或更新资源kubectl apply -f nginx-deploy.yaml生产环境推荐,支持增量更新(仅修改配置文件中变化的字段)
kubectl apply -f <dir>批量处理目录下的所有配置文件kubectl apply -f ./k8s-configs适合多资源协同部署(如Deployment+Service+ConfigMap)

1.3 资源删除(kubectl delete

用于删除集群中的资源,支持按名称、标签、配置文件等方式删除。

命令作用示例注意事项
kubectl delete <resource> <name>删除指定名称的资源kubectl delete pod nginx-7f9f6f5c9d-2xqkf仅删除单个资源,需准确指定名称
kubectl delete <resource> -l <label>按标签删除资源kubectl delete deploy -l app=nginx批量删除同一标签的资源,适合清理测试环境
kubectl delete -f <file>删除配置文件定义的资源kubectl delete -f nginx-deploy.yamlapply -f对应,确保资源完整删除
kubectl delete <resource> --all删除当前命名空间的所有该类型资源kubectl delete pods --all谨慎使用,可能误删重要资源
kubectl delete pod <name> --grace-period=0 --force强制删除Podkubectl delete pod nginx --grace-period=0 --force仅用于异常卡住的Pod(如状态为Terminating但无法退出),可能导致数据不一致

1.4 资源详情查看(kubectl describe

用于查看资源的详细状态(如事件、关联资源、配置细节等),是故障排查的核心命令。

命令作用示例关键输出解读
kubectl describe <resource> <name>查看指定资源的详细信息kubectl describe pod nginx重点关注Events部分(如调度失败、镜像拉取错误原因)
kubectl describe node <node-name>查看节点详情kubectl describe node node-1关注Conditions(节点健康状态)、Allocatable(可分配资源)、Taints(污点,影响调度)
kubectl describe svc <service-name>查看Service详情kubectl describe svc nginx-svc关注Endpoints(后端Pod的IP:Port,为空则说明Pod未匹配标签)

1.5 配置资源修改(kubectl edit

用于在线编辑集群中已存在的资源配置(等效于修改YAML后apply)。

kubectl edit deployment nginx  # 编辑Deployment配置(自动打开默认编辑器)
kubectl edit svc nginx-svc -n dev  # 编辑指定命名空间的Service

注意:编辑后需确保语法正确(如YAML缩进),保存后配置会自动生效(触发滚动更新等操作)。

二、集群管理命令

2.1 集群信息查看

用于了解集群的基本状态、版本及节点信息。

命令作用示例输出解读
kubectl cluster-info查看集群核心组件地址kubectl cluster-info显示API Server、ETCD、CoreDNS等组件的访问地址,若某组件未就绪会提示错误
kubectl cluster-info dump导出集群详细信息kubectl cluster-info dump > cluster-dump.log包含所有资源配置、事件、日志片段,用于离线诊断
kubectl version查看版本信息kubectl version --short显示客户端(kubectl)和服务端(API Server)版本,需确保版本兼容(客户端与服务端版本差不超过1个大版本)
kubectl api-versions查看支持的API版本kubectl api-versionsapps/v1(Deployment所在API组)、v1(Pod、Service所在API组),不同资源可能属于不同API组
kubectl api-resources查看支持的资源类型kubectl api-resources包含资源名称、简写、API组、命名空间范围(是否集群级)等,如pods是命名空间级,nodes是集群级

2.2 节点管理

用于节点的调度控制(如维护时标记不可调度)。

命令作用示例场景说明
kubectl cordon <node-name>标记节点为"不可调度"kubectl cordon node-1阻止新Pod调度到该节点,但不影响已运行的Pod(用于临时维护)
kubectl uncordon <node-name>解除"不可调度"标记kubectl uncordon node-1允许新Pod调度到该节点
kubectl drain <node-name> --ignore-daemonsets排空节点(驱逐所有Pod)kubectl drain node-1 --ignore-daemonsets用于节点下线维护,--ignore-daemonsets跳过DaemonSet管理的Pod(DaemonSet要求所有节点运行)
kubectl top node查看节点资源使用情况kubectl top node需部署metrics-server,显示CPU/内存使用率,用于识别节点过载

2.3 命名空间管理

命名空间用于隔离集群资源(如开发、测试、生产环境分离)。

命令作用示例注意事项
kubectl create namespace <name>创建命名空间kubectl create ns dev命名空间名称需符合DNS-1123规范(小写字母、数字、-)
kubectl delete namespace <name>删除命名空间kubectl delete ns dev会递归删除命名空间内所有资源,操作不可逆
kubectl config set-context --current --namespace=<name>切换默认命名空间kubectl config set-context --current --namespace=dev避免每次命令加-n <namespace>,通过kubectl config view查看当前上下文

三、部署与伸缩命令

3.1 Deployment管理

Deployment是最常用的无状态应用部署控制器,支持滚动更新、回滚等功能。

命令作用示例核心逻辑
kubectl create deployment <name> --image=<image>创建Deploymentkubectl create deployment nginx --image=nginx:1.23自动创建ReplicaSet和Pod,默认1个副本
kubectl scale deployment <name> --replicas=<num>调整副本数kubectl scale deploy nginx --replicas=3扩缩容时通过ReplicaSet控制Pod数量,确保服务不中断
kubectl rollout status deployment <name>查看滚动更新状态kubectl rollout status deploy nginx显示更新进度(如"3 out of 3 new replicas have been updated")
kubectl rollout history deployment <name>查看更新历史kubectl rollout history deploy nginx每个版本(revision)对应一次配置变更,包含变更时间、原因
kubectl rollout undo deployment <name> --to-revision=<num>回滚到指定版本kubectl rollout undo deploy nginx --to-revision=2回滚会创建新ReplicaSet,逐步替换旧Pod,确保零 downtime

3.2 自动伸缩(HPA)

Horizontal Pod Autoscaler(HPA)可根据CPU使用率、自定义指标自动调整副本数。

命令作用示例配置说明
kubectl autoscale deployment <name> --min=<min> --max=<max> --cpu-percent=<percent>创建HPAkubectl autoscale deploy nginx --min=2 --max=5 --cpu-percent=80当平均CPU使用率超过80%时扩容(最多5副本),低于阈值时缩容(最少2副本)
kubectl get hpa查看HPA状态kubectl get hpa显示当前副本数、目标指标(如targets: 50%/80%)、最小/最大副本数

注意:HPA依赖metrics-server收集指标,需先部署(kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml)。

3.3 StatefulSet与DaemonSet

  • StatefulSet:用于部署有状态应用(如数据库、分布式系统),提供稳定的网络标识(固定域名)和存储(PVC模板)。

    kubectl get statefulsets  # 查看StatefulSet(简写sts)
    kubectl scale statefulset <name> --replicas=<num>  # 调整副本数(需确保存储可用)
    
  • DaemonSet:确保所有(或指定)节点运行相同的Pod(如日志收集器、监控代理、网络插件)。

    kubectl get daemonsets  # 查看DaemonSet(简写ds)
    kubectl describe ds <name>  # 查看调度节点选择器(如通过标签限制仅在特定节点运行)
    

四、故障排查命令

4.1 Pod诊断

Pod是K8s的最小部署单元,其故障排查是日常运维的重点。

命令作用示例排查场景
kubectl logs <pod-name> -f查看Pod日志(实时跟踪)kubectl logs nginx-7f9f6f5c9d-2xqkf -f定位应用运行时错误(如日志中的Exception)
kubectl logs <pod-name> -c <container-name>查看指定容器的日志kubectl logs nginx-pod -c sidecar -f多容器Pod(如主应用+sidecar)需指定容器,否则默认第一个容器
kubectl exec -it <pod-name> -- <command>进入容器执行命令kubectl exec -it nginx-pod -- /bin/bash检查容器内文件、网络(如pingcurl)、环境变量
kubectl cp <pod-name>:<path> <local-path>从Pod拷贝文件到本地kubectl cp nginx-pod:/etc/nginx/nginx.conf ./nginx.conf提取配置文件或日志文件离线分析
kubectl cp <local-path> <pod-name>:<path>从本地拷贝文件到Podkubectl cp ./index.html nginx-pod:/usr/share/nginx/html/临时替换应用文件(如调试静态页面)
kubectl get events -n <namespace> --sort-by=.metadata.creationTimestamp查看命名空间事件kubectl get events -n dev --sort-by=.metadata.creationTimestamp定位Pod启动失败原因(如"FailedScheduling"调度失败、"ErrImagePull"镜像拉取失败)

4.2 网络诊断

网络问题是K8s中最常见的故障类型,需检查Service、网络策略、DNS等。

命令作用示例排查逻辑
kubectl get svc <name> -o wide查看Service网络信息kubectl get svc nginx-svc -o wide确认ClusterIP、端口映射是否正确(如80:30080/TCP表示集群内80端口映射到节点30080端口)
kubectl describe svc <name>查看Service关联的Endpointskubectl describe svc nginx-svcEndpoints为空→检查Pod标签是否与Service的selector匹配
kubectl port-forward <pod-name> <local-port>:<pod-port>本地端口转发kubectl port-forward nginx-pod 8080:80绕过Service直接访问Pod,验证Pod本身是否正常(排除Service配置问题)
kubectl run -it --rm --image=busybox:1.35 dns-test -- nslookup <service-name>测试DNS解析kubectl run -it --rm --image=busybox:1.35 dns-test -- nslookup nginx-svc解析失败→检查CoreDNS是否正常(`kubectl get po -n kube-system
kubectl get networkpolicies -n <namespace>查看网络策略kubectl get networkpolicies -n dev若Pod间无法通信,检查是否有网络策略(NetworkPolicy)阻止流量

4.3 存储诊断

存储相关故障(如PVC绑定失败、挂载异常)需检查PV、PVC、存储类等。

命令作用示例排查方向
kubectl get pv查看持久卷(PV)kubectl get pv关注PV的STATUS(Available/ Bound/ Released),若PVC未绑定,检查是否有匹配的PV(容量、访问模式、存储类一致)
kubectl get pvc -n <namespace>查看持久卷声明(PVC)kubectl get pvc -n devPending状态→PV不足或不匹配;Bound状态→正常绑定
kubectl describe pvc <name> -n <namespace>查看PVC绑定失败原因kubectl describe pvc nginx-pvc -n dev事件中可能提示"no persistent volumes available for this claim and no storage class is set"(未指定存储类且无可用PV)
kubectl get storageclasses查看存储类(StorageClass)kubectl get sc存储类用于动态创建PV,若PVC指定了存储类,需确保该存储类存在且可用

五、高级操作命令

5.1 标签与注解管理

标签(Label)用于资源分组和选择(如Service关联Pod),注解(Annotation)用于存储非标识性元数据(如构建信息、运维说明)。

命令作用示例规范说明
kubectl label <resource> <name> <key>=<value>为资源添加标签kubectl label pod nginx-pod env=dev标签键需符合[a-z0-9A-Z_-],长度≤63字符
kubectl label <resource> <name> <key>=<new-value> --overwrite更新标签kubectl label pod nginx-pod env=prod --overwrite必须加--overwrite,否则无法更新已有标签
kubectl label <resource> <name> <key>-删除标签kubectl label pod nginx-pod env-标签键后加-表示删除
kubectl annotate <resource> <name> <key>=<value>为资源添加注解kubectl annotate pod nginx-pod build-id=12345注解可存储长文本(如JSON),不用于资源选择,仅用于描述

5.2 配置与密钥管理(ConfigMap/Secret)

  • ConfigMap:存储非敏感配置(如应用参数),通过环境变量或文件挂载注入Pod。

    kubectl create configmap nginx-conf --from-file=nginx.conf  # 从文件创建
    kubectl get configmaps  # 查看ConfigMap(简写cm)
    kubectl describe cm nginx-conf  # 查看配置内容
    
  • Secret:存储敏感信息(如密码、证书),默认base64编码(非加密,需配合RBAC或外部密钥管理)。

    kubectl create secret generic db-creds --from-literal=username=admin --from-literal=password=123456  # 创建密钥
    kubectl get secrets  # 查看Secret(简写secret)
    kubectl describe secret db-creds  # 查看密钥结构(值隐藏)
    kubectl get secret db-creds -o jsonpath='{.data.password}' | base64 -d  # 解码查看值(谨慎操作)
    

5.3 权限管理(RBAC)

基于角色的访问控制(RBAC)用于管理集群资源的访问权限,核心是"谁(Subject)能对什么资源(Resource)执行什么操作(Verb)"。

命令作用示例权限范围
kubectl get roles -n <namespace>查看命名空间内的角色kubectl get roles -n dev角色(Role)仅作用于所在命名空间
kubectl get rolebindings -n <namespace>查看角色绑定kubectl get rolebindings -n dev角色绑定(RoleBinding)将角色与用户(如ServiceAccount)关联
kubectl get clusterroles查看集群级角色kubectl get clusterroles集群角色(ClusterRole)作用于全集群
kubectl get clusterrolebindings查看集群角色绑定kubectl get clusterrolebindings绑定集群角色与用户
kubectl auth can-i <action> <resource> --as=<user>验证用户权限kubectl auth can-i get pods --as=dev-user快速确认权限配置是否生效(如返回yes/no

5.4 作业与定时任务

  • Job:用于执行一次性任务(如数据备份、初始化),确保任务成功完成(即使节点故障)。

    kubectl get jobs  # 查看Job
    kubectl describe job <name>  # 查看任务执行状态(如成功的Pod数、失败原因)
    kubectl delete job <name>  # 删除Job(会保留已完成的Pod,需手动删除)
    
  • CronJob:用于执行定时任务(如日志清理、周期性报表生成),基于Cron表达式调度。

    kubectl get cronjobs  # 查看CronJob(简写cj)
    kubectl describe cronjob <name>  # 查看调度规则(如`Schedule: 0 3 * * *`表示每天凌晨3点执行)
    kubectl create cronjob cleanup --image=busybox --schedule="0 3 * * *" -- rm -rf /tmp/*  # 创建定时任务
    

六、易错点与最佳实践

  1. 命令缩写与复数形式
    资源简写需用复数(如kubectl get po正确,kubectl get pod错误),常见简写:pod→podeployment→deployservice→svcnode→nonamespace→ns

  2. 命名空间上下文
    未指定-n时默认操作default命名空间,切换默认命名空间后(kubectl config set-context),所有命令默认在该命名空间执行,避免跨命名空间误操作。

  3. create vs apply的选择

    • 临时测试用create(如kubectl create deployment test --image=nginx);
    • 生产环境用apply(配合Git管理配置文件,支持版本控制和增量更新)。
  4. 强制删除的风险
    --grace-period=0 --force会跳过K8s的优雅终止流程,可能导致数据丢失(如数据库未完成事务提交),仅用于Pod长时间卡在Terminating状态的极端场景。

  5. 日志查看技巧

    • 多容器Pod必须用-c指定容器(如kubectl logs <pod> -c <container>);
    • 实时日志加-f,配合--tail=<num>查看最近N行(如kubectl logs <pod> -f --tail=100);
    • 查看历史日志可用--previous(如kubectl logs <pod> --previous查看崩溃容器的日志)。
  6. 资源依赖关系
    部署时需注意资源依赖顺序:先创建ConfigMap/Secret,再创建Deployment(避免Pod启动时配置文件不存在);先创建Deployment,再创建Service(确保Endpoints能关联Pod)。

  7. HPA不生效排查

    • 检查metrics-server是否运行(kubectl get po -n kube-system | grep metrics-server);
    • 确保Pod设置了资源请求(resources.requests.cpu),HPA基于请求值计算使用率;
    • 查看HPA事件(kubectl describe hpa <name>),可能提示"missing request for cpu"(未设置CPU请求)。

总结

Kubernetes命令的本质是与声明式API交互的工具,掌握命令的同时需理解其背后的资源模型(如控制器模式、标签选择器、命名空间隔离)。高频命令(getdescribeapply)是日常运维的基石,而故障排查命令(logsexecevents)则是定位问题的关键。

建议通过实际场景练习(如部署Nginx→暴露Service→配置HPA→模拟故障排查)加深理解,并善用kubectl --help和官方 cheatsheet 快速查询。随着实践深入,命令会逐渐内化为运维直觉,助力高效管理K8s集群。

http://www.xdnf.cn/news/18107.html

相关文章:

  • Unity进阶--C#补充知识点--【Unity跨平台的原理】Mono与IL2CPP
  • Disbursement on Quarantine Policy(概率、逆元计算期望)
  • 【深度学习】pytorch深度学习框架的环境配置
  • Ansible文件部署与大项目多主机管理
  • 学习嵌入式的第二十天——数据结构
  • redis-集成prometheus监控(k8s)
  • 实习两个月总结
  • 从0到1掌握 Spring Security(第三篇):三种认证方式,按配置一键切换
  • 传统方式部署(RuoYi-Cloud)微服务
  • 像素风球球大作战 HTML 游戏
  • vben admin 下拉支持收索
  • 谷粒商城项目-P3简介-分布式基础概念
  • 牛津大学xDeepMind 自然语言处理(1)
  • Mysql——前模糊索引失效原因及解决方式
  • C++多线程编程深度解析【C++进阶每日一学】
  • 部署 HAProxy 高可用
  • 将 iPhone 连接到 Windows 11 的完整指南
  • 蛋糕销售管理系统设计与实现
  • MongoDB Windows 系统实战手册:从配置到数据处理入门
  • 【MongoDB】多种聚合操作详解,案例分析
  • Handler以及AsyncTask知识点详解
  • 北斗气象站:能够实现气象数据的实时采集、传输与智能分析
  • 20. 云计算-云服务模型
  • 什么叫做 “可迭代的产品矩阵”?如何落地?​
  • 【前端面试题】JavaScript 核心知识点解析(第二十二题到第六十一题)
  • 使用 Zed + Qwen Code 搭建轻量化 AI 编程 IDE
  • Zookeeper 在 Kafka 中扮演了什么角色?
  • CVPR 2025|英伟达联合牛津大学提出面向3D医学成像的统一分割基础模型
  • 决策树总结
  • CloudBase AI ToolKit + VSCode Copilot:打造高效智能云端开发新体验