当前位置: 首页 > news >正文

K8S里的“豌豆荚”:Pod

1. 为什么要有pod

Pod 这个词原意是“豌豆荚”,后来又延伸出“舱室”“太空舱”等含义,你可以看一下这张图片,形 象地来说 Pod 就是包含了很多组件、成员的一种结构。

之前的容器技术让进程在一个“沙盒”环境里运行,具有良好的隔离性,对应用是一个非常好的封装。

不过,当容器技术进入到现实的生产环境中时,这种隔离性就带来了一些麻烦。因为很少有应 用是完全独立运行的,经常需要几个进程互相协作才能完成任务,比如在我们搭建一个网站的时候,就需要Nginx,数据库,应用服务等容器一起工作。这三个应用之间的关系还是比较松散的,它们可以分别调度,运行在不 同的机器上也能够以 IP 地址通信。

但还有一些特殊情况,多个应用结合得非常紧密以至于无法把它们拆开。比如,有的应用运行 前需要其他应用帮它初始化一些配置,还有就是日志代理,它必须读取另一个应用存储在本地 磁盘的文件再转发出去。这些应用如果被强制分离成两个容器,切断联系,就无法正常工作 了。

为了解决这样多应用联合运行的问题,同时还要不破坏容器的隔离,就需要在容器外面再建立 一个“收纳舱”,让多个容器既保持相对独立,又能够小范围共享网络、存储等资源,而且永远 是“绑在一起”的状态。

所以,Pod 的概念也就呼之欲出了,容器正是“豆荚”里那些小小的“豌豆”,你可以在 Pod 的 YAML 里看到,“spec.containers”字段其实是一个数组,里面允许定义多个容器。

2. 为什么 Pod 是 Kubernetes 的核心对象

因为 Pod 是对容器的“打包”,里面的容器是一个整体,总是能够一起调度、一起运行,绝不会 出现分离的情况,而且 Pod 属于 Kubernetes,可以在不触碰下层容器的情况下任意定制修 改。所以有了 Pod 这个抽象概念,Kubernetes 在集群级别上管理应用就会“得心应手”了。

Kubernetes 让 Pod 去编排处理容器,然后把 Pod 作为应用调度部署的最小单位,Pod 也因此成为了 Kubernetes 世界里的“原子”(当然这个“原子”内部是有结构的,不是铁板一块),基于 Pod 就可以构建出更多更复杂的业务形态了。

从这张图中你也应该能够看出来,所有的 Kubernetes 资源都直接或者间接地依附在 Pod 之 上,所有的 Kubernetes 功能都必须通过 Pod 来实现,所以 Pod 理所当然地成为了 Kubernetes 的核心对象。

3. 使用 YAML 描述 Pod

既然 Pod 这么重要,那么我们就很有必要来详细了解一下 Pod,理解了 Pod 概念,我们的 Kubernetes 学习之旅就成功了一半。

在 K8S 中,我们通常使用 YAML 文件来定义和创建 Pod。YAML 文件以简洁、易读的格式描述了 Pod 的各种配置信息,就像是一份详细的建筑蓝图,告诉 K8S 该如何构建我们的 Pod。

下面是一个使用 YAML 文件创建 Pod 的简单示例:

apiVersion: v1
kind: Pod
metadata:name: my-podlabels:app: my-app
spec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80

在这个示例中,apiVersion字段指定了 K8S API 的版本,它就像是一个软件的版本号,不同的版本可能会有不同的功能和特性 。kind字段明确了我们要创建的资源类型是 Pod,这是告诉 K8S 我们要构建的是一个 “房子”,而不是其他类型的资源。

metadata字段则包含了 Pod 的元数据信息,其中name是 Pod 的名称,就像每个人都有自己的名字一样,Pod 也需要一个唯一的名称来标识自己 。labels是标签,它是一种键值对形式的元数据,我们可以给 Pod 添加各种标签,用于对 Pod 进行分类和筛选,比如这里的app: my-app标签,就可以帮助我们快速找到所有属于my-app应用的 Pod。

spec字段是整个 YAML 文件的核心部分,它定义了 Pod 的具体规格和配置。containers字段列出了 Pod 中包含的容器信息,这里我们定义了一个名为my-container的容器,它使用的镜像nginx:latest,这就像是告诉 K8S 我们要在这个 “房间” 里安装什么 “家具” 。ports字段指定了容器要暴露的端口,这里我们将容器的 80 端口暴露出来,这样外界就可以通过这个端口访问到容器内运行的 Nginx 服务。

当我们编写好 YAML 文件后,只需要执行kubectl apply -f my-pod.yaml命令,K8S 就会根据这个文件的描述创建出对应的 Pod。

4. pod管理

创建好 Pod 之后,我们还需要对它进行各种管理操作,以确保它能够稳定运行。kubectl 工具为我们提供了丰富的命令来实现这些操作 。​

要查看 Pod 的状态和详细信息,可以使用kubectl get pods命令,它会列出所有 Pod 的基本信息,包括名称、状态、运行的节点等 。如果想要查看某个 Pod 的详细信息,比如容器的运行日志、资源使用情况等,可以使用kubectl describe pod my-pod命令,它就像是一个放大镜,帮助我们深入了解 Pod 的内部状态 。​

当我们需要进入 Pod 容器内部进行调试或执行一些命令时,可以使用kubectl exec -it my-pod -- /bin/bash命令,其中-it参数表示以交互模式进入容器,--后面的/bin/bash表示在容器内执行的命令,这里我们进入了容器的 bash 终端,就可以像在本地服务器上一样执行各种命令了 。​

如果需要对 Pod 的配置进行修改,可以使用kubectl edit pod my-pod命令,它会打开一个编辑器,让我们直接修改 Pod 的 YAML 配置文件,修改保存后,K8S 会自动应用这些更改,就像是给房子重新装修一样,让 Pod 拥有新的 “面貌” 。​

当某个 Pod 不再需要时,我们可以使用kubectl delete pod my-pod命令将其删除,释放集群资源。但要注意,删除 Pod 时要谨慎操作,避免误删重要的应用服务 。​

通过这些 kubectl 命令,我们可以轻松地对 Pod 进行创建、查看、管理和删除等操作,让我们能够灵活地掌控 K8S 集群中的应用服务。

5. 小结

通过上面的学习,了解了Kubernetes 里最核心最基本的概念 Pod,知道了应该如何使用 YAML 来定制 Pod,还有如何使用 kubectl 命令来创建、删除、查看、调试 Pod。

虽然 Pod 是 Kubernetes 的核心概念,非常重要,但事实上在 Kubernetes 里通常并不会直接 创建 Pod,因为它只是对容器做了简单的包装,比较脆弱,离复杂的业务需求还有些距离,需 要 Job、CronJob、Deployment 等其他对象增添更多的功能才能投入生产使用。


文章转载自:

http://iSpZxbjn.ryxbz.cn
http://20pRqH7p.ryxbz.cn
http://BOEpjAYR.ryxbz.cn
http://4X2t2xWb.ryxbz.cn
http://nHJdHwu1.ryxbz.cn
http://FNeZLoDN.ryxbz.cn
http://WrJH3nPH.ryxbz.cn
http://jAenpbZ9.ryxbz.cn
http://64FGASwb.ryxbz.cn
http://BK9TTxa5.ryxbz.cn
http://cnh3yfKQ.ryxbz.cn
http://endSMOUI.ryxbz.cn
http://qVstBhJf.ryxbz.cn
http://hidYSXPN.ryxbz.cn
http://odmTg3c7.ryxbz.cn
http://4vSrVA3T.ryxbz.cn
http://rqmoe6go.ryxbz.cn
http://XCu4AUDn.ryxbz.cn
http://IlwcaW17.ryxbz.cn
http://ZJPFu4pX.ryxbz.cn
http://r5Md9mzB.ryxbz.cn
http://E2mUjtPO.ryxbz.cn
http://eVHKWuVx.ryxbz.cn
http://aCHz2zq8.ryxbz.cn
http://h41XHXpT.ryxbz.cn
http://ubBPiZ2p.ryxbz.cn
http://fZaTbQRC.ryxbz.cn
http://83zUWd7H.ryxbz.cn
http://yGzY0pMe.ryxbz.cn
http://9FZU4piC.ryxbz.cn
http://www.dtcms.com/a/384605.html

相关文章:

  • OpenStack 管理与基础操作学习笔记(一):角色、用户及项目管理实践
  • 大数据毕业设计选题推荐-基于大数据的金融数据分析与可视化系统-Spark-Hadoop-Bigdata
  • Python爬虫实战:研究Pandas,构建期货数据采集和分析系统
  • 软考中级习题与解答——第六章_计算机硬件基础(3)
  • Nvidia显卡架构解析与cuda应用生态浅析
  • AppStore 如何上架?iOS 应用发布全流程、uni-app 打包上传 ipa、App Store 审核与多工具组合实战指南
  • 贪心算法应用:卫星链路调度问题详解
  • 基于https的数据加密技术
  • 自学嵌入式第四十一天:单片机-中断
  • 二分图 系列
  • DDAC工作流的PyCharm项目前置准备清单
  • 【Kubernetes】K8s 集群外服务配置 Service 访问
  • RESTFul API接口设计指南_V2
  • Linux第十七讲:应用层自定义协议与序列化
  • ESLint 自定义规则开发
  • 三维地震数据体:形态、处理流程与勘探应用笔记
  • HTTP标头全解析:保护你的Web应用!
  • 机器人控制器开发(定位——cartographer ros2 使用2)
  • 元学习原理与实验实战:让机器学会快速学习
  • [Cesium] 基于Cesium的二次开发的库
  • 红外IR的运用
  • 基于51单片机可燃气体报警、风扇、继电器断闸
  • Ubuntu下搭建vllm+modelscope+deepseek qwen3
  • 【 SQLMap】GET型注入
  • Actix-webRust Web框架入门教程
  • Docker Grafana 忘了密码修改方法
  • 移动端触摸事件与鼠标事件的触发机制详解
  • Go语言深度解析:从入门到精通的完整指南
  • CKS-CN 考试知识点分享(6) 日志审计
  • CentOS 7 环境下 PHP 7.3 与 PHP-FPM 完整安装指南(外网 yum / 内网源码双方案)