中间件容器化

在Kubernetes中,可以使用包管理工具OperatorHelm来管理比较复杂的中间件。

Operator和Helm的区别

  • Operator更倾向于管理复杂的有状态服务,比如MySQL集群、Redis集群、TiDB集群等;

    Helm更倾向于管理无状态应用的部署,比如某些不需要持久化数据的中间件、不需要实现额外功能的服务等。

  • Helm适合部署不需要额外功能的服务,这里提到的额外功能有备份、回滚以及更高级的用法。如果想要实现这些逻辑,使用Helm不容易实现,或者无法实现。

    而Operator可以通过代码来实现相关的逻辑,这也是为什么Operator更倾向于管理更为复杂的服务。

  • 写一个Helm的Chart(Helm包的名称叫Chart),只需要将相关的模板文件放在Chart的templates目录,然后抽离相关的配置,放置于values.yaml,模板文件通过go template语法即可生成相关的资源文件并加载到Kubernetes中。

    Operator需要自己动手编写一个控制器,这个控制器可以解析自己定义的CRD(Custom Resource Define,自定义资源类型),然后生成相关的资源文件并加载到Kubernetes中。

Helm管理中间件集群的流程

使用Helm管理中间件集群的流程如下:

  1. 首先集群中需要有一个Helm的客户端,用来执行增删改查命令,和Kubectl类似。

  2. 之后需要找到对应的Chart(可以在中间件的官网或者GitHub中查找),比如安装Redis、Zookeeper集群的包。这个包和镜像类似,都是放在一个仓库中,镜像放在镜像仓库,Chart放在Chart仓库

  3. 如果是新建集群,只需要执行helm install命令即可一键式创建该集群。

  4. 如果想要更新配置,直接使用helm upgrade即可。

Operator管理中间件的流程

使用Operator管理中间件的流程如下:

  1. 第一步是找到对应的Operator(和Helm类似,可以在GitHub或者其官方网站上查找)。

  2. 创建对应的控制器,用来解析一些自定义资源逻辑的程序

  3. 之后创建自定义资源即可,对应的控制器会解析自定义资源实现相关功能,比如创建集群、扩容、备份等。

相对于Helm需要安装单独的客户端工具,Operator不需要单独的客户端工具,使用kubectl即可。

最后更新于