百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

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

yund56 2025-07-17 00:03 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的世界里,修炼成真正的“高级运维”!

相关推荐

柚墨个人简历Word模板分享(柚墨ppt)

1、棕色商务风餐饮店长个人通用简历:http://www.yomoer.cn/template/detail/7801.html2、棕色商务风猎头个人通用简历:http://www.yomoer.cn...

纯粹的 Prompt 优化:输出HTML一步到位, 简历诊断 AI 小程序揭秘

最近我琢磨着,能不能搞一个超便捷的简历诊断工具,用户只需上传简历和岗位要求截图,AI就能一步到位生成HTML报告,这想法是不是听着就带劲?现在,我把这整个过程拆解出来,跟大家分享一下,保证干货满...

代码式动态录入生成个人简历页面html页面前端源码

大家好,今天给大家介绍一款,代码式动态录入生成个人简历页面html页面前端源码(图1)。送给大家哦,获取方式在本文末尾。整个页面分为两个部分,左右布局,左边动态输入一个代码编辑器,根据输入的代码动态变...

Web前端开发,HTML超链接标签,不懂的可以学习一下

一、什么是HTML的超链接大家平时浏览的网页中都可以找到链接。点击链接就可以从一个页面跳转到另一个页面。HTML超链接可以是一个字,一个词,或者一组词,也可以是一幅图像。可以点击这些内容来跳转到新的文...

HTML-列表标签(双标签) 208(html项目列表标签)

列表标签有3种:1)dl,dd与dt(定义列表)2)ol与li(有序列表)3)ul与li(无序列表)前两者一般不怎么用,网页中运用最多的是第三种1)<dl><dd>与<...

html开发笔记06- 字体标签和文字标签

1、字体标签:用于在页面中加粗、倾斜、加下划线等操作(不推荐)。字体标签分为:<b>加粗</b>,<i>倾斜</i>,<u>下划线&...

Web前端:HTML的10大重要用途(web前端开发html总结)

  HTML是最流行的Web前端开发技术之一,它是一种用于创建网页和Web应用程序的标记语言。HTML与CSS和JavaScript结合使用以创建有吸引力且响应迅速的前端网页。  HTML提供了...

晨间解析!HTML canvas 标签面试题,绘图知识轻松掌握

当清晨的阳光如笔尖般轻轻划过窗台,泡一杯温润的金骏眉,坐在桌前翻开这篇文章——此刻的学习,就像在网页的“电子画布”上从容调色,让HTML中<canvas>标签的知识点如晨光般细...

想学 HTML,不知从何入手?看完这篇文章你就知道了

很多人都说HTML是一门很简单的语言,看看书,看看视频就能读懂。但是,如果你完全没有接触过,就想通过看一遍教程,背背标签,想要完全了解HTML,真的有点太天真了。HTML中文“超文本标记语言”,英文名...

B端设计|页面标签的认识和实操应用

既然浏览器中可以使用页面标签,那为什么在项目中还需要使用这个组件和交互框架的形式呢?本文IE等浏览器界面为例,介绍了页面标签在产品设计中的作用,以及它们在不同使用场景当中的效果。希望能帮助你对页面标签...

视频号超链接怎么设置能成功?核心要点:标签代码格式

视频号超链接怎么设置能成功?坦白来讲,成功背后的方法很简单,唯一需要注意的点,就是<a>标签代码背后对应的格式。前两天一朋友跟我说:为什么视频号超链接设置完以后,在用户端看测试效果时,显示...

那些容易被你忽略的HTML重要属性,你知道几个?

前言在前端开发编写html文件的时候,我们可能会很熟练的写出常见的html元素,但是如果问到某些元素的差别时,大家不一定能说的出来,今天就给大家总结一下那些很常见但容易混淆的属性。html与csscs...

「测试开发全栈-HTML」(18) label标签的使用

说完了标签属性后,接着说下HTML中最后的标签--label<label>标签为input元素定义标注,用于绑定一个表单元素,当点击一个<label>标签内的文本时,浏览器就会...

Markdown 各种标签说明介绍(markdownhere)

介绍主要介绍各种Markdown的标签。汇总一下自己在Markdown中编辑中的常用标签。本篇内容的标签,全部是在Typora的环境下自测使用过。1.基础标签主要介绍Markdown中的一些基础标签,...

10 个罕见的 HTML 标签,几乎无人使用 - 、等等

HTML的内容远不止<div>、<a>和<p>。如此多更复杂、更强大的标签,你可能从未使用过。具有从交互式图像到复杂的UI组件的有趣功能。1.<...