修改 RabbitMQ Cluster Operator 默认配置
本文档介绍了如何在 Kubernetes 集群中修改 RabbitMQ Cluster Kubernetes Operator 的配置。您可能需要这样做来控制 Cluster Operator 如何配置 RabbitmqClusters。例如,当您将 Operator 配置为自动使用存储在私有镜像仓库中的 RabbitMQ 容器镜像时,此功能非常有用。
要更改配置,请通过编辑 Cluster Operator 部署清单(deployment manifest)来添加或更新配置环境变量。这是随 GitHub 上每个新版本 RabbitMQ Cluster Operator 一起发布的 YAML 清单文件。可设置的环境变量列在 Cluster Operator 环境变量 的表格中。
Cluster Operator 代码仓库在 docs/examples 下提供了一些 代码示例,其中包括演示 修改默认资源请求(requests)和限制(limits) 的示例。
将 Cluster Operator 环境变量添加到部署清单中
部署 Cluster Operator 时,请通过以下步骤更新清单:
- 执行:
kubectl -n rabbitmq-system edit deployment rabbitmq-cluster-operator
- 添加您想要更改的环境变量。在以下示例中,添加了
OPERATOR_SCOPE_NAMESPACE环境变量,并为 Cluster Operator 设置为"custom-namespace,my-namespace"。apiVersion: apps/v1kind: Deploymentmetadata:labels:app.kubernetes.io/component: rabbitmq-operatorapp.kubernetes.io/name: rabbitmq-cluster-operatorapp.kubernetes.io/part-of: rabbitmqname: rabbitmq-cluster-operatornamespace: rabbitmq-systemspec:template:spec:containers:- command:- /managerenv:- name: OPERATOR_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: OPERATOR_SCOPE_NAMESPACEvalue: "custom-namespace,my-namespace"# ... - 保存清单。Cluster Operator Pod 将更新以使用此配置。
重要提示:RabbitMQ Cluster Operator 的未来 GitHub 版本将不会包含您的更改。因此,每次更新 Cluster Operator 时,都必须同步这些更新。建议考虑使用模板功能自动添加这些变量。例如,使用 ytt overlay。
使用 ytt overlay 自动添加 Cluster Operator 环境变量的示例
values.yaml
#@ load("@ytt:overlay", "overlay")
#@ deployment = overlay.subset({"kind": "Deployment"})
#@ cluster_operator = overlay.subset({"metadata": {"name": "rabbitmq-cluster-operator"}})
#@overlay/match by=overlay.and_op(deployment, cluster_operator),expects="1+"
---
spec:
template:
spec:
containers:
#@overlay/match by=overlay.subset({"name": "operator"}),expects="1+"
-
#@overlay/match missing_ok=True
env:
- name: OPERATOR_SCOPE_NAMESPACE
value: custom-namespace
在升级 Operator 时使用此 overlay,以确保您的自定义配置应用于新版本。
ytt -f https://github.com/rabbitmq/cluster-operator/releases/latest/download/cluster-operator.yml -f values.yaml | kubectl apply -f -
Cluster Operator 环境变量
下表列出了可在部署清单中设置的 Cluster Operator 环境变量。
| 变量名称 | 设置后的效果 | 未设置时的效果 |
|---|---|---|
| OPERATOR_SCOPE_NAMESPACE | Operator 将调谐(reconcile)和监控的命名空间(或命名空间列表,与安装命名空间无关)。使用逗号分隔,不要有空格,例如 "project-1,project-2,rabbitmq-testing" | 监控并调谐所有命名空间 |
| DEFAULT_RABBITMQ_IMAGE | 用于新 RabbitmqCluster Pod 的 RabbitMQ 容器镜像(如果未在 RabbitmqCluster.Spec.Image 中明确设置) | Operator 为新 Pod 使用发布时可用的最新 RabbitMQ 容器镜像 |
| DEFAULT_USER_UPDATER_IMAGE | 用于新 RabbitmqCluster Pod 的 Vault sidecar 容器镜像(如果未在 RabbitmqCluster.Spec.SecretBackend.Vault.DefaultUserUpdaterImage 中明确设置) | Operator 为新 Pod 使用发布时可用的最新 sidecar 容器镜像 |
| DEFAULT_IMAGE_PULL_SECRETS | 默认设置在所有 RabbitmqCluster Pod 上的 imagePullSecrets(以逗号分隔的列表),前提是未在 RabbitmqCluster.Spec.ImagePullSecrets 中明确设置 | 新 RabbitmqCluster Pod 默认没有任何 imagePullSecrets |
| ENABLE_DEBUG_PPROF | 默认值为 false,因为此变量不应用于生产环境。当设置为 true 时,它会在 Operator Pod 的指标端口上公开一组调试端点,用于 使用 pprof 进行 Operator 的 CPU 和内存性能分析。 | pprof 调试端点不会在 Operator Pod 上公开。 |
| CONTROL_RABBITMQ_IMAGE | 实验性功能! 当设置为 true 时,Operator 将始终自动设置默认镜像标签。当 Operator 升级时,这可用于自动升级 RabbitMQ 集群。注意:不执行任何安全检查,也不执行 RabbitMQ 版本之间的兼容性检查。 | Operator 不控制镜像。用户负责更新 RabbitmqCluster 镜像。 |
| LEASE_DURATION | 非领导者候选者等待强制获取领导权的时间(以秒为单位)。这是根据最后观察到的确认(ack)时间来衡量的。默认值为 15 秒。该值必须是字符串,例如 "30"。 | 默认值设置为 15 秒。 |
| RENEW_DEADLINE | 续订截止期限是运行中的控制平面在放弃之前重试刷新领导权的时间段。默认值为 10 秒。该值必须是字符串,例如 "10"。 | 默认值设置为 10 秒。 |
| RETRY_PERIOD | 重试周期是 LeaderElector 客户端在尝试执行操作之间应等待的时间段。默认值为 2 秒。该值必须是字符串,例如 "3"。 | 默认值设置为 2 秒。 |