Kubernetes 1.20.15 高可用 RabbitMQ 部署 - 使用 YAML, NodePort 和密码
以下是在 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 和管理端口。
原文地址: https://www.cveoy.top/t/topic/na45 著作权归作者所有。请勿转载和采集!