程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

K8S命令速查宝典,建议收藏,少走弯路!

balukai 2025-07-09 11:01:25 文章精选 3 ℃

两年前,我刚接触Kubernetes(以下简称K8S)时,面对一堆晦涩的命令行和复杂的集群管理,简直头大如斗。作为一个运维工程师,我深刻体会到K8S的强大,但也深知它的“门槛”不低。无论是部署应用、调试问题,还是优化集群性能,熟练掌握K8S命令行工具kubectl都是基本功。一次深夜加班,我靠着一串精准的命令解决了Pod异常重启的问题,客户直接打电话来表扬,这让我意识到:K8S命令不仅是工具,更是运维工程师的“武林秘籍”。

今天,我把自己两年来整理的K8S常用命令集合分享出来,从基础操作到高级调试,涵盖了日常运维的方方面面。希望这篇攻略能帮你从“运维小白”快速进阶为“K8S老司机”,少走弯路,直击痛点!

运维的“瑞士军刀”

Kubernetes是当前容器编排的王者,无论是互联网大厂还是中小企业,都在用它来管理容器化应用。K8S的核心魅力在于自动化:自动扩缩容、负载均衡、故障自愈……但这些功能背后,离不开kubectl这个命令行工具。它就像运维工程师的“瑞士军刀”,几乎能搞定所有K8S集群的管理任务。

不过,kubectl的命令繁多,参数复杂,初学者很容易被绕晕。比如,kubectl getkubectl describekubectl 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的世界里,修炼成真正的“高级运维”!

Tags:

最近发表
标签列表