【k8s学习】Kubernetes Operator简单介绍

【参考】

【本文试图解决以下问题】

  • 什么是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/

简而言之就是观察应用想要的状态是什么?和实际的状态进行对比,如果发现不一致则采取行动:
image.png
1.2 Kubernetes上的有状态应用

什么是有状态(Stateful)应用?如:MySQL,elasticsearch,mongoDB等。或者别的需要存储数据的应用,对于有状态的应用涉及到多个Pod间存在数据的同步等复杂问题。

像MySQL服务我们可以安装在Kubernetes集群外以便以传统的方式进行管理,但有些有状态的应用需要安装在集群内以便更好的进行监控,如Prometheus或Grafana。

关于这块,可以参考我之前的博文《【k8s学习】Kubernetes StatefulSet介绍》:https://www.jianshu.com/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
    • CRDCustom Resource Definitions,即定制化的Kubernetes组件(继承了K8s APIs),像DeploymentServiceConfigMap都属于标准的K8s组件,我们也可以利用CRD创建自己的K8s组件。
  • 加上有状态的应用专有的一些知识技术

以上这些,使有状态应用实现了生命周期的自动化。

4. 谁来创建Kubernetes Operator?

因为有状态的应用管理并不是通用的,所以需要各个应用自己开发一套Operator。比如MySQL Operator可能包含只适用于MySQL的流程,如:

  • 怎么创建mysql集群?
  • 怎么运行这个集群?
  • 怎么同步数据?
  • 怎么更新等等。

所以需要各个团队提供相应的Operator:
image.png

具体查询某个Operator,可以访问官网:https://operatorhub.io/

image.png

另外如果想要创建自己的Operator,可以使用OPERATOR SDK进行开发。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容