【参考】
- Kubernetes Operator simply explained in 10 mins:https://www.youtube.com/watch?v=ha3LjlD6g7g --> 本文主要是对这个视频的内容的总结与学习
【本文试图解决以下问题】
- 什么是Kubernetes Operator?
- 为什么要使用Kubernetes Operator?
- 什么时候需要使用Kubernetes Operator?
1. 无状态的应用 vs 有状态应用
1.1 Kubernetes上无状态的应用
首先什么是无状态(Stateless)的应用?比如普通的前端UI项目或是后台java项目(自身不存储数据)都属于无状态的应用。
安装无状态的应用安装通常包含编写Deployment, ConfigMap, Service等组件的yaml,当一个pod宕掉后,Kubernetes通过Control loop会重新生成pod以保持正确的replica,这里不需要额外的备份,因为我们的应用是无状态的。
针对无状态的应用,Kubernetes可以自动化管理应用的整个生命周期。
主要依赖于Kubernetes的Control loop
机制,具体可以参考别的文章介绍:https://theithollow.com/2019/09/16/kubernetes-desired-state-and-control-loops/
1.2 Kubernetes上的有状态应用
什么是有状态(Stateful)应用?如:MySQL,elasticsearch,mongoDB等?;蛘弑鸬男枰娲⑹莸挠τ?,对于有状态的应用涉及到多个Pod间存在数据的同步等复杂问题。
像MySQL服务我们可以安装在Kubernetes集群外以便以传统的方式进行管理,但有些有状态的应用需要安装在集群内以便更好的进行监控,如Prometheus或Grafana。
关于这块,可以参考我之前的博文《【k8s学习】Kubernetes StatefulSet介绍》:http://08643.cn/p/d332d6d078b5
总之,有状态的应用,想要实现其布署、管理、恢复的自动化,并不是一件容易的事情。
2. Kubernetes Operator介绍
Kubernetes Operator主要是为了更好的解决有状态的应用在Kubernetes中的部署、管理、恢复。如:
- 怎么布署这些有状态的应用?
- 如何创建有状态应用的集群(replica>1)?
- 当应用宕掉后如何进行恢复?
另外使用Kubernetes Operator的好处是一份标准的流程,可以在不同的环境中进行使用(如dev/prod等)。
3. 怎么实现对有状态的应用进行管理的?
Kubernetes Operator的工作原理:
- 可以把Kubernetes Operator想象成定制化的Kubernetes Control loop
- Kubernetes Operator使用了
CRD
-
CRD
指Custom Resource Definitions
,即定制化的Kubernetes组件(继承了K8s APIs),像Deployment
,Service
,ConfigMap
都属于标准的K8s组件,我们也可以利用CRD创建自己的K8s组件。
-
- 加上有状态的应用专有的一些知识技术
以上这些,使有状态应用实现了生命周期的自动化。
4. 谁来创建Kubernetes Operator?
因为有状态的应用管理并不是通用的,所以需要各个应用自己开发一套Operator。比如MySQL Operator可能包含只适用于MySQL的流程,如:
- 怎么创建mysql集群?
- 怎么运行这个集群?
- 怎么同步数据?
- 怎么更新等等。
具体查询某个Operator,可以访问官网:https://operatorhub.io/
另外如果想要创建自己的Operator,可以使用OPERATOR SDK进行开发。