这是一个示例配置文件,用于部署高可用的 RabbitMQ,并暴露 NodePort、设置密码,以及使用 ConfigMap 挂载配置方式:

创建 ConfigMap

首先,我们需要创建一个 ConfigMap 来存储 RabbitMQ 的配置文件。在命令行中执行以下命令:

$ kubectl create configmap rabbitmq-config --from-file=rabbitmq.conf

这将创建一个名为'rabbitmq-config' 的 ConfigMap,并从本地文件'rabbitmq.conf' 中加载配置。

rabbitmq.conf 文件内容:

loopback_users.guest = false
listeners.tcp.default = 5672
management.listener.port = 15672
management.listener.ssl = false
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-0.rabbitmq-ha.default.svc.cluster.local
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-1.rabbitmq-ha.default.svc.cluster.local
cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-2.rabbitmq-ha.default.svc.cluster.local
cluster_formation.node_cleanup.interval = 30
cluster_formation.node_cleanup.only_log_warning = true

这个配置文件指定了一些基本配置,例如禁用默认的'guest' 用户,监听端口,管理界面端口,以及集群节点的配置。

创建 RabbitMQ 服务和 StatefulSet

接下来,我们需要创建一个 RabbitMQ 服务和一个 StatefulSet。在命令行中执行以下命令:

$ kubectl apply -f rabbitmq.yaml

rabbitmq.yaml 文件内容:

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq-ha
  labels:
    app: rabbitmq-ha
spec:
  type: NodePort
  ports:
    - port: 5672
      targetPort: 5672
      name: amqp
    - port: 15672
      targetPort: 15672
      name: http
  selector:
    app: rabbitmq-ha
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rabbitmq-ha
spec:
  serviceName: rabbitmq-ha
  replicas: 3
  selector:
    matchLabels:
      app: rabbitmq-ha
  template:
    metadata:
      labels:
        app: rabbitmq-ha
    spec:
      containers:
        - name: rabbitmq
          image: rabbitmq:3.8.22-management-alpine
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 5672
            - containerPort: 15672
          volumeMounts:
            - name: rabbitmq-config
              mountPath: /etc/rabbitmq/
          env:
            - name: RABBITMQ_ERLANG_COOKIE
              valueFrom:
                secretKeyRef:
                  name: rabbitmq-erlang-cookie
                  key: rabbitmq-erlang-cookie
            - name: RABBITMQ_NODENAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
          args: ['rabbitmq-server']
      volumes:
        - name: rabbitmq-config
          configMap:
            name: rabbitmq-config
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: ['ReadWriteOnce']
        resources:
          requests:
            storage: 10Gi

这个 YAML 文件定义了一个 NodePort 类型的 RabbitMQ 服务,以及一个由 3 个 Pod 组成的 StatefulSet。每个 Pod 都使用了相同的 RabbitMQ 镜像,并加载了之前创建的 ConfigMap。

设置密码

为了设置 RabbitMQ 的用户名和密码,我们可以使用 kubectl exec 命令进入任意一个 Pod 并使用 rabbitmqctl 命令进行设置。例如,要设置一个名为'admin' 的用户和密码为'password',可以执行以下命令:

$ kubectl exec -it rabbitmq-ha-0 -- rabbitmqctl add_user admin password

然后,我们需要授予这个用户管理员权限:

$ kubectl exec -it rabbitmq-ha-0 -- rabbitmqctl set_user_tags admin administrator

最后,我们将使用 kubectl port-forward 命令来暴露 RabbitMQ 的管理界面,并访问 http://localhost:15672/:

$ kubectl port-forward rabbitmq-ha-0 15672

现在,我们可以使用新创建的用户名和密码登录 RabbitMQ 的管理界面。

Kubernetes 1.20.15 高可用 RabbitMQ 部署:NodePort 暴露、密码设置和 ConfigMap 配置

原文地址: https://www.cveoy.top/t/topic/na5m 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录