kubernetes 12015 在集群中部署高可用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和管理端口。
原文地址: http://www.cveoy.top/t/topic/bHIr 著作权归作者所有。请勿转载和采集!