> For the complete documentation index, see [llms.txt](https://bohans.gitbook.io/devops/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bohans.gitbook.io/devops/kubernetes/ji-chu-zhi-shi/zhong-jian-jian-rong-qi-hua.md).

# 中间件容器化

在Kubernetes中，可以使用包管理工具<mark style="color:blue;">**Operator**</mark>和<mark style="color:blue;">**Helm**</mark>来管理比较复杂的中间件。

## 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即可。**
