跳至主内容

安装 RabbitMQ 消息拓扑操作符

概述

本指南介绍了如何在 Kubernetes 集群中安装 RabbitMQ 消息拓扑操作符。

兼容性

该操作符要求:


安装

安装操作符有两种选择:

  1. 使用 cert-manager 安装
  2. 使用生成的证书安装

使用 cert-manager 安装

首先,在您的集群上安装 1.2.0 或更高版本的 cert-manager。例如,对于 1.3.1 版本,请运行

kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.3.1/cert-manager.yaml

然后,运行以下命令来安装操作符:

kubectl apply -f https://github.com/rabbitmq/messaging-topology-operator/releases/latest/download/messaging-topology-operator-with-certmanager.yaml

使用生成的证书安装

如果不安装 cert-manager,您需要自行生成准入控制器 (admission webhooks) 所需的证书,并将其包含在操作符和 Webhook 的清单 (manifests) 中。

下载最新的发布清单:https://github.com/rabbitmq/messaging-topology-operator/releases/latest/download/messaging-topology-operator.yaml

消息拓扑操作符具有多个 准入 Webhook。它们的端点已启用 TLS,并需要一个在下载的发布清单中多处使用的 Webhook 证书。

以下章节介绍了安装 Webhook 准入证书所涉及的步骤。

生成密钥/证书对

首先,为 Webhook 准入生成一个或多个密钥/证书对。这些证书必须对 webhook-service.rabbitmq-system.svc 有效。

创建 K8S Secret

接下来,在 rabbitmq-system 命名空间中创建一个名为 webhook-server-cert 的 Kubernetes Secret 对象。该 Secret 对象必须包含以下键:

  • ca.crt (CA 证书)
  • tls.crt (叶子/Webhook 证书)
  • tls.key (叶子/Webhook 私钥)

该 Secret 将被挂载到运行所有 Webhook 的操作符容器中。

例如:

apiVersion: v1
kind: Secret
type: kubernetes.io/tls
metadata:
name: webhook-server-cert
namespace: rabbitmq-system
data:
ca.crt: # ca cert that can be used to validate the webhook's server certificate
tls.crt: # generated certificate
tls.key: # generated private key

在发布清单中使用生成的证书

最后,将 Webhook 的 CA 证书添加到发布清单 messaging-topology-operator.yaml 中。这里有多个准入 Webhook,每种 CRD 类型对应一个。

在清单中查找关键字 clientConfig,并将 Webhook CA 证书粘贴到 clientConfig.caBundle 下。由于有多个 Webhook,请在多个位置执行此操作。

下面的示例展示了如何将 CA 证书添加到 queues.rabbitmq.com 验证 Webhook 中:

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
annotations:
name: validating-webhook-configuration
webhooks:
- admissionReviewVersions:
- v1
clientConfig:
caBundle: # generated ca certificate goes in here
service:
name: webhook-service
namespace: rabbitmq-system
path: /validate-rabbitmq-com-v1beta1-queue
failurePolicy: Fail
name: vqueue.kb.io
rules:
- apiGroups:
- rabbitmq.com
...```


Then, to install the Operator, run the following command:

```bash
kubectl apply -f messaging-topology-operator.yaml

至此,RabbitMQ 消息拓扑操作符已安装成功。

使用非默认的 Kubernetes 内部域名

默认情况下,Kubernetes 内部域名是 .cluster.local。这可以在 kubeadm 中配置为其他值,例如 my.cluster.domain。在这种情况下,消息拓扑操作符可以将域名附加到其与 RabbitMQ 交互时使用的连接字符串中。

要配置消息拓扑操作符在连接字符串中附加域名,请将环境变量 MESSAGING_DOMAIN_NAME 设置为您的域名,例如 ".my.cluster.domain"

设置此环境变量的步骤:

  • 发布页面 下载安装清单。
  • 打开清单并搜索名为 messaging-topology-operator 的 Deployment。
  • env 列表中添加一个新元素,名称为 MESSAGING_DOMAIN_NAME,值为您的域名。

Deployment 相关的清单应该如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
[...]
name: messaging-topology-operator
namespace: rabbitmq-system
spec:
template:
[...]
spec:
containers:
- command:
- /manager
env:
- name: OPERATOR_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MESSAGING_DOMAIN_NAME
value: "my.cluster.domain"

应用编辑后的清单。一旦 Pod 应用了更改,后续发送到 RabbitMQ 的 HTTP API 请求将会在连接字符串中附加该域名。

修改 RabbitMQ 消息拓扑操作符的默认配置

本节介绍了如何在 Kubernetes 集群中修改 RabbitMQ 消息拓扑操作符的配置。

要更改配置,请编辑拓扑操作符的部署清单,添加或更新配置环境变量。这是随 GitHub 上每个新版本 RabbitMQ 集群操作符一起发布的 YAML 清单文件。可设置的环境变量列表请见 拓扑操作符环境变量 表格。

参数

下表列出了可以在部署清单中设置的拓扑操作符环境变量。

变量名称设置后的效果未设置时的效果
OPERATOR_SCOPE_NAMESPACE操作符将协调和监视 RabbitmqClusters 的命名空间(或命名空间列表,独立于安装命名空间)。使用逗号分隔,不要使用空格,例如 "project-1,project-2,rabbitmq-testing"监视并协调所有命名空间
ENABLE_DEBUG_PPROF默认值为 false,因为此变量不应用于生产环境。设置为 true 时,它会在操作符 Pod 的指标端口上暴露一组用于 CPU 和 内存分析 (pprof) 的调试端点。不会在操作符 Pod 上暴露 pprof 调试端点。
SYNC_PERIOD配置操作符定期协调所有受管对象。它接受带有时间后缀的字符串值,例如 "15m"。它支持 time.ParseDuration 函数可解析的任何值。默认情况下,同步周期使用库默认的 10 小时。要禁用定期协调,请将值设置为 "0"仅在资源更新时进行协调。
LEASE_DURATION非领导者候选者等待强制获取领导权的时间(秒)。根据上次观察到确认的时间计算。默认为 15 秒。值必须是字符串,例如 "30"默认值设置为 15 秒。
RENEW_DEADLINE续订截止期限是当前控制平面在放弃之前重试刷新领导权的时间。默认为 10 秒。值必须是字符串,例如 "10"默认值设置为 10 秒。
RETRY_PERIOD重试周期是 LeaderElector 客户端在尝试动作之间应等待的时间。默认为 2 秒。值必须是字符串,例如 "3"默认值设置为 2 秒。
CONNECT_USING_PLAIN_HTTP即使集群启用了 TLS,也使用普通 HTTP 与 RabbitMQ 集群通信。默认为 false默认值设置为 false,将通过 HTTPS 通信。

旧版本操作符

要安装特定版本的操作符,请从 操作符发布页面 获取清单链接。强烈建议使用最新版本。

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