pod的前世今生
一、没有 Pod 之前,遇到了什么麻烦?
1. 电脑本机时代(不用容器)
比如你后台跑一个网站程序,同时还要跑一个日志收集小程序,把网站的运行日志收集起来存起来。
这两个程序必须装在同一台电脑上,靠127.0.0.1本地地址互相传话,操作系统会把它们打包成一组进程,一起启动、一起关掉。
操作系统管这一组绑定在一起干活的程序,叫进程组。
2. 用上 Docker 容器之后,坏事来了
Docker 规则:一个容器只装一个程序。
那网站放容器 A,日志收集放容器 B:
- 两个容器是完全隔绝的两个小系统,不能用
127.0.0.1聊天; - Kubernetes(简称 K8s)调度机器的时候,有可能把 A 分到服务器 1,B 分到服务器 2,直接分家,彻底没法配合;
- 没法控制先后顺序:日志程序先删了,网站程序还在跑,日志直接丢失。
核心痛点:容器太小了,没法捆绑 “必须待在一起协同工作的多个小程序”。
于是 K8s 发明了 Pod,作用一句话:
Pod = 把一台机器上绑定干活的一组程序,搬到分布式服务器集群里的 “打包盒子”,就是集群版的操作系统进程组。
二、第一层:Pod 盒子内部怎么让多个容器和睦相处?
1. 有一个隐形的打底小容器:Pause 容器
Pod 盒子一创建,最先启动一个几乎不占资源的空容器,名字叫 Pause(暂停容器),它啥业务都不干,只干两件事:
- 占下整个 Pod 盒子唯一的 IP 地址、网卡、网络通道;
- 占下盒子内部的进程通信通道。
2. 所有业务容器 “挂靠” 到 Pause 身上
网站容器、日志容器、监控容器,全部挂靠到 Pause 的网络和通信通道里。
最终效果
① 共用的部分(方便互相调用)
所有容器共用同一个 IP、同一个网络:
网站直接用localhost就能访问日志收集程序,就跟在一台电脑本地跑一模一样。
② 互相隔离的部分(互不干扰)
每个业务容器自己独立的文件系统:
网站用自己的代码包、日志程序用自己的代码包,版本随便升级,不会互相覆盖搞崩对方;各自限制 CPU、内存资源。
极简总结这一段:
Pause 做共用网络底座,大家共用一个网;各自的代码、文件、存储空间分开隔离,兼顾互通和安全。
三、第二层:在 K8s 大集群里,Pod 有什么规则?
1. K8s 最小干活单位就是 Pod,不能拆
K8s 调度服务器的时候,只认 Pod 这个整体,不认里面单个容器。
规则:一个 Pod 里面所有容器,强制全部扔到同一台物理服务器上,绝对不会被拆分到多台机器。
2. 一荣俱荣、一损俱损的绑定生命周期
同一个 Pod 里所有容器绑定一套规则:
- 共用 IP、共用网络;
- 整块盒子设置 CPU、内存上限,内部容器共享资源池;
- 一起启动、一起检查健康状态、一起优雅关闭、一起删除。
这么设计的好处
永远不会出现 “主服务在 A 机器,日志收集在 B 机器” 的割裂故障,保证整套关联服务拓扑稳定。
四、三层浓缩
-
诞生原因
本机多个协作程序靠操作系统进程组捆绑,Docker 单个容器做不到捆绑多个协作程序,K8s 造出 Pod 充当集群环境下的 “超级打包组”。
-
内部内核原理
靠一个看不见的 Pause 容器霸占网络,让 Pod 内所有容器共用一套网络互通;但每个容器自己的文件、镜像、存储互相隔离,互不影响。
-
集群调度规则
Pod 是 K8s 最小不可拆分单元,整盒调度到单台服务器,内部所有容器生死与共,保障云原生 Sidecar(日志 / 监控边车)架构稳定运行。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)