Operator
Operator基于Third Party Resources扩展了新的应用资源,并通过控制器来保证应用处于预期状态。比如etcd operator通过下面的三个步骤模拟了管理etcd集群的行为:
- 通过Kubernetes API观察集群的当前状态;
- 分析当前状态与期望状态的差别;
- 调用etcd集群管理API或Kubernetes API消除这些差别。
如何创建Operator
- Operator自动创建一个Third Party Resources资源类型,用户可以用该类型创建应用实例
- Operator应该利用Kubernetes内置的Serivce/ReplicaSet等管理应用
- Operator应该向后兼容,并且在Operator自身退出或删除时不影响应用的状态
- Operator应该支持应用版本更新
- Operator应该测试Pod失效、配置错误、网络错误等异常情况
为了方便描述,以Etcd Operator为例,具体的链接可以参考-。
在Kubernetes部署Operator:
通过在Kubernetes集群中创建一个deploymet实例,来部署对应的Operator。具体的Yaml示例如下:
对应的有状态服务yaml文件示例如下:
部署对应的有状态服务:
其他示例
- https://github.com/sapcc/kubernetes-operators
- https://github.com/krallistic/kafka-operator
- https://github.com/upmc-enterprises/elasticsearch-operator
- https://github.com/rosskukulinski/rethinkdb-operator
与其他工具的关系
- StatefulSets:StatefulSets为有状态服务提供了DNS、持久化存储等,而Operator可以自动处理服务失效、备份、重配置等复杂的场景。
- Puppet:Puppet是一个静态配置工具,而Operator则可以实时、动态地保证应用处于预期状态
- Helm:Helm是一个打包工具,可以将多个应用打包到一起部署,而Operator则可以认为是Helm的补充,用来动态保证这些应用的正常运行