如何在 kubernetes 上设置基本的 rabbitmq

Posted

技术标签:

【中文标题】如何在 kubernetes 上设置基本的 rabbitmq【英文标题】:how to setup basic rabbitmq on kubernetes 【发布时间】:2019-10-08 21:39:28 【问题描述】:

我需要在 kubernetes 集群上设置一个没有持久性或安全性要求的基本 rabbit mq 实例(无集群设置)。

我需要什么:

单个兔子 mq pod 作为有状态集运行,副本数 = 1,并且 通过特定的 url(ampp 端口和管理接口端口)从集群内部和外部访问它

我不需要的东西:

坚持 安全 集群设置

到目前为止,我发现的 helm 图表都是针对具有集群、持久性等的生产设置,但我不需要这些东西,因为我只会将实例用于测试

这是我目前所拥有的:

apiVersion: v1
kind: Service
metadata:
  name: rs-rmq-mgt
spec:
  selector:
    app: rs-rmq
  ports:
  - protocol: TCP
    port: 1337
    targetPort: 15672
  type: NodePort
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rs-rmq
spec:
  selector:
    matchLabels:
      app: rs-rmq
  serviceName: "rs-rmq"
  replicas: 1
  template:
    metadata:
      labels:
        app: rs-rmq
    spec:
      containers:
      - name: rs-rmq
        image: rabbitmq:management
        ports:
        - containerPort: 25672
        - containerPort: 5672
        - containerPort: 4369
        - containerPort: 15672

【问题讨论】:

【参考方案1】:

如果您只需要一个副本和持久性。您可以使用简单的 pod 部署而不是 sts。 Please refer sts doc

kubectl run rabbitmq --image=rabbitmq:management --expose --port=15672 --restart=Never
--dry-run -o yaml > rabbitmq.yml

编辑相关容器端口并创建 pod。

kubectl create -f rabbitmq.yml

将服务公开为 NodePort。

kubectl expose po rabbitmq --port 15672

现在,您可以通过外部访问它

NodesIP:NodePort

在内部使用,

[svc].[命名空间].svc

【讨论】:

【参考方案2】:

正确的做法是通过专用 helm-chart (stable/rabbitmq) 和 helm (Kubernetes 包管理器) 安装 rabbitmq。主要原因:这种方式经过开源社区的彻底测试和验证。

如果你想走捷径,请参考Kubernetes官网的如下任务:Starting a message queue service(rabbitmq)。您将在那里找到所有必要清单文件的链接。

【讨论】:

【参考方案3】:

将此StatefulSet yaml 文件用于基本的rabbitmq 实例:

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: rabbitmq
spec:
  replicas: 1
  serviceName: rabbitmq
  selector:
    matchLabels:
      app: rabbitmq
  template:
    metadata:
      labels:
        app: rabbitmq
    spec:
      containers:
      - name: rabbitmq
        image: rabbitmq:3-management
        env:
        - name: "RABBITMQ_ERLANG_COOKIE"
          value: "1WqgH8N2v1qDBDZDbNy8Bg9IkPWLEpu79m6q+0t36lQ="
        volumeMounts:
        - mountPath: /var/lib/rabbitmq
          name: rabbitmq-data
      volumes:
        - name: rabbitmq-data
          hostPath:
            path: /data/rabbitmq
            type: DirectoryOrCreate

【讨论】:

我们不需要指定将客户端连接到 RabbitMQ 的端口吗? 能否请您说,我们如何在这里传递任何额外的配置?【参考方案4】:

我认为最简单的方法是使用Helm:

helm install stable/rabbitmq

然后只需阅读图表中输出注释中的说明即可:)

【讨论】:

以上是关于如何在 kubernetes 上设置基本的 rabbitmq的主要内容,如果未能解决你的问题,请参考以下文章

markdown 如何使用CoreOS在DigitalOcean上设置Kubernetes

裸机/私有云上的 Kubernetes 存储

如何让 SSH 在 Kubernetes 上运行?

如何在一台机器上配置多个RabbitMQ

如何在Kubernetes上进行微服务部署

如何在Kubernetes 上部署PHP应用程序