一、认识Pod
Pod资源对象是一种集合了一到多个应用容器、存储资源、专用IP及支撑容器运行的其他选项的逻辑组件;Pod代表着Kubernetes的部署单元及原子运行单元,即一个应用程序的单一运行实例,它通常由共享资源且关系紧密的一个或多个容器组成;Kubernetes的网络模型要求其各Pod对象的IP地址位于同一网络平面内(同一个IP网段),各Pod之间可使用其IP地址直接进行通信,无论它们运行于哪个工作节点之上,这些Pod对象都像是运行于同一局域网中的多个主机。
我们可以将每个Pod对象想象成一个逻辑的主机,它类似于现实世界中的物理主机或VM,运行于同一个Pod对象中的多个进程也类似于物理机或VM上独立运行的进程。不过,Pod对象中的各进程均运行于彼此隔离的容器中,并于各容器间共享两种关键资源:网络和存储卷
网络(Networking):每个Pod对象都会被分配一个集群内专用的IP地址,也称为Pod IP,同一Pod内部的所有容器共享Pod对象的Network和UTS名称空间,其中包括主机名、IP地址和端口等。因此,这些容器间的通信可以基于本地回环接口lo进行,而与Pod外的其他组件的通信则需要使用Service资源对象和ClusterIP及其相应的端口完成。
存储卷(Volume):用户可以为Pod对象配置一组"存储卷"资源,这些资源可以共享给其内部的所有容器使用,从而完成容器间的数据共享。存储卷还可以确保在容器终止后重启,甚至是被删除后也能确保数据不会丢失,从而保证了生命周期内的Pod对象数据的持久化存储。
二、控制器
一个Pod对象代表某个应用程序的一个特定实例,如果需要扩展应用程序,则意味着为此应用程序同时创建多个Pod实例,每个实例均代表应用程序的一个运行"副本"(replica)。这些副本化的Pod对象的创建和管理通常由另一组称之为"控制器"(Controller)的对象实现的,例如,ReplicatSet控制器、Deployment控制器等。
控制器本身也是一组资源类型的统称,它有着多种实现,其中与工作负载相关的实现如Replication Controller、Deployment、StatefulSet、DaemonSet、和Job等,也可以统称它们为控制器。Deployment就是这类控制器的代表实现,它也是目前最常用的管理无状态应用的Pod控制器。Kubernetes的每个控制器对象都代表着一个控制循环,它通过API Server监视受控对象,并在必要时修改前状态以吻合目标状态
Pod控制器的定义通常由期望的副本数量、Pod模板和标签选择器(Label Selector)组成。Pod控制器会根据标签控制器对Pod对象的标签进行匹配筛选,所有满足选择条件的Pod对象都将受控于当前控制器并计入其副本总数,并确保此数目能够精确反映期望的副本数。
三、Replication Set控制器
Replication Set(简称RS)控制器是Replication Controller(简称RC)控制器的升级版,目前Kubernetes的版本中RC控制器已不再使用;RS已是主流;但是RC和RS的功能都是对Pod的副本数量做管理控制,它们的实际功能基本一致,目前唯一的区别是RC只支持基于等式的Selector(env=dev或app=nginx),但是RS还支持基于集合的Selector(version in(v1,v2)),着对于复杂的运维管理就非常方便了。
kubelet命令行工具中关于RC的大部分命令同样适用于RS资源对象,不