在 Kubernetes 集群中安装 RabbitMQ Cluster Operator
概述
本指南介绍了如何在 Kubernetes 集群中安装 RabbitMQ Cluster Kubernetes Operator。
兼容性
该 Operator 要求:
- Kubernetes 1.19 或更高版本(推荐使用 1.25 或更高版本,特别是对于使用 RabbitMQ Streams 的环境)
- RabbitMQ DockerHub 镜像,该镜像提供 受支持的 RabbitMQ 发布系列
安装
要安装该 Operator,请运行以下命令
kubectl apply -f "https://github.com/rabbitmq/cluster-operator/releases/latest/download/cluster-operator.yml"
# namespace/rabbitmq-system created
# customresourcedefinition.apiextensions.k8s.io/rabbitmqclusters.rabbitmq.com created
# serviceaccount/rabbitmq-cluster-operator created
# role.rbac.authorization.k8s.io/rabbitmq-cluster-leader-election-role created
# clusterrole.rbac.authorization.k8s.io/rabbitmq-cluster-operator-role created
# rolebinding.rbac.authorization.k8s.io/rabbitmq-cluster-leader-election-rolebinding created
# clusterrolebinding.rbac.authorization.k8s.io/rabbitmq-cluster-operator-rolebinding created
# deployment.apps/rabbitmq-cluster-operator created
至此,RabbitMQ Cluster Kubernetes Operator 已成功安装。一旦 RabbitMQ Cluster Kubernetes Operator Pod 运行起来,请前往 使用 Kubernetes RabbitMQ Cluster Kubernetes Operator,了解如何使用 Kubernetes 自定义资源 (Custom Resource) 部署 RabbitMQ。
如果您想安装特定版本的 Operator,则需要从 Operator 发布页面 获取清单链接。请注意,0.46.0 之前的版本没有此清单。我们强烈建议安装 0.46.0 及以上版本。
如果您想将 Operator 镜像迁移到自定义位置,请参阅 迁移镜像 (Relocate the Image) 部分,其中提供了将 Operator 镜像迁移到私有仓库的说明。
使用 kubectl-rabbitmq 插件安装
kubectl rabbitmq 插件提供了用于管理 RabbitMQ 集群的命令。该插件可以使用 krew 安装。
kubectl krew install rabbitmq
要获取可用命令列表,请使用
kubectl rabbitmq help
# USAGE:
# Install RabbitMQ Cluster Operator (optionally provide image to use a relocated image or a specific version)
# kubectl rabbitmq install-cluster-operator [IMAGE]
# [...]
kubectl rabbitmq install-cluster-operator
# namespace/rabbitmq-system created
# customresourcedefinition.apiextensions.k8s.io/rabbitmqclusters.rabbitmq.com created
# serviceaccount/rabbitmq-cluster-operator created
# role.rbac.authorization.k8s.io/rabbitmq-cluster-leader-election-role created
# clusterrole.rbac.authorization.k8s.io/rabbitmq-cluster-operator-role created
# rolebinding.rbac.authorization.k8s.io/rabbitmq-cluster-leader-election-rolebinding created
# clusterrolebinding.rbac.authorization.k8s.io/rabbitmq-cluster-operator-rolebinding created
# deployment.apps/rabbitmq-cluster-operator created
使用 Terraform 和 OpenTofu 安装
Terraform 和 OpenTofu 用户需要 覆盖仓库 (override the repository) 并将其设置为
oci://registry-1.docker.io/bitnamicharts
在 helm_release 资源上。
(可选)迁移镜像
如果您无法直接从 Docker Hub 将镜像拉取到 Kubernetes 集群,则需要先将镜像迁移到您的私有仓库。具体步骤取决于您的环境,但通常如下所示
docker pull rabbitmqoperator/cluster-operator:{some-version}
docker tag rabbitmqoperator/cluster-operator:{some-version} {someregistry}/cluster-operator:{some-version}
docker push {someregistry}/cluster-operator:{some-version}
{someregistry} 的值应为符合 OCI 标准的仓库地址。{some-version} 的值是 Cluster Operator 的版本号。
如果您需要身份验证才能从私有镜像仓库拉取镜像,则必须执行 配置 Kubernetes 集群以访问私有镜像。
下载清单来自您要迁移的版本,并编辑 Deployment 镜像部分。您可以通过 grep 搜索 image: 字符串来定位此部分。
grep -C3 image: releases/cluster-operator.yml
# [...]
# --
# valueFrom:
# fieldRef:
# fieldPath: metadata.namespace
# image: rabbitmqoperator/cluster-operator:0.49.0
# name: operator
# resources:
# limits:
配置 Kubernetes 集群以访问私有镜像
如果您已将镜像迁移到私有仓库且该仓库需要身份验证,则需要按照以下步骤操作,以允许 Kubernetes 拉取镜像。
首先,创建 Operator 用于运行和拉取镜像的服务账号 (Service Account)
apiVersion: v1
kind: ServiceAccount
metadata:
name: rabbitmq-cluster-operator
namespace: rabbitmq-system
其次,创建一个包含从私有仓库拉取镜像凭据的 Secret
kubectl -n rabbitmq-system create secret \
docker-registry rabbitmq-cluster-registry-access \
--docker-server=DOCKER-SERVER \
--docker-username=DOCKER-USERNAME \
--docker-password=DOCKER-PASSWORD
其中
DOCKER-SERVER是您私有镜像仓库的服务器 URL。DOCKER-USERNAME是您私有镜像仓库身份验证的用户名。DOCKER-PASSWORD是您私有镜像仓库身份验证的密码。
例如:
kubectl -n rabbitmq-system create secret \
docker-registry rabbitmq-cluster-registry-access \
--docker-server=docker.io/my-registry \
--docker-username=my-username \
--docker-password=example-password1
现在通过运行以下命令更新 Operator 服务账号
kubectl -n rabbitmq-system patch serviceaccount \
rabbitmq-cluster-operator -p '{"imagePullSecrets": [{"name": "rabbitmq-cluster-registry-access"}]}'
请注意,Operator 服务账号的名称不可配置,必须为 rabbitmq-cluster-operator。
配置 Operator 以使用私有仓库
您需要修改 Operator 的配置,以便在新建 RabbitmqCluster 实例时默认使用迁移后的镜像。若要在部署 Operator 时设置 DEFAULT_RABBITMQ_IMAGE、DEFAULT_USER_UPDATER_IMAGE 和 DEFAULT_IMAGE_PULL_SECRETS 的值,请参阅 配置 RabbitMQ Cluster Operator 的默认值。