K8S 搭建 rabbitmq 3.7.17 集群
在 nfs 服务器上创建目录
cat /etc/exports
/data/nfs 172.16.16.0/24(rw,sync,no_root_squash)
mkdir /data/nfs/rabbit
在 k8s-master 上操作
mkdir -p /data/yaml/default/rabbitmq-cluster
cd /data/yaml/default/rabbitmq-cluster
# 创建唯一erlang.cookie
echo $(openssl rand -base64 32) > erlang.cookie
# 创建专用的命名空间
kubectl create ns r
kubectl create secret generic erlang.cookie --from-file=erlang.cookie -n r
# 权限控制
vi rabc.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: rabbitmq
namespace: r
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: rabbitmq
namespace: r
rules:
- apiGroups:
- ""
resources:
- endpoints
verbs:
- get
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: rabbitmq
namespace: r
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: rabbitmq
subjects:
- kind: ServiceAccount
name: rabbitmq
namespace: r
kubectl apply -f rabc.yaml
# svc
vi svc.yaml
kind: Service
apiVersion: v1
metadata:
name: rabbitmq-service #rabbit以外使用
namespace: r
spec:
type: NodePort
ports:
- name: mangement
protocol: TCP
port: 15672
nodePort: 31002
- name: smp
protocol: TCP
port: 5672
nodePort: 31001
selector:
app: rabbitmq
---
apiVersion: v1
kind: Service
metadata:
name: rabbitmq #rabbitmq内部使用
namespace: r
labels:
app: rabbitmq
spec:
clusterIP: None
ports:
- port: 5672
name: amqp
selector:
app: rabbitmq
kubectl apply -f svc.yaml
# StatefulSet
vi sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: rabbitmq
namespace: r
spec:
serviceName: rabbitmq
updateStrategy:
type: RollingUpdate
replicas: 3
selector:
matchLabels:
app: rabbitmq
template:
metadata:
name: rabbitmq
labels:
app: rabbitmq
spec:
serviceAccountName: rabbitmq
containers:
- name: rabbitmq
image: harbor.junengcloud.com/rabbitmq/rabbitmq:3.7.17-management-alpine
imagePullPolicy: IfNotPresent
resources:
requests:
memory: "800Mi"
cpu: "0.4"
limits:
memory: "900Mi"
cpu: "0.6"
volumeMounts:
- name: rabbitmq-data
mountPath: /var/lib/rabbitmq/mnesia
ports:
- containerPort: 5672
name: amqp
env:
- name: RABBITMQ_DEFAULT_USER
value: admin
- name: RABBITMQ_DEFAULT_PASS
value: password
- name: RABBITMQ_ERLANG_COOKIE
valueFrom:
secretKeyRef:
name: erlang.cookie
key: erlang.cookie
- name: HOSTNAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: SERVICE_INTERNAL_NAME
value: "rabbitmq"
- name: RABBITMQ_USE_LONGNAME
value: "true"
- name: RABBITMQ_NODENAME
value: "rabbit@$(HOSTNAME).$(SERVICE_INTERNAL_NAME).$(NAMESPACE).svc.cluster.local"
volumes:
- name: rabbitmq-data
nfs:
path: /data/nfs/rabbit
server: 172.16.16.140
kubectl apply -f sts.yaml
创建集群
# rabbitmq-1
kubectl exec -it -n r rabbitmq-1 /bin/bash
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) stop_app
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) join_cluster rabbit@rabbitmq-0
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) start_app
# rabbitmq-2
kubectl exec -it -n r rabbitmq-2 /bin/bash
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) stop_app
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) join_cluster rabbit@rabbitmq-0
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) start_app
# rabbitmq-0 检查
kubectl exec -it -n r rabbitmq-0 /bin/bash
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) cluster_status
----Running Nodes
----rabbit@rabbitmq-0.rabbitmq.r.svc.cluster.local
----rabbit@rabbitmq-1.rabbitmq.r.svc.cluster.local
----rabbit@rabbitmq-2.rabbitmq.r.svc.cluster.local

集群需要配置镜像模式,参考 https://www.cnblogs.com/klvchen/p/14029336.html

浙公网安备 33010602011771号