跳至主内容

RabbitMQ Kubernetes Operator 达到 1.0 版本

·8 分钟阅读
Yaron Parasol

我们很高兴地宣布,RabbitMQ Kubernetes Operator 已正式上市。RabbitMQ Operator 可以轻松地在任何已认证的 Kubernetes 发行版上一致地配置和管理 RabbitMQ 集群。Operator 向 Kubernetes 容器编排系统提供有关如何配置和控制特定应用程序的信息。Kubernetes (下称 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 拥有全面的资源。Rabbit MQ K8s Operator 由 2 个构建块组成

  • 自定义资源:对原生 K8s 资源的扩展,用于管理特定有状态平台或应用程序的自定义状态。在本例中,自定义资源反映了 RabbitMQ 集群的配置大小和状态。
  • 自定义控制器:K8s 控制器是一个非终止循环,用于调节 ReplicaSet、StatefulSet 或 Deployment 等标准 K8s 资源的状态。自定义控制器添加了一个非终止的控制循环,其中包含自定义逻辑,用于调节自定义资源的状态。对于 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 对于第一天的任务很有用,但在处理用户触发或 K8s 触发的第二天运营时,它带来的好处更大。

安装后任务

如任何开发人员和运维人员所知,配置好 RabbitMQ 集群只是旅程的开始。还有各种生命周期事件需要处理:

  • 随着应用程序消息量的增加(由于增加了功能或需求增长),扩展集群。
  • 当节点崩溃或网络中断时,集群的自我修复。
  • 轮换证书。
  • 在需要新的 RabbitMQ 版本进行安全补丁或新功能时,实现零停机时间升级集群。

上述许多过程都需要节点的平稳终止、节点启动后的某些 RabbitMQ API 调用,或更复杂的流程,这些流程包含一系列 K8s 生命周期事件和 RabbitMQ 集群事件。这正是 Operator 的价值所在。

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

Operator 现在支持第二天的 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,该 Operator 将 RabbitMQ 的一些 API 与 K8s 声明式 API 结合起来,从而允许创建用户、队列和交换器。

我们欢迎您就 RabbitMQ 提供反馈、功能请求、错误报告和任何问题。:

© . This site is unofficial and not affiliated with VMware.