以下是在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 12015 在集群中部署高可用rabbitmq采用yaml暴露nodeport设置密码。

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

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