RabbitMQ Kubernetes Operator:集群 Operator 和消息拓扑 Operator
RabbitMQ 团队开发并维护两个 Kubernetes Operator:RabbitMQ Cluster Kubernetes Operator 和 RabbitMQ Messaging Topology Operator。
-
RabbitMQ Cluster Kubernetes Operator 可在 Kubernetes 上自动配置、管理和运维 RabbitMQ 集群。
-
RabbitMQ Messaging Topology Operator 在通过 RabbitMQ Cluster Kubernetes Operator 部署的 RabbitMQ 集群中管理 RabbitMQ 消息拓扑。
Kubernetes Operator 是 Kubernetes 的软件扩展,提供用于管理应用程序、服务及其组件的自定义资源。
在此处及其他与 Operator 相关的信息中,“Operator”(首字母大写 O)用于指代 Kubernetes Operator 模式的实现,“operator”(首字母小写 o)用于指代技术运维工程师(管理员)。
RabbitMQ Cluster Kubernetes Operator
RabbitMQ Cluster Kubernetes Operator 提供了一种一致且简单的方式来将 RabbitMQ 集群部署到 Kubernetes 并运行它们,包括“第二天”(持续)运维。使用 Operator 部署的 RabbitMQ 集群可供在 Kubernetes 上或 Kubernetes 外部运行的应用程序使用。
Cluster Operator 的文档包含多个指南
- 限制
- 快速入门指南 (RabbitMQ Cluster Kubernetes Operator)
- 安装 RabbitMQ Cluster Kubernetes Operator
- 配置 RabbitMQ Cluster Operator 的默认设置
- RabbitMQ kubectl 插件
- 使用 RabbitMQ Cluster Kubernetes Operator
- 在 Kubernetes 上监控 RabbitMQ 集群
- 在 Kubernetes 上排查 RabbitMQ 集群问题
- 升级 RabbitMQ Kubernetes Operator
- 在 Openshift 上使用 RabbitMQ Kubernetes Operator
此外,还有一个单独的 Operator 用于管理集群对象,这些对象统称为消息拓扑:虚拟主机、用户、队列等。这在以下指南中有所介绍:
- 安装 RabbitMQ Messaging Topology Operator
- 使用 RabbitMQ Messaging Topology Operator
- 在消息拓扑 Kubernetes Operator 中使用 TLS
- 排查 Messaging Topology Kubernetes Operator 问题
该 Operator 提供以下主要功能:
- 配置单节点和多节点 RabbitMQ 集群
- 当已部署集群的实际状态与预期状态不匹配时,自动进行协调
- 使用 Prometheus 和 Grafana 监控 RabbitMQ 集群
- RabbitMQ 集群的扩展和自动化的 滚动升级
RabbitMQ Cluster Kubernetes Operator 设计原则
RabbitMQ Cluster Kubernetes Operator 的设计遵循以下理念和概念:
- 应提供 RabbitMQ 节点配置 的灵活性
- 应尽可能提供合理的安全默认值
- 应简化 RabbitMQ 的运维
遵循这些理念,Operator 不会修改现有的 RabbitmqCluster spec。这意味着,当 Operator 升级时,如果存在新的默认值,它不会自动将现有的 RabbitmqCluster 实例更新到最新版本,或者不会自动更新到最新版本的 RabbitMQ。
唯一的例外是,当用户操作删除了 spec 中的某个字段时,Operator 会将其设置为默认值。
限制
RabbitMQ Cluster Operator 协调
已删除的 Secret 对象将被 Kubernetes Operator 重新创建,但新生成的 Secret 值将不会部署到 RabbitMQ 集群。例如,如果删除了管理员凭据的 Secret,则会创建一个新的 Secret,其中包含新的用户名和密码,但这些不会反映在 RabbitMQ 集群中。对于任何 Secret 值,其工作方式都相同,例如 节点间共享认证 Secret(也称为 Erlang cookie)的值。
RabbitMQ Cluster Operator 功能标志
Cluster Operator 不支持禁用任何 RabbitMQ 功能标志。Operator 会列出所有可用的功能标志,并在集群启动时启用所有这些标志。
RabbitMQ Messaging Topology Operator
RabbitMQ Messaging Topology Operator 支持通过 Kubernetes 声明式 API 管理 RabbitMQ 消息拓扑对象。
Messaging Topology Operator 的文档结构如下:
- 限制
- 安装 RabbitMQ Messaging Topology Operator
- 使用 RabbitMQ Messaging Topology Operator
- Messaging Topology Operator 的 TLS
- 排查 Messaging Topology Operator 问题
限制
自定义默认凭据导致 401 未授权
Topology Operator 依赖于 Cluster Operator 创建的默认凭据 Secret。如果 RabbitmqCluster spec 在 additionalConfig 中使用 default_user 和 default_pass 键定义了默认用户,这将导致为默认凭据 Secret 生成错误的凭据。由于凭据不正确,Topology Operator 的所有操作都会出错,并在日志中显示以下消息:
Error: API responded with a 401 Unauthorized
有关更多详细信息和解决方法,请参阅 排查 Messaging Topology Operator 问题 部分。
这些 Kubernetes Operator 的源代码
这两个 Operator 都是开源的。您可以在 GitHub 上为其开发做出贡献:
这些 Kubernetes Operator 的许可证
这两个 Operator 均根据 Mozilla Public License 2.0 发布。
支持的 Kubernetes 版本
RabbitMQ Operator 可用于任何符合 Kubernetes 标准的平台。如果您在使用特定 Kubernetes 发行版时遇到问题,请 查看 GitHub 仓库中的已知问题。
有关 Operator 支持的 Kubernetes 和 RabbitMQ 服务器版本的更多信息,请查阅 README。