网站首页 > 文章精选 正文
两年前,我刚接触Kubernetes(以下简称K8S)时,面对一堆晦涩的命令行和复杂的集群管理,简直头大如斗。作为一个运维工程师,我深刻体会到K8S的强大,但也深知它的“门槛”不低。无论是部署应用、调试问题,还是优化集群性能,熟练掌握K8S命令行工具kubectl都是基本功。一次深夜加班,我靠着一串精准的命令解决了Pod异常重启的问题,客户直接打电话来表扬,这让我意识到:K8S命令不仅是工具,更是运维工程师的“武林秘籍”。
今天,我把自己两年来整理的K8S常用命令集合分享出来,从基础操作到高级调试,涵盖了日常运维的方方面面。希望这篇攻略能帮你从“运维小白”快速进阶为“K8S老司机”,少走弯路,直击痛点!
运维的“瑞士军刀”
Kubernetes是当前容器编排的王者,无论是互联网大厂还是中小企业,都在用它来管理容器化应用。K8S的核心魅力在于自动化:自动扩缩容、负载均衡、故障自愈……但这些功能背后,离不开kubectl这个命令行工具。它就像运维工程师的“瑞士军刀”,几乎能搞定所有K8S集群的管理任务。
不过,kubectl的命令繁多,参数复杂,初学者很容易被绕晕。比如,kubectl get、kubectl describe、kubectl apply,每个命令都有几十个子选项,稍不留神就可能敲错。为了让大家少踩坑,我把K8S常用命令按场景分类,整理成一份“速查手册”,涵盖集群管理、资源操作、调试排障和高级用法,干货满满!
快速上手K8S集群
先从最基础的命令开始。这些命令是日常运维的“敲门砖”,帮你快速了解和管理K8S集群。
1. 查看集群信息
- kubectl version:检查K8S客户端和服务器的版本。运行后会返回Client Version(kubectl版本)和Server Version(集群版本)。这在排查兼容性问题时特别有用。
kubectl version --short
加上--short参数,输出更简洁。
- kubectl cluster-info:显示集群的控制平面地址,比如API Server的URL。首次接触新集群时,用这个命令快速确认集群状态。
kubectl cluster-info
- kubectl get nodes:列出集群中的所有节点,显示节点名称、状态(Ready/NotReady)、角色(master/worker)等。
kubectl get nodes -o wide
-o wide会额外显示节点的IP地址,方便排查网络问题。
2. 配置kubectl上下文
多集群管理是运维的常见场景,kubectl支持通过上下文切换集群:
- kubectl config view:查看当前kubectl的配置文件(通常是~/.kube/config),包括集群、用户和上下文信息。
- kubectl config use-context <context-name>:切换到指定上下文。比如:
kubectl config use-context prod-cluster
这在管理生产、测试等多套集群时特别实用。
资源管理
K8S的核心资源包括Pod、Deployment、Service等,日常运维中90%的操作都围绕它们展开。
以下是常用命令:
1. 查看资源
- kubectl get:列出指定类型的资源,比如Pod、Deployment、Service等。
kubectl get pods -n <namespace>
-n指定命名空间,不加则默认查看default命名空间。
- kubectl describe:查看资源的详细信息,比如Pod的事件日志、状态等。调试问题时必备。
kubectl describe pod <pod-name> -n <namespace>
- kubectl get all:快速查看当前命名空间下的所有资源,包括Pod、Deployment、Service等。
kubectl get all -n kube-system
2. 创建和更新资源
- kubectl apply:通过YAML或JSON文件创建/更新资源。这是声明式管理的核心命令。
kubectl apply -f deployment.yaml
- kubectl create:直接创建资源,适合快速测试(但不支持更新)。
kubectl create deployment my-app --image=nginx
- kubectl edit:实时编辑资源的YAML配置,改完自动应用。
kubectl edit deployment my-app -n <namespace>
3. 删除资源
- kubectl delete:删除指定资源,比如Pod、Deployment等。
kubectl delete pod <pod-name> -n <namespace>
加上--force --grace-period=0可强制删除,避免等待。
4. 管理Pod
- kubectl logs:查看Pod的日志,调试应用问题时必用。
kubectl logs <pod-name> -n <namespace> --follow
--follow会实时跟踪日志输出。
- kubectl exec:进入Pod的容器,类似SSH登录。
kubectl exec -it <pod-name> -n <namespace> -- bash
-it表示交互模式,-- bash指定运行bash(如果容器支持)。
找到问题的“罪魁祸首”
K8S集群问题五花八门,比如Pod卡在Pending、容器反复重启、网络不通等。
1. 查看Pod状态
- kubectl get pods -o wide:显示Pod的详细信息,包括所在节点、IP地址等。
kubectl get pods -o wide -n kube-system
- kubectl describe pod <pod-name>:查看Pod的事件日志,常见问题如镜像拉取失败、调度失败都会在这里有线索。
2. 排查容器问题
- kubectl logs --previous:查看Pod中已终止容器的日志,适合排查容器崩溃问题。
kubectl logs <pod-name> --previous -n <namespace>
- kubectl top:监控Pod或节点的资源使用情况(需安装metrics-server)。
kubectl top pod <pod-name> -n <namespace>
这能帮你发现CPU/内存占用过高的问题。
3. 网络调试
- kubectl port-forward:将Pod的端口映射到本地,方便测试服务。
kubectl port-forward <pod-name> 8080:80 -n <namespace>
比如,把Pod的80端口映射到本地的8080端口。
- kubectl get svc:查看Service的配置,确认ClusterIP、端口等是否正确。
kubectl get svc -n <namespace> -o wide
4. 集群健康检查
- kubectl get events:查看集群事件日志,快速发现异常。
kubectl get events -n <namespace> --sort-by='.metadata.creationTimestamp'
- kubectl describe node <node-name>:检查节点状态,比如磁盘压力、内存不足等。
让K8S更高效
掌握了基础和调试命令后,一些高级命令能让你的运维工作事半功倍。
1. 批量操作
- kubectl label:给资源打标签,方便分组管理。
kubectl label pod <pod-name> app=frontend -n <namespace>
- kubectl annotate:为资源添加注释,记录额外信息。
kubectl annotate pod <pod-name> description="frontend-pod" -n <namespace>
2. 滚动更新与回滚
- kubectl rollout:管理Deployment的滚动更新。
kubectl rollout status deployment my-app -n <namespace>
查看滚动更新状态。
kubectl rollout undo deployment my-app -n <namespace>
回滚到上一个版本。
3. 自动扩缩容
- kubectl autoscale:为Deployment设置自动扩缩容。
kubectl autoscale deployment my-app --min=2 --max=5 --cpu-percent=80 -n <namespace>
当CPU使用率超过80%时,自动扩展Pod,最多5个,最少2个。
4. 清理无用资源
- kubectl delete pod --field-selector=status.phase=Failed:删除失败状态的Pod。
kubectl delete pod --field-selector=status.phase=Failed -n <namespace>
5. 自定义输出
- kubectl get -o json/yaml:以JSON或YAML格式输出资源详情,适合脚本化处理。
kubectl get pod <pod-name> -o yaml -n <namespace>
- kubectl get -o custom-columns:自定义输出列,方便快速查看关键信息。
kubectl get pods -o custom-columns=NAME:.metadata.name,IP:.status.podIP -n <namespace>
实用技巧与踩坑经验
在实际使用K8S的两年里,我踩过不少坑,也总结了一些实用技巧:
1. 善用命名空间
默认情况下,kubectl操作的是default命名空间,但生产环境通常按项目或团队划分命名空间。每次操作前确认命名空间(-n参数),避免误操作其他环境的资源。
2. 命令自动补全
配置kubectl命令自动补全,能大幅提升效率。在Linux上,运行以下命令:
source <(kubectl completion bash)
将补全脚本添加到~/.bashrc,一劳永逸。
3. 善用dry-run
在创建或更新资源前,用--dry-run=client预览效果,避免出错:
kubectl apply -f deployment.yaml --dry-run=client
4. 避免常见错误
- Pod卡在Pending:检查调度器日志(kubectl describe pod),常见原因是节点资源不足或镜像拉取失败。
- Service不通:确认Service的selector是否匹配Pod的标签(kubectl get svc -o yaml)。
- 命令超时:检查API Server状态,可能是网络问题或集群超载。
K8S命令是运维的“加速器”
从最初的“命令恐惧症”到如今的“信手拈来”,我深刻体会到,熟练掌握K8S命令不仅是技术能力的体现,更是运维效率的“加速器”。无论是快速部署一个应用、排查深夜的集群故障,还是优化资源利用率,这些命令都能让你事半功倍。
这份K8S常用命令集合,是我两年来踩坑和实践的结晶,希望能为你的运维工作提供一份“速查宝典”。如果你也有自己的K8S“独门秘籍”,欢迎留言分享!让我们一起在K8S的世界里,修炼成真正的“高级运维”!
猜你喜欢
- 2025-07-09 五分钟轻松熟悉一个k8s Operator应用制作
- 2025-07-09 iLogtail 使用入门 - K8S 环境日志采集到 SLS
- 2025-07-09 k8s之配置CNI网络(k8s 网络配置)
- 2025-07-09 Linux系统K8S集群架构及常用操作命令之K9S安装及使用
- 2025-07-09 Centos 安装部署Kubernetes(K8s)(k8s环境搭建 centos)
- 2025-07-09 集群外部署Prometheus+Grafana监控K8S解析
- 2025-07-09 k8s安装UI管理工具Kuboard安装(k8s安装步骤)
- 2025-07-09 k8s中使用Helm安装生产级别redis集群
- 2025-07-09 K8s集群(K8s集群添加新节点更新步骤)
- 2025-07-09 Kubernetes (k8s) 基本命令速查(k8s kubernetes教程)
- 最近发表
-
- 五分钟轻松熟悉一个k8s Operator应用制作
- iLogtail 使用入门 - K8S 环境日志采集到 SLS
- k8s之配置CNI网络(k8s 网络配置)
- Linux系统K8S集群架构及常用操作命令之K9S安装及使用
- Centos 安装部署Kubernetes(K8s)(k8s环境搭建 centos)
- 集群外部署Prometheus+Grafana监控K8S解析
- k8s安装UI管理工具Kuboard安装(k8s安装步骤)
- k8s中使用Helm安装生产级别redis集群
- K8s集群(K8s集群添加新节点更新步骤)
- Kubernetes (k8s) 基本命令速查(k8s kubernetes教程)
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)