一、资源元信息:
Kubernetes 的资源对象组成:主要包括了 Spec、Status 和元数据。其中 Spec 部分用来描述期望的状态,Status 部分用来描述观测到的状态。
元数据主要包括了:Labels 用来识别资源的标签;Annotations 用来描述资源的注解;OwnerReference 用来描述多个资源之间相互关系 。
1、Labels
资源标签是一种具有标识型的 Key:Value 元数据。
2、Selector
通过标签筛选 Pod。
相等型 Selector:通过 Tie=front,Env=dev 的 Selector,可以筛选出所有 Tie=front,而且 Env=dev 的 Pod。
集合型 Selector:tie notin(front,back),筛选所有 tie 不是 front 且不是 back 的 Pod。
3、Annotations
annotations 一般是系统或者工具用来存储资源的非标示性信息,可以用来扩展资源的 spec/status 的描述。
4、OwnerReference
OwnerReference 用于建立对象之间的所有权关系。它允许一个Kubernetes对象(例如Pod、ReplicaSet或Deployment)将自己标记为另一个对象(例如Job或CronJob)的所有者。
二、控制器模式
1、控制循环
控制型模式最核心的就是控制循环的概念。在控制循环中包括了控制器,被控制的系统,以及能够观测系统的传感器,三个逻辑组件。
① 传感器(Sensor):传感器负责观测被控制系统的当前状态。它们收集关于系统状态的信息,并将其反馈给控制器。
② 控制器(Controller):控制器负责比较被控制系统的期望状态(由资源的spec定义)和实际状态(由资源的status表示),并计算出二者之间的差异(diff)。控制器根据这些差异决定执行何种操作来使系统状态向期望状态靠拢。
③ 被控制的系统(System):被控制的系统是控制器所管理的实际资源或组件集合。这些资源的状态由控制器根据传感器提供的信息进行调整,使其符合用户定义的期望状态。
外界通过修改资源 spec 来控制资源,控制器比较资源 spec 和 status,从而计算一个 diff,diff 最后会用来决定对系统进行什么样的控制操作,控制操作会使得系统产生新的输出,并被传感器以资源 status 形式上报,控制器的各个组件将都会是独立自主地运行,不断使系统向 spec 表示终态趋近。
2、Sensor
① Reflector:是一个用于从 Kubernetes API 服务器获取资源对象列表的组件。观察 Kubernetes 集群中的资源状态,向集群发送请求,获取资源的最新状态。
② Informer:Informer 是用于监听和跟踪资源对象变更的组件。
③ Indexer:Indexer 是用于存储和管理资源对象的索引的组件。
3、两种 API 设计模式
① 命令式API:开发者需要编写详细的指令,告诉系统如何完成任务,包括每一步的细节。
② 声明式API:开发者定义所需的最终状态,系统负责根据这些状态自动完成相应的操作以使系统达到所需状态。
Kubernetes 所采用的控制器模式,是由声明式 API 驱动的。确切来说,是基于对 Kubernetes 资源对象的修改来驱动的;