kubernetes-handbook/develop/operator.md

61 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Operator
Operator是由[CoreOS](https://coreos.com)开发的用来扩展Kubernetes API特定的应用程序控制器它用来创建、配置和管理复杂的有状态应用如数据库、缓存和监控系统。Operator基于Kubernetes的资源和控制器概念之上构建但同时又包含了应用程序特定的领域知识。创建Operator的关键是CRD自定义资源的设计。[awesome-operators](https://github.com/operator-framework/awesome-operators) 中罗列了目前已知的 Operator。
## 工作原理
Operator是将运维人员对软件操作的知识给代码化同时利用Kubernetes强大的抽象来管理大规模的软件应用。
Operator使用了Kubernetes的自定义资源扩展API机制如使用[CRD](../concepts/custom-resource.md)CustomResourceDefinition来创建。Operator通过这种机制来创建、配置和管理应用程序。
Operator基于Kubernetes的以下两个概念构建
- 资源:对象的状态定义
- 控制器:观测、分析和行动,以调节资源的分布
## Operator 用途
若您有以下需求,可能会需要用到 Operator
- 按需部署一个应用程序
- 需要备份和恢复应用程序的状态(如数据库)
- 处理应用程序代码的升级以及相关更改,例如数据库架构或额外的配置设置
- 发布一个服务要让不支持Kubernetes API的应用程序能够发现
- 模拟整个或部分集群中的故障以测试其弹性
- 在没有内部成员选举程序的情况下为分布式应用程序选择领导者
## 一个Operator用途的详细示例
下面是一个使用 Operator 的详细示例。
- 一个名为SampleDB的自定义资源您可以将其配置到集群中。
- 确保正在运行的Deployment的Pod中包含Operator的控制器部分。
- Operator代码的容器镜像。
- 查询控制平面以找出配置了哪些SampleDB资源的控制器代码。
- Operator的核心是告诉API Server如何使现实与代码里已配置的资源匹配。
- 如果添加新的SampleDBOperator将设置PersistentVolumeClaims以提供持久的数据库存储设置StatefulSet以运行SampleDB并设置Job来处理初始配置。
- 如果删除它Operator将建立快照然后确保删除了StatefulSet和卷。
- Operator还管理常规数据库备份。对于每个SampleDB资源Operator确定何时创建可以连接到数据库并进行备份的Pod。这些Pod将依赖于ConfigMap和/或具有数据库连接详细信息和凭据的Secret。
- 由于Operator旨在为其管理的资源提供强大的自动化功能因此会有其他支持代码。对于此示例代码将检查数据库是否正在运行旧版本如果是则创建Job对象为您升级数据库。
## 创建Operator
Operator本质上是与应用息息相关的因为这是特定领域的知识的编码结果这其中包括了资源配置的控制逻辑。下面是创建Operator的基本步骤
1. 在单个Deployment中定义Operatorhttps://coreos.com/operators/etcd/latest/deployment.yaml
2. 需要为Operator创建一个新的自定义类型[CRD](../concepts/custom-resource.md),这样用户就可以使用该对象来创建实例
3. Operator应该利用Kubernetes中内建的原语如Deployment、Service这些经过充分测试的对象这样也便于理解
4. Operator应该向后兼容始终了解用户在之前版本中创建的资源
5. 当Operator被停止或删除时Operator创建的应用实例应该不受影响
6. Operator应该让用户能够根据版本声明来选择所需版本和编排应用程序升级。不升级软件是操作错误和安全问题的常见来源Operator可以帮助用户更加自信地解决这一问题。
7. Operator应该进行“Chaos Monkey”测试以模拟Pod、配置和网络故障的情况下的行为。
## 参考
- [Operators - coreos.com](https://coreos.com/operators)
- [awesome-operators - github.com](https://github.com/operator-framework/awesome-operators)
- [Writing a Kubernetes Operator in Golang](https://medium.com/@mtreacher/writing-a-kubernetes-operator-a9b86f19bfb9)
- [Introducing Operators: Putting Operational Knowledge into Software - coreos.com](https://coreos.com/blog/introducing-operators.html)
- [Automating Kubernetes Cluster Operations with Operators - thenewstack.io](https://thenewstack.io/automating-kubernetes-cluster-operations-operators/)
- [Operator pattern - kubernetes.io](https://kubernetes.io/docs/concepts/extend-kubernetes/operator)