Rabbitmq-operator 搭建RabbitMQ集群

一、部署operator

1.1 安装服务

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

1.2 环境变量

变量名含义默认值
OPERATOR_SCOPE_NAMESPACE命名空间或命名空间列表,操作员将协调并监视 RabbitmqClusters(独立于安装命名空间)。使用逗号分隔符,不带空格,例如“project-1,project-2,rabbitmq-testing”所有命名空间均受到监视和协调
默认_RABBITMQ_IMAGE用于新 RabbitmqCluster Pod 的 RabbitMQ 容器镜像未明确设置RabbitmqCluster.Spec.ImageOperator 使用发布时可用的最新 RabbitMQ 容器镜像来运行新的 Pod
默认用户更新程序_图像用于新 RabbitmqCluster Pod 的 Vault Sidecar 容器镜像未明确设置RabbitmqCluster.Spec.SecretBackend.Vault.DefaultUserUpdaterImageOperator 使用发布时可用的最新 Sidecar 容器镜像来管理新的 Pod
默认图像拉取机密在所有 RabbitmqCluster Pod 上默认设置的 imagePullSecrets 的逗号分隔列表,其中未明确设置RabbitmqCluster.Spec.ImagePullSecrets新的 RabbitmqCluster Pod 默认没有 imagePullSecrets
启用_调试_PPROF默认值为 false,因为此变量不应在生产中使用。当将其设置为 true 时,它会在 Operator Pod 的指标端口上公开一组调试端点,以便使用 pprof 对 Operator 进行 CPU 和内存分析pprof 调试端点不会在 Operator Pod 上公开。
控制_RABBITMQ_图像实验性!当设置为 时true,操作员将始终自动设置默认图像标签。当操作员升级时,这可用于自动升级 RabbitMQ 集群。请注意,没有执行安全检查,也没有执行 RabbitMQ 版本之间的任何兼容性检查。操作员不控制镜像。用户负责更新 RabbitmqCluster 镜像。
租约期限非领导者候选人等待强制获取领导权的时间(以秒为单位)。这是根据上次观察到的确认时间来衡量的。默认值为 15 秒。该值必须是字符串,例如"30"默认值设置为 15 秒。
续订截止日期更新截止期限是代理控制平面在放弃之前重试刷新领导权的持续时间。默认值为 10 秒。该值必须是字符串,例如"10"默认值设置为 10 秒。
重试周期重试周期是 LeaderElector 客户端在尝试操作之间应等待的时间。默认值为 2 秒。该值必须是字符串,例如"3"默认值设置为 2 秒。

二、部署集群

2.1 安装清单

apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
  name: rabbitmq
  namespace: rabbitmq-system
spec:
  replicas: 3
  service:
    type: NodePort
  resources:
    requests:
      cpu: 500m
      memory: 1Gi
    limits:
      cpu: 800m
      memory: 1Gi
  rabbitmq:
    envConfig: |
      RABBITMQ_QUORUM_DIR=/var/lib/rabbitmq/quorum-segments
    advancedConfig: |
      [
          {ra, [
              {wal_data_dir, "/var/lib/rabbitmq/quorum-wal"}
          ]}
      ].
  override:
    statefulSet:
      spec:
        template:
          spec:
            containers:
              - name: rabbitmq
                volumeMounts:
                  - mountPath: /var/lib/rabbitmq/quorum-segments
                    name: quorum-segments
                  - mountPath: /var/lib/rabbitmq/quorum-wal
                    name: quorum-wal
        volumeClaimTemplates:
          - apiVersion: v1
            kind: PersistentVolumeClaim
            metadata:
              name: persistence
              namespace: default
            spec:
              storageClassName: ys-custom
              accessModes:
                - ReadWriteOnce
              resources:
                requests:
                  storage: 10Gi
              volumeMode: Filesystem
          - apiVersion: v1
            kind: PersistentVolumeClaim
            metadata:
              name: quorum-wal
            spec:
              storageClassName: ys-custom
              accessModes:
                - ReadWriteOnce
              resources:
                requests:
                  storage: 10Gi
              volumeMode: Filesystem
          - apiVersion: v1
            kind: PersistentVolumeClaim
            metadata:
              name: quorum-segments
              namespace: default
            spec:
              storageClassName: ys-custom
              accessModes:
                - ReadWriteOnce
              resources:
                requests:
                  storage: 10Gi

2.2 安装服务

 kubectl apply -f rabbitmq.yaml

Cherish
216 声望4 粉丝