本例使用Storage Class(存储类)来作为集群数据的持久化后端,使用nfs作为后端存储。

1.创建namespace;

# ns.yaml
---
apiVersion: v1
kind: Namespace
metadata:name: rabbit-mq

2.创建Service Account为Pod中的程序提供访问Kubernetes API的身份标识,并创建相关的role和rolebinding对Kubernetes的endpoint资源做授权;

# rbac.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:name: rabbitmqnamespace: rabbit-mq
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: endpoint-readernamespace: rabbit-mq
rules:
- apiGroups: [""]resources: ["endpoints"]verbs: ["get"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: endpoint-readernamespace: rabbit-mq
subjects:
- kind: ServiceAccountname: rabbitmq
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: endpoint-reader

3.创建service访问rabbitmq集群;

# service.yaml
---
kind: Service
apiVersion: v1
metadata:name: rabbitmq-headlessnamespace: rabbit-mq
spec:clusterIP: NonepublishNotReadyAddresses: trueports:- name: amqpport: 5672- name: httpport: 15672selector:app: rabbitmq
---
kind: Service
apiVersion: v1
metadata:namespace: rabbit-mqname: rabbitmq-service
spec:ports:- name: httpprotocol: TCPport: 15672nodePort: 30002  #管理web界面- name: amqpprotocol: TCPport: 5672targetPort: 5672nodePort: 30001selector:app: rabbitmqtype: NodePort

4.创建secret对象,用来存储rabbitmq的用户名、密码及erlang.cookie;

用户名:admin、密码:123456

# devsecret.yaml
---
apiVersion: v1
kind: Secret
metadata:name: devsecretnamespace: rabbit-mq
type: Opaque
data:rabbitDefaulUser: "YWRtaW4="  rabbitDefaultPass: "MTIzNDU2"erlang.cookie: "di9zV0N6NHVLRVRVdm5lUnlKVm44N0pnMTVzaTJlR2FXZzU0WXZlZmhyaz0="

5.创建Configmap调用rabbitmq配置文件;

# config.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:name: rabbitmq-confignamespace: rabbit-mq
data:enabled_plugins: |[rabbitmq_management,rabbitmq_peer_discovery_k8s].rabbitmq.conf: |cluster_formation.peer_discovery_backend  = rabbit_peer_discovery_k8scluster_formation.k8s.host = kubernetes.default.svc.cluster.localcluster_formation.k8s.address_type = hostnamecluster_formation.k8s.hostname_suffix = .rabbitmq-headless.rabbit-mq.svc.cluster.localcluster_formation.node_cleanup.interval = 30cluster_formation.node_cleanup.only_log_warning = truecluster_partition_handling = autohealqueue_master_locator=min-masterscluster_formation.randomized_startup_delay_range.max = 2vm_memory_high_watermark.absolute = 1GBdisk_free_limit.absolute = 2GBloopback_users.guest = false

6.创建statefulset类型构建rabbitmq集群;

存储类名称需要改为自己创建的(storageClassName: "managed-nfs-storage")

# statefulset.yaml
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: rabbitmqnamespace: rabbit-mq
spec:serviceName: rabbitmq-headlessselector:matchLabels:app: rabbitmq  replicas: 3  #副本数3template:metadata:labels:app: rabbitmqannotations:scheduler.alpha.kubernetes.io/affinity: >{"podAntiAffinity": {"requiredDuringSchedulingIgnoredDuringExecution": [{"labelSelector": {"matchExpressions": [{"key": "app","operator": "In","values": ["rabbitmq"]}]},"topologyKey": "kubernetes.io/hostname"}]}}spec:serviceAccountName: rabbitmqterminationGracePeriodSeconds: 10containers:- name: rabbitmqimage: rabbitmq:3.7-rc-managementresources:limits:cpu: 2memory: 2Girequests:cpu: 1memory: 1GivolumeMounts:- name: config-volumemountPath: /etc/rabbitmq- name: rabbitmq-datamountPath: /var/lib/rabbitmq/mnesiaports:- name: httpprotocol: TCPcontainerPort: 15672- name: amqpprotocol: TCPcontainerPort: 5672livenessProbe:exec:command: ["rabbitmq-diagnostics", "status"]initialDelaySeconds: 60periodSeconds: 60timeoutSeconds: 5readinessProbe:exec:command: ["rabbitmq-diagnostics", "status"]initialDelaySeconds: 20periodSeconds: 60timeoutSeconds: 5imagePullPolicy: Alwaysenv:- name: RABBITMQ_DEFAULT_USERvalueFrom:secretKeyRef:key: rabbitDefaulUsername: devsecret                - name: RABBITMQ_DEFAULT_PASSvalueFrom:secretKeyRef:key: rabbitDefaultPassname: devsecret- name: RABBITMQ_ERLANG_COOKIEvalueFrom:secretKeyRef:name: devsecretkey: erlang.cookie- name: HOSTNAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: MY_POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: RABBITMQ_USE_LONGNAMEvalue: "true"- name: K8S_SERVICE_NAMEvalue: "rabbitmq-headless"- name: RABBITMQ_NODENAMEvalue: rabbit@$(HOSTNAME).$(K8S_SERVICE_NAME).$(MY_POD_NAMESPACE).svc.cluster.local- name: K8S_HOSTNAME_SUFFIXvalue: .$(K8S_SERVICE_NAME).$(MY_POD_NAMESPACE).svc.cluster.localvolumes:- name: config-volumeconfigMap:name: rabbitmq-configitems:- key: rabbitmq.confpath: rabbitmq.conf- key: enabled_pluginspath: enabled_pluginsvolumeClaimTemplates:- metadata:name: rabbitmq-dataspec:storageClassName: "managed-nfs-storage"accessModes: [ "ReadWriteMany" ]resources:requests:storage: 2Gi

7.稍微等待一段时间,节点会自动加入集群,不用手动加入。

(1)进入某个节点查看集群状态,如进入rabbitmq-0节点:

kubectl exec -it rabbitmq-0 -n rabbit-mq /bin/bash

(2)进入RabbitMQ Management管理界面查看集群状态:

http://nodeip:30002

k8s部署rabbitmq集群(使用statefulset部署)相关推荐

  1. K8S 部署rabbitmq集群

    K8S 部署rabbitmq集群 版本介绍 名称 版本 k8s 1.18 rabbitmq 3.8 命名空间:rabbitmq 我这里已经建立 configmap 配置文件 [root@k8s-mas ...

  2. 使用Docker部署RabbitMQ集群

    使用Docker部署RabbitMQ集群 概述 本文重点介绍的Docker的使用,以及如何部署RabbitMQ集群,最基础的Docker安装,本文不做过多的描述,读者可以自行度娘. Windows10 ...

  3. docker rabbitmq_Docker部署RabbitMQ集群

    安装rabbitmq 下载Docker镜像 docker pull rabbitmq:3.7.12-management 安装RabbitMQ mkdir rabbitmq # node1 172.1 ...

  4. 部署RabbitMQ集群

    RabbitMQ集群实操手册 实战案例--部署RabbitMQ集群 案例目标 了解RabbitMQ服务的安装与配置. 了解RabbitMQ集群的配置架构. 了解RabbitMQ集群的使用. 案例分析 ...

  5. docker 部署rabbitmq,k8s部署rabbitmq集群,跟踪和监控rabbitmq

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 rabbit原理和架构可以参考https://blog.csdn.net/luanpeng825485697/article/details/8208 ...

  6. RabbitMQ集群、镜像部署配置

    2019独角兽企业重金招聘Python工程师标准>>> 1   RABBITMQ简介及安装 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端, ...

  7. Rabbitmq集群高可用部署详细

    清风万里的季节,周末本该和亲人朋友一起消遣这烂漫的花花草草,或是懒洋洋的晒个太阳听听风声鸟鸣.无奈工作使然,理想使然,我回到啦公司,敲起啦键盘,撸起啦代码,程序狗的世界一片黯然,一片黯然,愿天下所有努 ...

  8. RabbitMQ 集群详解部署(一)

    MQ,Message queue,消息队列,就是指保存消息的一个容器,类似于数据库.缓存等,用来保存数据的,常用的MQ组件有activeMQ.rabbitMQ.rocketMQ.zeroMQ. Rab ...

  9. RabbitMQ 集群高可用部署详细介绍

    链接:cnblogs.com/knowledgesea/p/6535766.html 清风万里的季节,周末本该和亲人朋友一起消遣这烂漫的花花草草,或是懒洋洋的晒个太阳听听风声鸟鸣.无奈工作使然,理想使 ...

最新文章

  1. R语言ggplot2可视化散点图、移除可视化图像中的网格线(remove gridlines)
  2. 一分钟理解softmax函数(超简单)
  3. OpenCV限制对比度自适应直方图均衡(CLAHE)的实例(附完整代码)
  4. python笔记第二天
  5. 763. Partition Labels 划分字母区间
  6. alphogo 理解
  7. Halcon求取矩形顶点坐标
  8. java 反射机制性能_Java反射机制的用途和缺点
  9. 今天用python的turtle简单画了一副眼镜
  10. HDU4859 海岸线(最小割)
  11. 线程:synchronized方法
  12. 线程中task取消_c#异步编程-Task(一)
  13. 基于SSM的运动会管理系统
  14. 产品读书《About Face 3交互设计精髓》
  15. excel如何批量查询手机号归属地
  16. SVN重定向svn switch
  17. 99乘法表,九九乘法表
  18. 联发科之殇:破碎高端梦
  19. Python 的七大就业方向,总有一个适合你!
  20. Android Studio通过Gradle命令来编译生成打包APK

热门文章

  1. Matlab毕设系列--说明
  2. php 打开docx文件怎么打开,docx怎么打开 怎么在网页上打开docx文件
  3. 中国十大知名调查研究咨询公司助力国家软实力
  4. Echarts自定义工具栏toolbox
  5. UML之教学管理系统——5、Rational Rose画状态机图(一)
  6. 053RINEX中O文件示例说明
  7. 数据中台落地实施之法
  8. 投稿[1]-SCI投稿之CRediT author statement
  9. thinkphp5入门【三】pathinfo模式的url访问
  10. 微软Xbox360 E与微软Xbox360 slim Kinect套装(1TB)哪个好