亲历者说: Kubernetes API 与 Operator, 不为人知的开发者战争(12)

举个例子 , 假设下面这个 YAML 文件定义的 , 是一个 3 节点 etcd 集群的描述:

有了这样一个 etcdCluster 对象 , 那么开发者接下来要做的事情 , 就是编写一个 etcdCluster Controller , 使得当任何用户提交这样一个 YAML 文件给 Kubernetes 之后 , 我们自己编写的 Controller 就会响应 etcdCluster “增加”事件 , 为用户创建出 3 个节点的 etcd 集群出来 。 然后 , 它还会按照我们在 Controller 编写的事件响应逻辑 , 自动的对这个集群的节点更新、删除等事件做出处理 , 执行我定义的其他运维功能 。 像这样一个 etcdCluster Controller , 就是 etcd Operator 的核心组成部分了 。

而作为 etcd 的开发者 , CoreOS 的两位工程师把对 etcd 集群的运维工作编写成 Go 语言代码 , 一点都不困难 。 可是 , 要完成这个 Operator 真正困难在于:Kubernetes 只认识 Pod、Node、Service 等这些 Kubernetes 自己原生的 API 对象 , 它怎么可能认识开发者自己定义的这个 etcdCluster 对象呢?

在当时 , Kubernetes 项目允许用户自己添加 API 对象的插件能力 , 叫做 Third Party Resource , 简称:TPR 。

推荐阅读