安装 RabbitMQ 消息拓扑操作符
概述
本指南介绍了如何在 Kubernetes 集群中安装 RabbitMQ 消息拓扑操作符。
兼容性
该操作符要求:
- Kubernetes 1.19 或更高版本
- RabbitMQ 集群操作符 (RabbitMQ Cluster Operator) 1.7.0+(如果低于此版本,RabbitMQ 消息拓扑操作符将无法启动)
安装
安装操作符有两种选择:
- 使用 cert-manager 安装
- 使用生成的证书安装
使用 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) 中。
消息拓扑操作符具有多个 准入 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 通信。 |
旧版本操作符
要安装特定版本的操作符,请从 操作符发布页面 获取清单链接。强烈建议使用最新版本。