k8s-rabbitmq-(一)集群部署
K8S版本:1.10.1
rabbitmq版本:3.6.14
从来没用过这个软件,所以对里面很多术语看不太懂.最后通过https://www.kubernetes.org.cn/2629.html 大牛的文档完成了集群的部署和搭建
3.6.x系列版本通过K8S创建集群需要用到插件,因为没有合并到主分支所以需要自行下载,这里我通过Dockerfile创建好了镜像并上传到了我自己的仓库,如果对这一块感兴趣可以自行百度搜索一下
3.7.x系列增加了对K8S发现的功能,听说很强大,以后再去研究。
为什么要使用 StatefulSet 来部署MQ
- 稳定,唯一的网络标志。
- 稳定,持久化存储。
- 有序,优雅地部署和 scale。
- 有序,优雅地删除和终止。
- 有序,自动的滚动升级。
通过上述的描述,不难看出,MQ集群是有序的,同时需要用到持久化存储,所以K8S专门为这一类服务提供了专门的部署方式,如果你部署的服务是无状态的可以是任意的那么我们可以使用Deployments和ReplicaSets
使用StatefulSet有哪些限制
- StatefulSet 是 beta 资源,Kubernetes 1.5 以前版本不支持。
- 对于所有的 alpha/beta 的资源,您都可以通过在 apiserver 中设置
--runtime-config
选项来禁用。 - 给定 Pod 的存储必须由 PersistentVolume Provisioner 根据请求的
storage class
进行配置,或由管理员预先配置。 - 删除或 scale StatefulSet 将不会删除与 StatefulSet 相关联的 volume。 这样做是为了确保数据安全性,这通常比自动清除所有相关 StatefulSet 资源更有价值。
- StatefulSets 目前要求 Headless Service 负责 Pod 的网络身份。你需要提前部署好此服务。
一.创建rbca认证
集群需要通过访问K8S获取节点IP地址和主机名称用来访问各个节点的MQ信息,就需要给MQ创建角色权限(Role)最后将该角色绑定给mq(RoleBinding)
vim rabbitmq-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: rabbitmq
namespace: dev
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: rabbitmq
namespace: dev
rules:
- apiGroups:
- ""
resources:
- endpoints
verbs:
- get
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: rabbitmq
namespace: dev
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: rabbitmq
subjects:
- kind: ServiceAccount
name: rabbitmq
namespace: dev
二.创建 statefulset 环境
vim rabbitmq.statefulset.yaml
---
apiVersion: v1
kind: Service
metadata:
name: rabbitmq-management
namespace: dev
labels:
app: rabbitmq
spec:
ports:
- port: 15672
name: http
nodePort: 32001
- port: 5672
name: amqp
nodePort: 32002
selector:
app: rabbitmq
type: NodePort
---
apiVersion: v1
kind: Service
metadata:
name: rabbitmq
namespace: dev
labels:
app: rabbitmq
spec:
clusterIP: None
ports:
- port: 5672
name: amqp
selector:
app: rabbitmq
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: rabbitmq
namespace: dev
spec:
serviceName: rabbitmq
replicas: 3
template:
metadata:
labels:
app: rabbitmq
spec:
serviceAccountName: rabbitmq
imagePullSecrets:
- name: regsecret
containers:
- name: rabbitmq
image: registry.cn-shenzhen.aliyuncs.com/di_chen/kubernetes-rabbitmq-k8s:3.6.14
imagePullPolicy: IfNotPresent
resources:
requests:
memory: "256Mi"
cpu: "150m"
limits:
memory: "512Mi"
cpu: "250m"
ports:
- containerPort: 5672
name: amqp
env:
- name: RABBITMQ_DEFAULT_USER
value: rabbituser
- name: RABBITMQ_DEFAULT_PASS
valueFrom:
secretKeyRef:
name: erlang.cookie
key: erlang.cookie
- name: RABBITMQ_ERLANG_COOKIE
valueFrom:
secretKeyRef:
name: erlang.cookie
key: erlang.cookie
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: K8S_SERVICE_NAME
value: "rabbitmq"
- name: RABBITMQ_USE_LONGNAME
value: "true"
- name: RABBITMQ_NODENAME
value: "rabbit@$(MY_POD_NAME).$(K8S_SERVICE_NAME)"
- name: RABBITMQ_NODE_TYPE
value: disc
- name: AUTOCLUSTER_TYPE
value: "k8s"
- name: AUTOCLUSTER_DELAY
value: "10"
- name: AUTOCLUSTER_CLEANUP
value: "true"
- name: CLEANUP_WARN_ONLY
value: "false"
- name: K8S_ADDRESS_TYPE
value: "hostname"
- name: K8S_HOSTNAME_SUFFIX
value: ".$(K8S_SERVICE_NAME)"
这里我省略了MQ对持续化数据的存储的配置,暂时没研究到哪,附上代码
volumeMounts:
- name: rabbitmq-volume
mountPath: /var/lib/rabbitmq
volumeClaimTemplates:
- metadata:
name: rabbitmq-volume
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 5Gi
三.环境部署
执行认证文件
kubectl -n dev create -f rabbitmq-rbac.yaml
如果你没有创建dev这个命名空间请先创建
kubectl create namespaces dev
echo $(openssl rand -base64 32) > erlang.cookie
kubectl -n dev create secret generic erlang.cookie --from-file=erlang.cookie
执行 statefulset 文件
kubectl -n dev create -f rabbitmq.statefulset.yaml
如果第一次执行,需要下载镜像,等待POD状态为RUNING
查看statefulset状态.
查看MQ集群信息
能够正确获取集群信息,接下来通过Nodeport端口进行外部访问MQ集群
到此K8S-MQ集群部署完成,此时的集群还有需要地方不完善,后续也会持续完善下去~
k8s-rabbitmq-(一)集群部署的更多相关文章
- RabbitMQ(6) 集群部署
单节点部署 rabbitmq单节点部署比较简单,可以使用apt-get等工具快速安装部署. wget -O- https://www.rabbitmq.com/rabbitmq-release-sig ...
- k8s单节点集群部署应用
之所以用k8s来部署应用,就是因为k8s可以灵活的控制集群规模,进行扩充或者收缩.生产上我们要配置的参数较多,命令行的方式显然不能满足需求,我们应该使用基于配置文件的方式.接下来做一个部署的demo: ...
- k8s记录-etcd集群部署(三)
https://blog.csdn.net/fy_long/article/details/86542872 1)程序准备tar xvf etcd-v3.3.11-linux-amd64.tar.gz ...
- k8s集群部署rabbitmq集群
1.构建rabbitmq镜像 RabbitMQ提供了一个Autocluster插件,可以自动创建RabbitMQ集群.下面我们将基于RabbitMQ的官方docker镜像,添加这个autocluste ...
- RabbitMQ学习之集群部署
我们先搭建一个普通集群模式,在这个模式基础上再配置镜像模式实现高可用,Rabbit集群前增加一个反向代理,生产者.消费者通过反向代理访问RabbitMQ集群. 架构图如下: 设计架构可以如下:在一个集 ...
- rabbitMQ集群部署以及集群之间同步
MQ集群部署 期待的部署架构 其中,一个机房有两台机器部署MQ,并组成集群,有一个机房的MQ集群作为中心集群,其他机房的MQ集群将消息同步到中心MQ集群中. 安装erlang,略.. 安装rabbit ...
- RabbitMQ消息队列(十)-高可用集群部署实战
前几章讲到RabbitMQ单主机模式的搭建和使用,我们在实际生产环境中出于对性能还有可用性的考虑会采用集群的模式来部署RabbitMQ. RabbitMQ集群基本概念 Rabbit模式大概分为以下三种 ...
- k8s 组件介绍__单Master集群部署
参考链接:https://github.com/opsnull/follow-me-install-kubernetes-cluster kubernetes 概述 1.kubernetes 是什么 ...
- Centos6.9下RabbitMQ集群部署记录
之前简单介绍了CentOS下单机部署RabbltMQ环境的操作记录,下面详细说下RabbitMQ集群知识,RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言, ...
- rabbitmq集群部署及配置
消息中间件rabbitmq,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息异步.本篇将以rabbitmq+HA方式进行部署. 一.原理介绍 rabbitmq是依据erlang的分 ...
随机推荐
- MySQL基础之 索引
MySQL索引讲解 索引的好处: MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么 ...
- tikv性能参数调优
tiKV 最底层使用的是 RocksDB(tidb3.0版本中将使用tian存储引擎) 做为持久化存储,所以 TiKV 的很多性能相关的参数都是与 RocksDB 相关的.TiKV 使用了两个 Roc ...
- js将时间戳转换成日期格式-陈远波
var timestamp =1539598555000;//时间戳 //时间戳转换成time格式function timestampToTime(timestamp) { var date = ne ...
- Java多线程学习笔记之二缓存
1.高速缓存 由来:处理器处理能力原因大于主内存(DRAM)访问速率,为了弥补这个差距,引入了高速缓存. 高速缓存是一种存取速率远比主内存大而容量远比主内存小的存储部件,每一个处理器都有其高速缓存.在 ...
- JQUERY方法给TABLE动态增加行
比如设置table的id为tabvar trHTML = "<tr><td>...</td></tr>"$("#tab&q ...
- OpenCV——查找、绘制轮廓
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- PAT B1033 旧键盘打字 (20 分)
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在 2 行中分别给出坏掉的那些键.以及应该输入 ...
- Dreammail V4.6.9.2 XSS漏洞利用
转载请注明:@小五义http://www.cnblogs.com/xiaowuyi 针对版本: DreamMail 4.6.9.2测试环境:windows xp sp3 python版本:2.6 测试 ...
- Android 给CheckBox设置背景
一般来说我们给控件(Button,LinearLayout,ImageView,TextView等)设这背景的时候只需要设置这些控件的android:background即可, 但是在给CheckBo ...
- linux 文件夹和文件操作
1.统计目录有多少个文件数 find ./company -type f | wc -l 2.删除文件夹中的文件 rm -f * #最经典的方法,删除当前目录下的所有类型的文件 rsync --del ...