本文首发于个人公众号 Linux云计算网络(id: cloud_dev),专一于干货分享,号内有 10T 书籍和视频资源,后台回复**「1024」**便可领取,欢迎你们关注,二维码文末能够扫。html
Hi,你们好,欢迎你们和我一块儿学习 K8S,这是系列第 6 篇。编程
Pod 中文译为豌豆荚,很形象,豌豆荚里面包裹的多颗小豌豆就是容器,小豌豆和亲密无间的老伙计壳荚子自出生之日起就得面对各类各样的人生大事:网络
咱们假设没有 Pod,应用部署的最小单元就是容器,会有什么问题?首先,应用调度粒度太细,不便于管理。想象一下淘宝网站运行着海量应用,每一个应用又拆分红多个服务,每一个服务部署在一个容器里,一个集群管理系统要管理庞大的容器集群,既要顾忌不一样应用之间的隔离性,又要考虑相同应用之间的关联性,这在管理上将会是灾难性的难题。工具
其次,资源利用率低。有不少应用之间存在某种强关联关系,它们须要彼此能共享对方的资源,双方的交互须要快捷有效,若是把它们部署到单独的容器中,资源利用和通讯将成为最主要的系统瓶颈。学习
Pod 的提出改变了这种局面,它将强关联的应用整合在一块儿,做为一个总体对外提供服务,既简化了管理的难度,又提升了资源的利用率。网站
那哪些应用是强关联,适合放到一个 Pod 中呢?举个例子,好比下面这个 Pod 包含两个容器,一个 File Puller,一个是 Web Server。云计算
File Puller 会按期从外部的 Content Manager 中拉取最新的文件,将其存放在 Volume 中。而后 Web Server 从 Volume 中读取文件,来响应 Consumer 的请求。spa
这两个容器经过 Volume 来共享实时的数据,协做处理一个 Consumer 的请求,把它们放到同一个 Pod 中就是合适的。设计
若是有应用和任何应用之间都不存在联系,那么它们就单独部署在一个 Pod 中,称为one-container-per-pod
。即使只有一个容器,K8S 管理的也是 Pod 而不是直接管理容器。code
综上,Pod 在设计的时候,主要动机有如下两点:
Pod 提供了比容器更高一层的抽象,K8S以 Pod 为最小单元进行应用的部署、调度、扩展、共享资源和管理周期。
Pod 内的全部容器共享同一个网络空间,它们之间能够经过 localhost
相互通讯。一样,全部容器共享 Volume,一个容器挂载一个 Volume,其他容器均可以访问这个 Volume。
容器是 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 的根容器——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++编程技术等内容,欢迎你们关注。
原文出处:https://www.cnblogs.com/bakari/p/10551510.html