Kubernetes 笔记 06 豌豆荚之旅(一)
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。
Hi,大家好,欢迎大家和我一起学习 K8S,这是系列第 6 篇。
Pod 中文译为豌豆荚,很形象,豌豆荚里面包裹的多颗小豌豆就是容器,小豌豆和亲密无间的老伙计壳荚子自出生之日起就得面对各种各样的人生大事:
- 容器、Pod、Node 之间的关系
- Pod 的生命周期管理
- Pod 的调度管理
- Pod 的监控
- Pod 的升级与回滚
- Pod 的扩容与缩容
- Pod 的存储管理
- Pod 的网络管理
- ......
为什么需要 Pod?
我们假设没有 Pod,应用部署的最小单元就是容器,会有什么问题?首先,应用调度粒度太细,不便于管理。想象一下淘宝网站运行着海量应用,每个应用又拆分成多个服务,每个服务部署在一个容器里,一个集群管理系统要管理庞大的容器集群,既要顾忌不同应用之间的隔离性,又要考虑相同应用之间的关联性,这在管理上将会是灾难性的难题。
其次,资源利用率低。有很多应用之间存在某种强关联关系,它们需要彼此能共享对方的资源,双方的交互需要快捷有效,如果把它们部署到单独的容器中,资源利用和通信将成为最主要的系统瓶颈。
Pod 的提出改变了这种局面,它将强关联的应用整合在一起,作为一个整体对外提供服务,既简化了管理的难度,又提高了资源的利用率。
那哪些应用是强关联,适合放到一个 Pod 中呢?举个例子,比如下面这个 Pod 包含两个容器,一个 File Puller,一个是 Web Server。

File Puller 会定期从外部的 Content Manager 中拉取最新的文件,将其存放在 Volume 中。然后 Web Server 从 Volume 中读取文件,来响应 Consumer 的请求。
这两个容器通过 Volume 来共享实时的数据,协作处理一个 Consumer 的请求,把它们放到同一个 Pod 中就是合适的。
如果有应用和任何应用之间都不存在联系,那么它们就单独部署在一个 Pod 中,称为one-container-per-pod。即便只有一个容器,K8S 管理的也是 Pod 而不是直接管理容器。
综上,Pod 在设计的时候,主要动机有以下两点:
- 方便管理
Pod 提供了比容器更高一层的抽象,K8S以 Pod 为最小单元进行应用的部署、调度、扩展、共享资源和管理周期。
- 资源共享和通信
Pod 内的所有容器共享同一个网络空间,它们之间可以通过 localhost 相互通信。同样,所有容器共享 Volume,一个容器挂载一个 Volume,其余容器都可以访问这个 Volume。
容器、Pod、Node 之间的关系
容器是 Pod 的一个属性,定义了应用的类型及共享的资源。每个容器会分配一个 Port,Pod 内的容器通过 localhost:Port 的形式来通信。
一个 Pod 包含一个或多个容器,每个 Pod 会分配一个唯一的 IP 地址,Pod 内的多个容器共享这个 IP 地址,每个容器的 Port 加上 Pod IP 共同组成一个 Endpoint,共同对外提供服务。
在部署应用的时候,Pod 会被 Master 作为一个整体调度到一个 Node 上。如果开启多副本管理,则多个 Pod 会根据调度策略调度到不同的 Node 上。如果 Node 宕机,则该 Node 上的所有 Pod 会被自动调度到其他 Node 上。
下面是容器、Pod、Node 三者之间的关系图:

Pod 根容器
Pod 中有一个特殊的容器,叫 Pod 的根容器——Pause 容器,这是一个很小的容器,镜像大小大概为 200KB。

Pause 容器存在的意义是: 维护 Pod 的状态信息。
由于 Pod 是作为一个整体进行调度,我们难以对这个整体的信息进行简单的判断和有效地进行行动。
想象一下,假如 Pod 内一个容器死亡了,是算整体死亡呢还是 N/M 死亡率,如果 Pod 内所有容器都死亡了,那是不是该 Pod 也就死亡了,如果加入新的容器或原有容器故障恢复呢,如何让新成员快速融入环境?
理论上,虽然 Pod 是由一组容器组成的,但 Pod 和容器是彼此独立的,也就是容器的故障不应该影响 Pod 的存在,Pod 有相应的手段来保证容器的健康状况。
引入与业务无关的,并且不易死亡的 Pause 容器就可以很好的解决这个问题,Pause 容器的状态就代表了 Pod 的状态,只要 Pause 不死,那么不管应用容器发生什么变化,Pod 的状态信息都不会改变。
这样,Pod 内的多个应用容器共享 Pause 容器的 IP 和 Volume,当加入新的容器或者原有的容器因故障重启后就可以根据 Pause 保存的状态快速学习到当前 Pod 的状态。
总结
本文简单学习了 Pod 的初级知识,包括 Pod 的设计动机,容器、Pod 和 Node 之间的关系,以及 Pod 的守护者——Pause 容器。
容器的 Port + Pod IP = Endpoint,构成一个 Pod 的通信实体,Pod 中的容器共享网络和存储,这些共享信息是由 Pause 容器来维护的。
下文继续豌豆荚之旅的第二个部分,学习 Pod 的管理哲学。
为了给大家更多的福利,这个系列的每一篇文章我都会送一些电子书,可能有重的,也有一些新书,之前送了《K8S 指南》和《容器与容器云》,这次送一本由 K8S 中文社区主编的《K8S 中文手册》,大家有需要的后台回复“K8S2”
我的公众号 「Linux云计算网络」(id: cloud_dev) ,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎大家关注。
Kubernetes 笔记 06 豌豆荚之旅(一)的更多相关文章
- Kubernetes 笔记 07 豌豆荚之旅(二)
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Hi,大家好, ...
- Kubernetes 笔记 05 yaml 配置文件详解
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Hi,大家好, ...
- 《30天自制操作系统》笔记(06)——CPU的32位模式
<30天自制操作系统>笔记(06)——CPU的32位模式 进度回顾 上一篇中实现了启用鼠标.键盘的功能.屏幕上会显示出用户按键.点击鼠标的情况.这是通过设置硬件的中断函数实现的,可以说硬件 ...
- 强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)
强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning) 学习笔记: Reinforcement Learning: An Introductio ...
- JAVA自学笔记06
JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...
- 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记
机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习作者:米仓山下时间: ...
- CS229 笔记06
CS229 笔记06 朴素贝叶斯 事件模型 事件模型与普通的朴素贝叶斯算法不同的是,在事件模型中,假设文本词典一共有 \(k\) 个词,训练集一共有 \(m\) 封邮件,第 \(i\) 封邮件的词的个 ...
- iOS学习笔记06—Category和Extension
iOS学习笔记06—Category和Extension 一.概述 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inher ...
- python笔记06
python笔记06 数据类型 上个笔记内容补充 补充 列表 reverse,反转. v1 = [1,2,3111,32,13] print(v1) v1.reverse() print(v1) v1 ...
随机推荐
- Linq to Object原理
using System; using System.Collections.Generic; using System.Linq; using System.Threading; namespace ...
- BZOJ2759 一个动态树好题 LCT
题解: 的确是动态树好题 首先由于每个点只有一个出边 这个图构成了基环内向树 我们观察那个同余方程组 一旦形成环的话我们就能知道环上点以及能连向环上点的值是多少了 所以我们只需要用一种结构来维护两个不 ...
- hbase 问题整理
阅读本文可以带着下面问题:1.HBase遇到问题,可以从几方面解决问题?2.HBase个别请求为什么很慢?你认为是什么原因?3.客户端读写请求为什么大量出错?该从哪方面来分析?4.大量服务端excep ...
- UOJ#374. 【ZJOI2018】历史 贪心,LCT
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ374.html 题解 想出正解有点小激动. 不过因为傻逼错误调到自闭.不如贺题 首先我们考虑如何 $O(n ...
- css处理事件透过、点击事件透过
// 执行一些动作... $("#myModal2").css("pointer-events","none"); // 执行一些动作... ...
- SpringBoot配置文件
一.配置文件 配置文件应该是无论在哪个框架中都是一个重要角色,而我们最为常用的xxx.xml和xxx.properties,还有springboot推荐使用的xxx.yml. 二.SpringBoot ...
- DOS批处理中对含有特殊字符的文件名的处理方法
从一些网站下载的文件,文件名带有广告,典型的就是网站的名称和域名,搞得文件名很长.在一些场景下,广告看得见,真正的文件名却被...了.在以前,我是遇到就手工去掉广告,但一是麻烦,二是效率低.反正经常下 ...
- 用python做一个搜索引擎(Pylucene)
什么是搜索引擎? 搜索引擎是“对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分”.如图1是搜索引擎的一般结构,信息搜集模块从网络采集信息到网络信息库之中(一般 ...
- 【2019雅礼集训】【最大费用流】【模型转换】D2T3 sum
目录 题意 输入格式 输出格式 思路 代码 题意 现在你有一个集合{1,2,3,...,n},要求你从中取出一些元素,使得这些元素两两互质.问你能够取出的元素总和最多是多少? 输入格式 一个整数n 输 ...
- c# winform打印excel(使用NPOI+Spire.xls+PrintDocument直接打印excel)
前言 c#做winform程序要求生成并打印Excel报告,为了不安装Office相应组件,我选择了NPOI来生成Excel报告,用winform的PrintDocument控件来触发打印操作,而难点 ...
