Custom Resource Definition(CRD)

根据Kubernetes的设计,每种官方内建的资源对象如Node、Pod、Service等的实现都包含以下主要功能。

  • 资源对象的元数据(Schema)的定义:可以将其理解为数据库Table的定义,定义了对应资源对象的数据结构,官方内建资源对象的元数据定义是固化在源码中的。

  • 资源对象的校验逻辑:确保用户提交的资源对象的属性的合法性。

  • 资源对象的CRUD操作代码:可以将其理解为数据库表的CRUD代码,但比后者更难,因为API Server对资源对象的CRUD操作都会保存到etcd数据库中,对处理性能的要求也更高,还要考虑版本兼容性和版本转换等复杂问题。

  • 资源对象相关的“自动控制器”(如RC、Deployment等资源对象背后的控制器):这是很重要的一个功能。因为Kubernetes是一个以自动化为核心目标的平台,用户给出期望的资源对象声明,运行过程中则由资源背后的“自动控制器”负责,确保对应资源对象的数量、状态、行为都始终符合用户的预期。

类似地,每个自定义CRD的开发人员都需要实现上面这些功能

为了减小编程的难度与工作量,API Server的设计者们做出了大量的努力,使得上面前3个功能无须编程实现,直接编写YAML定义文件即可实现。对于唯一需要编程的第4个功能来说,由于API Server提供了大量的基础API库,特别是易用的List-Watch的编程框架,也使得CRD自动控制器的编程难度大大减小。

最后更新于