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.yaml
、deployment.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=ssd
、region=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个版本)。