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个版本)。

相关推荐
二宝1521 天前
黑马商城day4-微服务02
微服务·云原生·架构
数据库知识分享者小北1 天前
云栖重磅|瑶池数据库:从云原生数据底座向“AI就绪”的多模态数据底座演进
数据库·人工智能·云原生
阿里云云原生1 天前
Higress v2.1.8:30 项引擎更新 + 4 项控制台更新
云原生
阿里云云原生1 天前
移动端性能监控探索:iOS RUM SDK 技术架构与实践
云原生
阿里云云原生1 天前
Nacos 3.1.0 正式发布,支持 A2A 注册中心与 MCP 注册协议增强
微服务·云原生
阿里云云原生1 天前
Qoder 上线提示词增强功能,将开发者从“提示词”的负担中解放出来
云原生
suknna1 天前
通过命令模拟pod创建
kubernetes
维诺菌1 天前
k8s java应用pod内存占用过高问题排查
java·jvm·云原生·容器·性能优化·kubernetes
回忆是昨天里的海2 天前
k8s安装-kubeadm join,将工作节点加入k8s集群
java·服务器·kubernetes
浪飘2 天前
k8s device plugin
java·docker·kubernetes