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

2016 年秋天 , 原 CoreOS 公司的工程师邓洪超像往常一样 , 来到了同事位于福斯特城(Foster City)的公寓进行结对编程 。 每周四相约在这里结对 , 是这两位工程师多年来约定俗成的惯例 。

↑CoreOS 当年开发 etcd 所在的车库

不过 , 与以往不同的是 , 相比于往常天马行空般的头脑风暴 , 这一次 , 这两位工程师的脑子里正在琢磨着的 , 是一个非常“接地气”的小项目 。

我们知道 , Kubernetes 项目实现“容器编排”的核心 , 在于一个叫做“控制器模式”的机制 , 即:通过对 etcd 里的 API 对象的变化进行监视(Watch) , Kubernetes 项目就可以在一个叫做 Controller 的组件里对这些变化进行响应 。 而无论是 Pod 等应用对象 , 还是 iptables、存储设备等服务对象 , 任何一个 API 对象发生变化 , 那么 Kubernetes 接下来需要执行的响应逻辑 , 就是对应的 Controller 里定义的编排动作 。

所以 , 一个自然而然的想法就是 , 作为 Kubernetes 项目的用户 , 我能不能自己编写一个 Controller 来定义我所期望的编排动作呢?比如:当一个 Pod 对象被更新的时候 , 我的 Controller 可以在“原地”对 Pod 进行“重启” , 而不是像 Deployment 那样必须先删除 Pod , 然后再创建 Pod 。

推荐阅读