RabbitMQ官网推荐RabbitMQ在K8S上的安装使用rabbitmq的Kubernetes Operator完成,通过operator搭建rabbitmq cluster比较方便, 但需要额外的operator的下载和安装。这里能,我们需要安装一个单节点的rabbitmq, 使用 社区维护的rabbitmq docker来完成。
RabbitMQ的docker版本,我们使用3.8.14-management
,这个版本包含最新的服务器版本以及管理端工具。
以下是rabbitmq的k8s配置文件:
- service 配置文件
这里我们创建两个service:rabbitmq-adminweb 和 rabbitmq-server; admin service 使用nodePort方式将管理端口15672映射到本地机器的32001端口,方便访问管理端。
rabbitmq server 使用5672端口, 只能在K8S cluster内访问。
使用nodePort方式,
apiVersion: v1
kind: Service
metadata:
name: rabbitmq-adminweb
spec:
type: NodePort
ports:
- name: rabbitmq-web
port: 15672
targetPort: 15672
nodePort: 32001
selector:
app: rabbitmq
apiVersion: v1
kind: Service
metadata:
name: rabbitmq-server
spec:
ports:
- port: 5672
selector:
app: rabbitmq
- deployment的配置
这里我们使用环境变量设置了vhost以及admin的用户名,密码。
apiVersion: apps/v1
kind: Deployment
metadata:
name: rabbitmq
spec:
replicas: 1
selector:
matchLabels:
app: rabbitmq
template:
metadata:
labels:
app: rabbitmq
spec:
hostname: my-rabbit
containers:
- name: rabbitmq
image: rabbitmq:3.8-management
imagePullPolicy: IfNotPresent
ports:
- name: rabbitmq-web
containerPort: 15672
- name: rabbitmq-app
containerPort: 5672
env:
- name: RABBITMQ_DEFAULT_VHOST
value: /
- name: RABBITMQ_DEFAULT_USER
value: admin
- name: RABBITMQ_DEFAULT_PASS
value: Admin329
volumeMounts:
- name: persisitent-storage-rabbitmq
mountPath: /var/lib/rabbitmq
volumes:
- name: persisitent-storage-rabbitmq
hostPath:
path: /mnt/d/data/rabbitmq
Notes: 因为这次使用的win10 docker desktop +WSL 2 环境安装的k8s, 所以设置的d盘上的数据文件加路径以/mnt/d 开始。
使用kubectl apply -f 应用配置, rabbitmq pod起来后,可以使用:
http://<host ip>:32001/ 访问管理端,输入用户名密码后即可看到管理页面。
image.png
- 增加secret文件
接着我们把RabbitMQ的默认用户和密码放在secret文件里,方便维护。并且修改
rabbitmq_secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: rabbitmqsecret
type: Opaque
data:
adminusername: YWRtaW4K
adminpassword: QWRtaW4xMjMK
更新的deployment文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: rabbitmq
spec:
replicas: 1
selector:
matchLabels:
app: rabbitmq
template:
metadata:
labels:
app: rabbitmq
spec:
hostname: my-rabbit
containers:
- name: rabbitmq
image: rabbitmq:3.8-management
imagePullPolicy: IfNotPresent
ports:
- name: rabbitmq-web
containerPort: 15672
- name: rabbitmq-app
containerPort: 5672
env:
- name: RABBITMQ_DEFAULT_VHOST
value: /
- name: RABBITMQ_DEFAULT_USER
valueFrom:
secretKeyRef:
name: rabbitmqsecret
key: adminusername
- name: RABBITMQ_DEFAULT_PASS
valueFrom:
secretKeyRef:
name: rabbitmqsecret
key: adminpassword
volumeMounts:
- name: persisitent-storage-rabbitmq
mountPath: /var/lib/rabbitmq
volumes:
- name: persisitent-storage-rabbitmq
hostPath:
path: /mnt/d/data/rabbitmq
网友评论