以下是在 Kubernetes 1.20.15 集群中部署高可用 RabbitMQ 的 YAML 文件:

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq-ha
  labels:
    app: rabbitmq-ha
spec:
  type: NodePort
  ports:
    - name: amqp
      port: 5672
      targetPort: 5672
      nodePort: 30001
    - name: management
      port: 15672
      targetPort: 15672
      nodePort: 30002
  selector:
    app: rabbitmq-ha
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rabbitmq-ha
spec:
  selector:
    matchLabels:
      app: rabbitmq-ha
  replicas: 3
  serviceName: rabbitmq-ha
  template:
    metadata:
      labels:
        app: rabbitmq-ha
    spec:
      containers:
        - name: rabbitmq-ha
          image: rabbitmq:3.8.16-management-alpine
          ports:
            - containerPort: 5672
              name: amqp
            - containerPort: 15672
              name: management
          env:
            - name: RABBITMQ_DEFAULT_USER
              value: 'admin'
            - name: RABBITMQ_DEFAULT_PASS
              value: 'password'
          volumeMounts:
            - name: rabbitmq-data
              mountPath: /var/lib/rabbitmq
      volumes:
        - name: rabbitmq-data
          emptyDir: {}
  volumeClaimTemplates:
    - metadata:
        name: rabbitmq-data
      spec:
        accessModes: [ 'ReadWriteOnce' ]
        resources:
          requests:
            storage: 1Gi

解释:

  • 第一个部分创建一个类型为 NodePort 的 Service,这个 Service 将暴露 RabbitMQ 的 AMQP 和管理端口,分别对应 5672 和 15672 端口。这个 Service 会在每个节点上暴露一个 NodePort,并将它们映射到 30001 和 30002 端口。这个 Service 的 selector 指定了它应该转发到哪些 Pod 上。

  • 第二个部分创建一个 StatefulSet,这个 StatefulSet 将部署 3 个 RabbitMQ 节点。这个 StatefulSet 的 selector 与上面的 Service 的 selector 相同,因此这个 Service 将转发到这个 StatefulSet 中的所有 Pod。

  • RabbitMQ 的镜像使用的是 rabbitmq:3.8.16-management-alpine。这个镜像中包含了 RabbitMQ 的管理插件。

  • 容器使用了两个端口,5672 和 15672。5672 是 RabbitMQ 的 AMQP 端口,15672 是 RabbitMQ 的 Web 管理界面端口。

  • RABBITMQ_DEFAULT_USER 和 RABBITMQ_DEFAULT_PASS 环境变量用于设置 RabbitMQ 的默认用户名和密码。这里将它们设置为 admin 和 password。

  • 容器使用了一个名为 rabbitmq-data 的持久卷。这个持久卷将用于存储 RabbitMQ 节点的数据。在这里,使用了一个空目录卷,这意味着当 Pod 被删除时,数据也会被删除。

  • volumeClaimTemplates 字段用于定义持久卷的模板。这个模板定义了一个名为 rabbitmq-data 的持久卷,它将请求 1GB 的存储容量,并使用了 ReadWriteOnce 的访问模式。这意味着这个持久卷只能被一个 Pod 挂载。

使用这个 YAML 文件来部署 RabbitMQ 集群:

kubectl apply -f rabbitmq-ha.yaml

这个命令将在集群中创建一个名为 rabbitmq-ha 的 Service 和一个名为 rabbitmq-ha 的 StatefulSet。这将创建一个 3 个节点的 RabbitMQ 集群,每个节点都有一个 NodePort。可以使用 kubectl get services 命令来查看暴露的 NodePort。

kubectl get services

这个命令将输出如下内容:

NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP                      2d
rabbitmq-ha   NodePort    10.103.207.21   <none>        amqp:5672/TCP,management:15672/TCP   8m

可以使用任意一个节点的 IP 地址和 NodePort 来访问 RabbitMQ 的 Web 管理界面。例如,如果节点的 IP 地址是 10.0.0.100,NodePort 是 30002,则可以在浏览器中访问 http://10.0.0.100:30002,然后使用 admin/password 来登录。

注意:在生产环境中,建议使用更强大的密码,并使用 TLS 来保护 AMQP 和管理端口。

Kubernetes 1.20.15 高可用 RabbitMQ 部署 - 使用 YAML, NodePort 和密码

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

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