安装 RabbitMQ 消息拓扑运算符
概述
本指南介绍了在 Kubernetes 集群中安装 RabbitMQ 消息拓扑运算符。
兼容性
该运算符需要
- Kubernetes 1.19 或更高版本
- RabbitMQ 集群运算符 1.7.0+(否则,RabbitMQ 消息拓扑运算符将无法启动)
安装
安装运算符有两种选择
- 使用 cert-manager 安装
- 安装生成的证书
使用 cert-manager 安装
首先,在您的集群上安装 cert-manager 版本 1.2.0+。例如,对于版本 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 使用的证书,并将它们包含在运算符和 webhooks 清单中。
消息拓扑运算符有多个 admission webhooks。它们的端点已启用 TLS,并且需要 webhook 证书,该证书必须在下载的发布清单中的多个位置使用。
以下部分解释了安装 webhook admission 证书所涉及的步骤。
生成密钥/证书对
首先,为 webhook admission 生成一个或多个密钥/证书对。这些证书必须对 webhook-service.rabbitmq-system.svc
有效。
创建 K8S Secret
接下来,在 rabbitmq-system
命名空间中创建一个名为 webhook-server-cert
的 Kubernetes secret 对象。secret 对象必须包含以下键
ca.crt
(CA 证书)tls.crt
(leaf/webhook 证书)tls.key
(leaf/webhook 私钥)
secret 将被挂载到 Operator 容器,所有 webhooks 将从中运行。
例如
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
。有多个 admission webhooks,每种 CRD 类型一个。
在清单中查找关键字 clientConfig
,并将 webhook CA 证书粘贴到 clientConfig.caBundle
下。由于有多个 webhooks,请在多个位置执行此操作。
下面的示例显示了如何将 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"
。
要设置此环境变量
- 从 releases 下载安装清单
- 打开清单并搜索名称为
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 时,它会在 Operator Pod 的指标端口上公开一组调试端点,用于 CPU 和 使用 pprof 对 Operator 进行内存分析。 | pprof 调试端点不会在 Operator Pod 上公开。 |
SYNC_PERIOD | 配置运算符定期协调所有拥有的对象。它接受带有时间后缀的字符串值,例如“15m”。它接受 time.ParseDuration 函数可解析的任何值。默认情况下,同步周期使用库默认值 10 小时。要禁用定期协调,请将值设置为 | 仅当资源更新时才会发生协调。 |
LEASE_DURATION | 非领导者候选人将等待强制获取领导权的时间(以秒为单位)。这是根据上次观察到的确认时间来衡量的。默认为 15 秒。该值必须是字符串,例如 | 默认值设置为 15 秒。 |
RENEW_DEADLINE | 续订截止时间是 acting controlplane 在放弃之前重试刷新领导权的时间。默认为 10 秒。该值必须是字符串,例如 | 默认值设置为 10 秒。 |
RETRY_PERIOD | 重试周期是 LeaderElector 客户端在尝试操作之间应等待的持续时间。默认为 2 秒。该值必须是字符串,例如 | 默认值设置为 2 秒。 |
CONNECT_USING_PLAIN_HTTP | 即使集群启用了 TLS,也使用纯 HTTP 与 RabbitMQ 集群通信。默认为 | 默认值设置为 |
旧版本的运算符
要安装特定版本的运算符,请从 运算符发布 获取清单链接。强烈建议使用最新版本。