安装 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,您将需要自行生成用于入场 Webhook 的证书,并将它们包含在运算符和 Webhook 清单中。
消息拓扑运算符有多个 入场 Webhook。它们的端点启用了 TLS,并且需要一个 Webhook 证书,该证书必须在下载的发布清单中的多个位置使用。
以下部分说明了为 Webhook 入场安装证书的步骤。
生成密钥/证书对
首先,为 Webhook 入场生成一个或多个密钥/证书对。这些证书必须对 webhook-service.rabbitmq-system.svc
有效。
创建 K8S 密钥
接下来,在 rabbitmq-system
命名空间中创建一个名为 webhook-server-cert
的 Kubernetes 密钥对象。密钥对象必须包含以下密钥
ca.crt
(CA 证书)tls.crt
(叶/Webhook 证书)tls.key
(叶/Webhook 私钥)
密钥将被挂载到运算符容器,所有 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
的部署 - 在
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 消息拓扑运算符的配置。
要更改配置,请通过编辑拓扑运算符部署清单添加或更新配置环境变量。这是与 RabbitMQ 集群运算符的每个新版本一起发布的 YAML 清单工件。可以在 拓扑运算符环境变量 中的表格中找到可以设置的环境变量列表。
参数
下表列出了在部署清单中可以设置的拓扑运算符环境变量。
变量名称 | 设置后的效果 | 未设置后的效果 |
---|---|---|
OPERATOR_SCOPE_NAMESPACE | 命名空间或命名空间列表,运算符将在其中协调和观察 RabbitmqClusters(独立于安装命名空间)。使用逗号分隔符,不要使用空格,例如“project-1,project-2,rabbitmq-testing” | 所有命名空间都被观察和协调 |
ENABLE_DEBUG_PPROF | 默认值为 false,因为此变量不应在生产环境中使用。当它设置为 true 时,它将在运算符 Pod 的指标端口上公开一组调试端点,用于使用 pprof 对运算符进行 CPU 和 内存分析。 | pprof 调试端点不会在运算符 Pod 上公开。 |
SYNC_PERIOD | 配置运算符定期协调所有拥有的对象。它接受带有时间后缀的字符串值,例如“15m”。它接受 time.ParseDuration 函数可解析的任何值。默认情况下,同步周期已禁用,并且协调仅在拥有的资源更新时发生。 | 协调仅在资源更新时发生。 |
LEASE_DURATION | 非领导者候选者将等待强制获取领导权的时间(以秒为单位)。这是根据最后观察到的确认的时间来衡量的。默认值为 15 秒。该值必须是字符串,例如 | 默认值设置为 15 秒。 |
RENEW_DEADLINE | 续订截止时间是指代理控制平面在放弃之前将尝试刷新领导权的持续时间。默认值为 10 秒。该值必须是字符串,例如 | 默认值设置为 10 秒。 |
RETRY_PERIOD | 重试周期是指 LeaderElector 客户端在尝试操作之间应等待的持续时间。默认值为 2 秒。该值必须是字符串,例如 | 默认值设置为 2 秒。 |
较旧的运算符版本
要安装特定版本的运算符,请从 运算符发布 中获取清单链接。强烈建议使用最新版本。