一般来说,扩展api server (或者说添加自定义 resource )有两种方式:
1. 通过创建CRDs, 主API server可以处理 CRDs 的 REST 请求(CRUD)和持久性存储。简单,不需要其他的编程。更适用于声明式的API,和kubernetes高度集成统一。
2. API Aggregation, 一个独立的API server。主API server委托此独立的API server处理自定义resource。 需要编程,但能够更加灵活的控制API的行为,更加灵活的自定义存储,以及与API不同版本之间的转换。一般更适用于命令模式,或者复用已经存在REST API代码,不直接支持kubectl 和 k8s UI, 不支持scope resource in a cluster/namespace.
自定义 resource 可以使你方便的存取结构化的resource 数据。但是只有和controller组合在一起才是声明式API。声明式API允许你定义一个期望的状态。controller通过解读结构化的resource数据,获得期望状态,从而不断的调协期望状态和实际状态。
综上,今天文档中的types.go 应该是给controller来理解CRDs的schema用的。只有掌握了resource的schema,才能解释并得到用户创建的resource API object。
而 kubectl create -f resourcedefinition.yaml 或者 自定义API server, 则定义了RESTful API endpoint. 用于接受 REST 请求,改变 resource 的期望状态。
展开