当前位置 博文首页 > 山间漫步人生路的博客:k8s部署rabbitmq集群并启用mqtt,并设置a
项目用到rabbitmq以及mqtt,所以整理记录一下
rabbitmq-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: rmq-cluster-config
namespace: default
labels:
addonmanager.kubernetes.io/mode: Reconcile
data:
enabled_plugins: |
#有需要启用的插件在这里设置 [rabbitmq_management,rabbitmq_peer_discovery_k8s,rabbitmq_mqtt,rabbitmq_web_mqtt].
rabbitmq.conf: |
loopback_users.guest = false
## Clustering
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s
cluster_formation.k8s.host = kubernetes.default.svc.cluster.local
cluster_formation.k8s.address_type = hostname
#################################################
# default is rabbitmq-cluster's namespace#
#################################################
cluster_formation.k8s.hostname_suffix = .rmq-cluster.default.svc.cluster.local
cluster_formation.node_cleanup.interval = 10
cluster_formation.node_cleanup.only_log_warning = true
cluster_partition_handling = autoheal
## queue master locator
queue_master_locator=min-masters
rabbitmq-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: rmq-cluster
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
name: rmq-cluster
namespace: default
rules:
- apiGroups:
- ""
resources:
- endpoints
verbs:
- get
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
name: rmq-cluster
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: rmq-cluster
subjects:
- kind: ServiceAccount
name: rmq-cluster
namespace: default
rabbitmq-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: rmq-cluster-secret
namespace: default
stringData:
cookie: ERLANG_COOKIE
username: admin
password: admin123
type: Opaque
rabbitmq-svc.yaml(采用了nodeport,方便访问也可以设置为ClusterIP然后ingress作域名访问)我这里修改了nodeport的范围,未修改的需要修改一下端口号
apiVersion: v1
kind: Service
metadata:
name: rmq-cluster
namespace: default
labels:
app: rmq-cluster
spec:
selector:
app: rmq-cluster
ports:
- name: http
port: 15672
protocol: TCP
nodePort: 30672
- name: amqp
port: 5672
protocol: TCP
nodePort: 25672
- name: mqtt
port: 1883
protocol: TCP
nodePort: 21883
type: NodePort
rabbitmq-sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: rmq-cluster
namespace: default
labels:
app: rmq-cluster
spec:
replicas: 3
selector:
matchLabels:
app: rmq-cluster
serviceName: rmq-cluster
template:
metadata:
labels:
app: rmq-cluster
spec:
serviceAccountName: rmq-cluster
terminationGracePeriodSeconds: 30
containers:
- name: rabbitmq
image: rabbitmq:3.7-management
imagePullPolicy: IfNotPresent
ports:
- containerPort: 15672
name: http
protocol: TCP
- containerPort: 5672
name: amqp
protocol: TCP
command:
- sh
args:
- -c
- cp -v /etc/rabbitmq/rabbitmq.conf ${RABBITMQ_CONFIG_FILE}; exec docker-entrypoint.sh
rabbitmq-server
env:
- name: RABBITMQ_DEFAULT_USER
valueFrom:
secretKeyRef:
key: username
name: rmq-cluster-secret
- name: RABBITMQ_DEFAULT_PASS
valueFrom:
secretKeyRef:
key: password
name: rmq-cluster-secret
- name: RABBITMQ_ERLANG_COOKIE
valueFrom:
secretKeyRef:
key: cookie
name: rmq-cluster-secret
- name: K8S_SERVICE_NAME
value: rmq-cluster
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: RABBITMQ_USE_LONGNAME
value: "true"
- name: RABBITMQ_NODENAME
value: rabbit@$(POD_NAME).rmq-cluster.$(POD_NAMESPACE).svc.cluster.local
- name: RABBITMQ_CONFIG_FILE
value: /var/lib/rabbitmq/rabbitmq.conf
livenessProbe:
exec:
command:
- rabbitmqctl
- status
initialDelaySeconds: 30
timeoutSeconds: 10
readinessProbe:
exec:
command:
- rabbitmqctl
- status
initialDelaySeconds: 10
timeoutSeconds: 10
volumeMounts:
- name: config-volume
mountPath: /etc/rabbitmq
readOnly: false
- name: rabbitmq-storage
mountPath: /var/lib/rabbitmq
readOnly: false
volumes:
- name: config-volume
configMap:
items:
- key: rabbitmq.conf
path: rabbitmq.conf
- key: enabled_plugins
path: enabled_plugins
name: rmq-cluster-config
- name: rabbitmq-storage
persistentVolumeClaim:
claimName: rabbitmq-cluster-storage
这里用nfs持久化存储
rabbit-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: rabbitmq-pv
labels:
app: rmq-cluster
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
server: 192.168.111.21
path: /root/nfs_root/rabbitmq
rabbitmq-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rabbitmq-cluster-storage
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
selector:
matchLabels:
app: rmq-cluster
部署
kubectl apply -f .
# 这里default 命名空间,就使用 sed 命令将yaml文件中 default 全局替换为 rabbitmq(其他命名空间):
sed -i 's/default/rabbitmq/g' ./*
kubectl apply -f .
[root@master60 ~]# kubectl get pod |grep rm
rmq-cluster-0 1/1 Running 5
rmq-cluster-1 1/1 Running 7
rmq-cluster-2 1/1 Running 6
[root@master60 ~]# kubectl get svc |grep rm
rmq-cluster NodePort 10.0.0.181 <none> 15672:30672/TCP,5672:25672/TCP,1883:21883/TCP
ip:30672访问即可,使用初始账号密码guest/guest登录即可。
点击“Admin”,标签,添加admin账号,并设置为管理员,密码为admin。见下图:
如果添加的用户显示 no access。点击用户名 admin 设置权限。点击 set permission即可。