跳至主内容

安装 RabbitMQ Messaging Topology Operator

概述

本指南介绍如何在 Kubernetes 集群中安装 RabbitMQ Messaging Topology Operator。

兼容性

Operator 要求

  • Kubernetes 1.19 或更高版本
  • RabbitMQ Cluster Operator 1.7.0+(否则,RabbitMQ Messaging Topology Operator 将无法启动)

安装

有两种安装 Operator 的选项

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

使用 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

然后,要安装 Operator,请运行以下命令:

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

使用生成的证书安装

如果未安装 cert-manager,您需要自己生成 admission webhooks 使用的证书,并将其包含在 operator 和 webhooks manifest 文件中。

下载最新的 release manifest:https://github.com/rabbitmq/messaging-topology-operator/releases/latest/download/messaging-topology-operator.yaml

Messaging Topology Operator 包含多个admission webhooks。它们的端点启用了 TLS,需要一个 webhook 证书,该证书必须在下载的 release manifest 中的多个位置使用。

下面的部分将解释安装 webhook admission 证书所涉及的步骤。

生成密钥/证书对

首先,为 webhook admission 生成一个或多个密钥/证书对。这些证书必须对 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 将被挂载到 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

在 Release Manifest 中使用生成的证书

最后,将 webhook 的 CA 证书添加到 release manifest messaging-topology-operator.yaml 中。有多个 admission webhooks,每个 CRD 类型对应一个。

在 manifest 中查找关键字 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 Messaging Topology Operator 已成功安装。

使用非默认 Kubernetes 内部域名

默认情况下,Kubernetes 内部域名是 .cluster.local。这可以在 kubeadm 中配置为其他名称,例如 my.cluster.domain。在这种情况下,Messaging Topology Operator 可以将域名附加到它用来与 RabbitMQ 交互的连接字符串中。

要配置 Messaging Topology Operator 在连接字符串中附加域名,请将环境变量 MESSAGING_DOMAIN_NAME 设置为您的域名,例如 ".my.cluster.domain"

要设置此环境变量:

  • releases 下载安装 manifest。
  • 打开 manifest 并搜索名为 messaging-topology-operator 的 Deployment。
  • env 列表添加一个新元素,名称为 MESSAGING_DOMAIN_NAME,值为您的域名。

Deployment 相关的 manifest 应如下所示:

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"

应用修改后的 manifest。一旦 Pod 应用了更改,后续对 RabbitMQ 的 HTTP API 请求就会将域名附加到连接字符串中。

修改 RabbitMQ Messaging Topology Operator 的默认配置

此信息描述了如何在 Kubernetes 集群中修改 RabbitMQ Messaging Topology Operator 的配置。

要更改配置,请通过编辑 Topology Operator deployment manifest 来添加或更新配置环境变量。这是与 GitHub 上的每个新版本的 RabbitMQ Cluster Operator 一起发布的 YAML manifest 工件。可设置的环境变量列在Topology Operator Environment Variables的表格中。

参数

下表列出了可在 deployment manifest 中设置的 Topology Operator 环境变量。

变量名设置时的效果未设置时的效果
OPERATOR_SCOPE_NAMESPACEOperator 将要协调和监视的 RabbitmqClusters 的命名空间或命名空间列表(独立于安装命名空间)。使用逗号分隔,无空格,例如 "project-1,project-2,rabbitmq-testing"。监视和协调所有命名空间
ENABLE_DEBUG_PPROF默认值为 false,因为此变量不应在生产环境中使用。当设置为 true 时,它会在 Operator Pod 的 metrics 端口上公开一组用于 CPU 和Operator 性能分析的 pprof 的调试端点。pprof 调试端点不会在 Operator Pod 上公开。
SYNC_PERIOD配置 Operator 定期协调所有拥有的对象。它接受带有时间后缀的字符串值,例如 "15m"。它可以接受由 time.ParseDuration 函数解析的任何值。默认情况下,sync period 使用 10 小时的库默认值。要禁用定期协调,请将值设置为 "0"仅当资源更新时才会发生协调。
LEASE_DURATION非 Leader 候选者等待强制获取领导权的秒数。这是相对于最后一次观察到的确认时间计算的。默认为 15 秒。该值必须是字符串,例如 "30"默认值为 15 秒。
RENEW_DEADLINERenew deadline 是实际控制平面在放弃之前重试刷新领导权的持续时间。默认为 10 秒。该值必须是字符串,例如 "10"默认值为 10 秒。
RETRY_PERIODRetry period 是 LeaderElector 客户端在尝试操作之间应该等待的持续时间。默认为 2 秒。该值必须是字符串,例如 "3"默认值为 2 秒。
CONNECT_USING_PLAIN_HTTP使用纯 HTTP 与 RabbitMQ 集群通信,即使集群启用了 TLS。默认为 false默认值为 false,将通过 HTTPS 进行通信。

旧版 Operator

要安装特定版本的 Operator,请从 Operator Releases 获取 manifest 链接。强烈建议使用最新版本。

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