kubectl常用命令

kubectl常用命令

kubectl是Kubernetes集群的核心命令行管理工具,用于部署、管理和调试集群中的资源(如Pod、Deployment、Service等)。以下是日常使用中最常用的命令分类整理:

一、基础命令

1. 查看集群信息

• 查看集群基本信息:kubectl cluster-info

输出集群控制平面(Control Plane)的API服务器地址、CoreDNS服务地址等关键信息,帮助确认集群是否正常运行。

• 查看客户端与服务端版本:kubectl version --short=true

显示kubectl客户端版本和Kubernetes服务端版本,确保版本兼容性(如客户端版本通常不低于服务端版本的1个小版本)。

2. 查看资源对象

• 查看Pod列表:kubectl get pods [-n 命名空间] [-o wide]

默认显示当前命名空间下的Pod名称、状态、重启次数、年龄;-n指定命名空间(如-n kube-system查看系统Pod);-o wide显示额外信息(如Pod所在节点)。

• 查看Deployment列表:kubectl get deployments [-n 命名空间]

显示Deployment名称、副本数、更新策略、可用副本数等,是管理无状态应用的关键资源。

• 查看Service列表:kubectl get services [-n 命名空间]

显示Service名称、类型(ClusterIP/NodePort/LoadBalancer)、端口映射、关联的Pod选择器(Selector)。

• 查看所有资源:kubectl get all [-n 命名空间]

快速查看当前命名空间下的Pod、Service、Deployment、ReplicaSet等常见资源,简化操作。

3. 查看资源详情

• 查看Pod详细信息:kubectl describe pod <pod-name> [-n 命名空间]

输出Pod的事件(如调度、拉取镜像、启动容器)、容器状态、资源请求/限制、节点信息等,是排查Pod问题的核心命令(如Pod卡在Pending状态时,可通过此命令查看事件原因)。

• 查看Deployment详细信息:kubectl describe deployment <deployment-name> [-n 命名空间]

显示Deployment的副本数、更新策略、滚动更新状态、关联的ReplicaSet等,帮助了解应用部署情况。

• 查看Service详细信息:kubectl describe service <service-name> [-n 命名空间]

输出Service的端口映射、关联的Pod Endpoints(即Pod IP:Port列表)、选择器匹配的Pod数量等,确认Service是否正常转发流量。

4. 查看日志与执行命令

• 查看Pod容器日志:kubectl logs <pod-name> [-c 容器名称] [-n 命名空间]

默认显示Pod中第一个容器的日志;-c指定容器名称(适用于多容器Pod);-n指定命名空间。

• 实时查看日志:kubectl logs -f <pod-name> [-c 容器名称] [-n 命名空间]

类似Linux的tail -f命令,实时输出容器日志,用于监控应用运行状态(如查看Nginx访问日志)。

• 进入容器执行命令:kubectl exec -it <pod-name> -- /bin/bash [-c 容器名称] [-n 命名空间]

-it表示交互模式(分配伪终端);--后跟要执行的命令(如/bin/bash进入容器终端,ls /查看容器内文件);-c指定容器名称(多容器Pod必用);-n指定命名空间。

二、创建与管理资源

1. 创建资源

• 通过YAML文件创建:kubectl create -f <resource-file.yaml>

从YAML文件(如pod.yamldeployment.yaml)创建资源,是Kubernetes推荐的声明式管理方式(YAML文件需符合Kubernetes API规范)。

• 快速创建Pod:kubectl run <pod-name> --image=<image-name> [--port=<port>]

快速创建一个Pod(不推荐用于生产环境,仅用于测试),--image指定镜像名称(如nginx:1.25),--port指定容器端口(可选)。

• 暴露服务:kubectl expose deployment <deployment-name> --port=<service-port> --target-port=<pod-port> --type=<service-type> [-n 命名空间]

将Deployment暴露为Service,--port是Service的端口(对外暴露),--target-port是Pod的端口(应用监听端口),--type指定服务类型(ClusterIP默认,NodePort对外暴露,LoadBalancer云厂商负载均衡)。

2. 更新资源

• 设置镜像版本:kubectl set image deployment/<deployment-name> <container-name>=<new-image>:<tag> [-n 命名空间]

更新Deployment中指定容器的镜像版本(如kubectl set image deployment/nginx nginx=nginx:1.26),触发滚动更新(自动替换旧Pod)。

• 调整副本数量:kubectl scale deployment <deployment-name> --replicas=<number> [-n 命名空间]

扩容或缩容Deployment的副本数(如kubectl scale deployment/nginx --replicas=5将副本数调整为5),适用于应对流量波动。

• 自动扩缩容:kubectl autoscale deployment <deployment-name> --min=<min-replicas> --max=<max-replicas> --cpu-percent=<threshold> [-n 命名空间]

开启Horizontal Pod Autoscaler(HPA),根据CPU利用率自动调整副本数(如--min=2 --max=10 --cpu-percent=80表示CPU利用率超过80%时,自动扩容至最多10个副本)。

3. 删除资源

• 删除资源:kubectl delete <resource-type> <resource-name> [-n 命名空间]

删除指定资源(如kubectl delete pod/nginx删除名为nginx的Pod,kubectl delete deployment/nginx删除名为nginx的Deployment)。

• 按标签删除:kubectl delete <resource-type> -l <label-key>=<label-value> [-n 命名空间]

通过标签选择器批量删除资源(如kubectl delete pod -l app=nginx删除所有带有app=nginx标签的Pod),适用于管理有共同特征的Pod。

三、集群管理

1. 节点管理

• 查看节点列表:kubectl get nodes

显示集群中所有节点的名称、状态(Ready/NotReady)、角色(master/worker)、年龄等。

• 标记节点不可调度:kubectl cordon <node-name>

将节点标记为"不可调度"(SchedulingDisabled),新Pod不会调度到该节点,适用于节点维护前的准备。

• 恢复节点可调度:kubectl uncordon <node-name>

取消节点的"不可调度"标记,新Pod可以调度到该节点。

• 驱赶节点上的Pod:kubectl drain <node-name> [--ignore-daemonsets]

驱赶节点上的所有Pod到其他可用节点(--ignore-daemonsets忽略DaemonSet管理的Pod,如日志采集组件),通常与cordon一起使用,用于节点维护。

2. 标签与选择器

• 查看节点标签:kubectl get nodes --show-labels

显示节点的所有标签(如disktype=ssdregion=us-east),标签用于资源分组和调度。

• 给节点打标签:kubectl label nodes <node-name> <label-key>=<label-value>

给节点添加标签(如kubectl label nodes node-01 disktype=ssd),可用于调度Pod到指定类型的节点(如nodeSelector: {disktype: ssd})。

• 删除节点标签:kubectl label nodes <node-name> <label-key>-

删除节点的指定标签(如kubectl label nodes node-01 disktype-)。

四、故障排查

1. 查看资源状态详情

• 查看Pod状态:kubectl describe pod <pod-name> [-n 命名空间]

通过事件日志(Events)查看Pod无法创建的原因(如镜像拉取失败、资源不足、调度失败),是排查Pod问题的第一步。

• 查看Deployment状态:kubectl describe deployment <deployment-name> [-n 命名空间]

查看Deployment的滚动更新状态、副本数是否符合预期、是否有容器重启等,帮助排查应用部署问题。

2. 回滚部署

• 查看部署历史:kubectl rollout history deployment <deployment-name> [-n 命名空间]

显示Deployment的历史版本(每次更新都会生成一个版本),帮助确定回滚的目标版本。

• 回滚到上一个版本:kubectl rollout undo deployment <deployment-name> [-n 命名空间]

回滚到上一个稳定版本(如kubectl rollout undo deployment/nginx)。

• 回滚到指定版本:kubectl rollout undo deployment <deployment-name> --to-revision=<revision-number> [-n 命名空间]

回滚到指定版本(如kubectl rollout undo deployment/nginx --to-revision=3回滚到第3个版本)。

相关推荐
潮落拾贝10 小时前
k8s部署kafka三节点集群
容器·kafka·kubernetes
NineData14 小时前
NineData云原生智能数据管理平台新功能发布|2025年8月版
数据库·mongodb·云原生·数据库管理工具·ninedata·数据库迁移·数据复制
Serverless社区17 小时前
函数计算进化之路:AI Sandbox 新基座
阿里云·云原生·serverless
喂完待续19 小时前
【Big Data】Amazon S3 专为从任何位置检索任意数量的数据而构建的对象存储
大数据·云原生·架构·big data·对象存储·amazon s3·序列晋升
程序猿阿伟20 小时前
《云原生边缘与AI训练场景:2类高频隐蔽Bug的深度排查与架构修复》
人工智能·云原生·bug
智码看视界21 小时前
老梁聊全栈系列:(阶段一)从单体到云原生的演进脉络
java·云原生·c5全栈
To_再飞行1 天前
K8s访问控制(二)
linux·网络·云原生·容器·kubernetes