跳到主要内容

RabbitMQ Kubernetes Operator 达到 1.0 版本

·8 分钟阅读
Yaron Parasol

我们很高兴地宣布,用于 Kubernetes 的 RabbitMQ Operator 现已正式发布。 RabbitMQ Operator 使在任何经过认证的 Kubernetes 发行版上一致地配置和管理 RabbitMQ 集群变得容易。 Operator 会告知 Kubernetes 容器编排系统如何配置和控制特定的应用程序。 Kubernetes Operator 模式(以下简称 K8s Operator 模式)是一种扩展 K8s API 和状态管理的方法,使其能够配置和管理自定义资源,即默认 K8s 部署中未提供的资源。 在本文中,我们将讨论 Operator 如何使 K8s 系统能够控制 RabbitMQ 集群。

从哪里开始?

如果您是 K8s 新手,请先学习 K8s 和 kubectl 的基础知识,然后再尝试使用 Operator。 您还可以访问 Kube Academy 了解更多深入的入门知识。 观看 TGIR 的这一集,了解使用 Operator 部署和监控 RabbitMQ 集群有多么容易。 接下来,您可以尝试快速入门指南。 在一两分钟内,您将拥有 Operator 以及您创建的第一个 Operator RabbitMQ 集群实例。

想要了解更多? 查看 Operator YAML 示例,以快速部署高级集群。 有关支持的全部功能集,请查看文档

Rabbit K8s Operator

建议您首先熟悉 K8s 的基础知识。 如果您需要复习,VMware 的 Kube Academy 提供了全面的资源集。 RabbitMQ K8s Operator 由 2 个构建块组成

  • 自定义资源:对原生 K8s 资源的扩展,以便管理特定有状态平台或应用程序的自定义状态。 在我们的例子中,自定义资源反映了 RabbitMQ 集群的配置大小和状态
  • 自定义控制器:K8s 控制器是一个非终止循环,用于调节标准 K8s 资源(如 ReplicaSet、StatefulSet 或 Deployment)的状态。 自定义控制器添加了一个具有自定义逻辑的非终止控制循环,以调节自定义资源的状态。 在 RabbitMQ 集群的情况下,控制器可以解决集群和节点配置的更改。

RabbitMQ 集群 Operator 的价值是什么?

RabbitMQ 集群 Operator(又名 Operator)是 K8s 管理的状态与 RabbitMQ 配置和状态之间的桥梁。 RabbitMQ 集群 Operator 有助于简化两种类型的任务

  • 新集群的配置
  • 安装后任务,由 K8s 管理

配置新的 RabbitMQ 集群

在 K8s 上手动创建新的 RabbitMQ 集群是一个多步骤的过程,Operator 正在自动化这个过程

  1. 将 RabbitMQ 配置文件创建为 ConfigMap,以便 RabbitMQ 容器可以将其作为文件挂载
  2. 设置 RabbitMQ 所需的 K8s 密钥(TLS 证书、默认用户密码等)
  3. 创建 StatefulSet,它将管理集群节点(作为 Pod)
  4. 创建无头服务(没有集群 IP 的服务)以管理 RabbitMQ 节点发现
  5. 为 RabbitMQ 客户端创建服务以访问集群

Operator 不是自动化此过程的唯一方法,但它具有将所有 RabbitMQ 配置映射到 K8s 描述符和自定义资源的优势。 这意味着存在关于集群状态的单一事实来源,用户可以使用 Gitops 管理其集群配置。

通过使用 Operator 配置 RabbitMQ 集群,用户可以享受以下几个好处

  • 使用单个命令通过声明式 API 创建具有任何设置的 RabbitMQ 集群。 Operator 正在自动化配置构成集群的复杂 K8s 资源集:例如服务、Pod、StatefulSet、持久卷等
  • Operator 附带一组 YAML 示例,因此在大多数情况下,您几乎无需费力即可拥有开发甚至生产级集群。
  • 集群创建后,它具有 K8s 状态和描述,您可以观察以了解您的 RMQ 集群是否已准备就绪。 RabbitMQ 内置了对 Prometheus 的支持。 节点和集群指标可以使用 Grafana 可视化。
  • Operator 更进一步,显示 RabbitMQ 集群的状态条件。 可能的状态条件是
    • ClusterAvailable - 客户端应用程序可以访问 RabbitMQ
    • AllReplicasReady - RabbitMQ 集群完全可用
    • ReconcileSuccess - 自定义资源已成功协调。 如果为 false,则可能表示用户需要干预(例如,如果启用了 TLS 但密钥不存在)。
  • K8s 控制器现在可以调节构成集群的资源集:RabbitMQ 节点、路由服务、节点注册表服务和卷。 如果根据 K8s 存活探针,这些资源中的任何一个不可用,K8s 将自动修复它

虽然 Operator 对于第 1 天的任务很有用,但当我们谈论由用户或 K8s 触发的第 2 天操作时,它会带来更大的好处。

安装后任务

对于任何开发人员和运维人员来说,配置 RabbitMQ 集群只是旅程的开始。 有各种生命周期事件需要处理

  • 当应用程序消息传递量因附加功能或需求增长而增加时,扩展集群
  • 当节点崩溃或网络中断时,集群自愈
  • 轮换证书
  • 当需要新版本的 RabbitMQ 进行安全修补或新功能时,零停机升级集群

上述许多过程都需要优雅地终止节点、在节点启动后调用一些 RabbitMQ API,或者更复杂的流程,这些流程具有 K8s 生命周期事件和 RabbitMQ 集群事件的序列。这正是 Operator 的价值所在。

  • 集群 Operator 将允许 RabbitMQ 用户使用简单的 K8s CLI 声明式命令来处理所有这些问题。
  • Operator 将使用 K8s 构建块和自定义控制器逻辑来自动化这些复杂流程,这些逻辑负责处理 RabbitMQ 管理任务

Operator 现在支持第 2 天 RabbitMQ 操作的核心,例如:

  • 重新配置
  • 启用/禁用插件
  • 自愈
  • 扩展
  • 就地升级
  • 证书轮换 - 使用滚动更新

将来,Operator 可以升级以提供新流程。 例如,新版本的 Operator 可能会随 RabbitMQ 的新主要版本一起发布。 Operator 模式的使用意味着我们可以提供特定的逻辑,例如,将现有的 RabbitMQ 集群升级到新的主要版本,而不会丢失消息且不会停机。 新 Operator 版本的存在不会强制用户升级现有集群; K8s 仍然能够管理这些集群。

只有 K8s Operator 才能以如此优雅且无风险的方式自动化如此复杂和精细的过程。 这是一个关于 RabbitMQ 如何通过自动化就地升级过程来使用户免受痛苦和错误的示例。 该图列出了用户需要执行的手动步骤,以便对集群进行滚动升级(没有 Operator)。

现在观看 Gerhard 介绍有关在 K8s 上可靠运行 RabbitMQ 的更多高级主题。

但是等等 - 还有更多

Operator 附带一个 kubectl 插件,该插件提供了许多命令来简化您的生活。 如 此处 所述,您可以使用 krew 安装 kubectl 插件。 一些方便的命令包括安装集群 Operator 以及创建、列出和删除 RabbitMQ 集群。 其他针对特定 RabbitMQ 集群的命令包括打印默认用户密钥、打开 RabbitMQ 管理 UI、在所有 RabbitMQ 节点上启用调试日志记录以及运行 perf-test

下一步是什么?

集群 Operator 为用户提供了创建和管理集群的强大功能。 仍然有更广泛的功能范围需要支持,具体取决于您的请求和反馈。

一些示例包括

  • 使用 Istio 进行节点之间以及客户端与流量之间流量的加密/解密的拓扑示例
  • 优雅地缩减
  • 监控 Operator - Operator 将以 Prometheus 格式报告指标
  • 使用 RMQ 和 Operator 元数据标记集群资源
  • 在其他 K8s 提供商上进行测试(目前在 Tanzu Kubernetes Grid 和 GKE 上进行测试)

此外,我们计划添加另一个 Operator,它将使用 K8s 声明式 API 包装 RabbitMQ 的一些 API,从而允许创建用户、队列和交换机。

我们欢迎您提供关于 RabbitMQ 的反馈、功能请求、错误报告以及任何问题:

© . All rights reserved.