前言
本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系
正文
Pod资源对象是一种集合了一到多个应用容器、存储资源、专用IP及支撑容器运行的其他选项的逻辑组件。
换言之, Pod 代表着 Kubernetes 的部署单元及原子运行单元,即一个应用程序的单一运行实例,它通常由共享资源且关系紧密的一个或多个应用容器组成。
Kubernetes 的网络模型要求其各 Pod 对象的 IP 地址位于同一网络平面内(同一 IP 网段),各 Pod 之间可使用其 IP 地址直接进行通信,无论它们运行于集群内的哪个工作节点之上,这些 Pod 对象都像是运行于同局域网中的多个主机。
我们可以将每个 Pod 对象想象成一个逻辑主机,它类似于现实世界中的物理主机或 VM ( VirtualMachine ),运行于同一个 Pod 对象中的多个进程也类似于物理机或 VM 上独立运行的进程。
不过, Pod 对象中的各进程均运行于彼此隔离的容器中,并于各容器间共享两种关键资源:网络和存储卷。
- 网络( Networking ):每个 Pod 对象都会被分配一个集群内专用的 IP 地址,也称为 Pod IP ,同一 Pod 内部的所有容器共享 Pod 对象的 Network 和 UTS 名称空间,其中包括主机名、 IP 地址和端口等。因此,这些容器间的通信可以基于本地回环接口 IO 进行,而与 Pod 外的其他组件的通信则需要使用 Service 资源对象的 Cluster 及其相应的端口完成。
- 存储卷( Flume ):用户可以为 Pod 对象配置一组“存储卷”资源,这些资源可以共享给其内部的所有容器使用,从而完成容器间数据的共享。存储卷还可以确保在容器终止后被重启,甚至是被删除后也能确保数据不会丢失,从而保证了生命周期内的 Pod 对象数据的持久化存储。
一个 Pod 对象代表某个应用程序的一个特定实例,如果需要扩展应用程序,则意味着为此应用程序同时创建多个 Pod 实例,每个实例均代表应用程序的一个运行的“副本”( replica )。
这些副本化的 Pod 对象的创建和管理通常由另一组称之为“控制器”(Controller) 的对象实现,例如, Deployment 控制器对象。
创建 Pod 时,还可以使用 Pod Preset 对象为 Pod 注入特定的信息,如 Configmap 、 Secret 、存储卷、卷挂载和环境变量等。
有了 Pod Preset 对象, Pod 模板的创建者就无须为每个模板显式提供所有信息,因此,也就无须事先了解需要配置的每个应用的细节即可完成模板定义。
基于期望的目标状态和各节点的资源可用性, Master 会将 Pod 对象调度至某选定的工作节点运行,工作节点于指向的镜像仓库( Imageregistry )下载镜像,并于本地的容器运行时环境中启动容器。
Master 会将整个集群的状态保存于 etcd 中,并通过 API Server 共享给集群的各组件及客户端。