Kubernetes的核心能力就建立在“声明式API”和“控制器模式”之上。 核心概念: 自定义控制器,自定义资源。
- 自定义控制器,保持声明状态和实际状态一致。
- 自定义资源,就是声明资源内容的,在etcd中注册一个新的资源类型,然后创建该类型对应的内容(对象)。
控制器
控制器模式的典型工作流程,外部输入一个“期望值”,一个“控制器”不断观测“环境状态”的“实际值”和“期望值”之间的差异,然后不断调整“实际值”向“期望值”靠拢。这个过程可以称为“调谐”。
Kubernetes中通过“声明式API”定义了一系列的“资源对象”,然后通过很多“控制器”来“调谐”这些资源对象的实际状态向期望状态靠拢,从而实现整个集群“尽可能”靠拢配置中声明的期望状态。
自定义资源
Operator模式让用户能够通过自定义资源来管理自己的应用。这种模式的本质是将一个领域运维人员的运维经验,也就是把他们所维护的应用应该怎么部署、出现异常了应该怎么恢复这一系列运维过程在Kubernetes上的操作程序化,并交给自定义控制器去实施。
Kubernetes 提供了两种方式供你向集群中添加定制资源:
- CRD 相对简单,创建 CRD 可以不必编程。
- API 聚合需要编程, 但支持对 API 行为进行更多的控制,例如数据如何存储以及在不同 API 版本间如何转换等。
Kubernetes 提供这两种选项以满足不同用户的需求,这样就既不会牺牲易用性也不会牺牲灵活性。
代表期望状态的 spec
字段
Kubernetes有很多控制器,每个控制器管理集群状态的一个特定方面,或者说是一个特定的API对象。控制器作用,观察它管理的资源,让其向期望状态,就是spec指定的值演进。控制器对etcd的中api对象信息做监听。