开始

以一个非常成熟的在k8s上部署的脚本来讲解在k8s上部署rabbitmq的原理和用法
image.png
第一段定义了service,第二段定义了出现了新的概念叫做ConfigMap,可以自己编写一个文件,将文件挂载到每个容器里面,rabbitmq里面有它的配置文件,rabbitmq自带的。如果我们想改它的配置文件或者是我们想自己写一个配置文件进来。就可以用k8s的组件ConfifMap这个,它会自己生成一个配置文件,然后注入到这个容器里面。代替容器原生的配置文件
image.png
StatefulSet:对一组k8s容器的,或者叫做对一组docker容器的声明。写了StatefulSet这段声明后,k8s会自动帮我们创建我们要求的POD,pod里面包含我们要求的容器。
image.png

Service层

Service是负载均衡层,metadata是元数据。
image.png
命名空间就是k8s里面的一个概念,它可以使rabbimq或者spring boot等每个业务线部署的pod或者容器之间能够分隔开。我们给自己起的命名空间叫做test-rabbitmq
image.png
name就是这个负载均衡器的名称
image.png

label是它的标签,app:表示整个是服务于rabbitmq这个应用的。
type:Service的类型,是负载均衡
image.png
spec是它的参数,
type:NodePort表示会在宿主机开端口。这样我们通过端口就可以访问到负载均衡的service
image.png
nodePort是物理服务器上暴露的端口。
image.png
selector
image.png
我们是一个负载均衡器,负载均衡器要把它的请求打到哪里呢?因为它只是一个代理层。
image.png
它代理的是叫做rabbitmq的这个app
image.png
我们往下找到StatefulSet。也就是说声明实际的rabbitmq容器和这个应用的这段。它会声明自己的app叫做rabbitmq
image.png
StatefulSet下面找到rabbitmq。我们负载均衡器会找这几个东西,把请求负载均衡到这几个容器上。
image.png

ConfigMap

configMap就是自己写个配置文件注入到容器里面,让rabbitmq启动的时候使用我们写的这个配置文件,而不是使用自带的。如果不这么使用的话,我们要等所有的容器都起来,再进入容器去修改配置文件。或者是去做设置。
image.png
声明使用的插件
image.png
第一个插件是管控台,第二个插件是开源项目专门为了rabbitmq部署在k8s上写的一个插件,那么这个插件是做什么用的呢?我们看第二段配置也就是下面的配置就知道了。
image.png
前五个配置都是k8s的插件相关的
image.png
集群的伙伴之间通过什么发现的。通过rabbit_peer_discovery_k8s这个去发现的
image.png
通过这个插件来访问这个host。这样他们互相节点之间就可以通讯发现对方,组成集群。
image.png
地址类型用ip地址。使用ip地址就可以访问到我们的服务。
image.png
每30秒进行节点的清理。发现节点掉线就会清理掉掉线的节点。
image.png

只打印警告log设置。
image.png
网络分区的修复,用了自动修复。
image.png
比较新的rabbitMq版本会禁用到guest账户。这里我们设置为false就是不禁用。
image.png

Statefulset

声明我们需要的实际工作的mq容器。
image.png
有两个元数据
image.png

集群需要几个节点。这里配置了3个,就是启3个节点。
image.png
这几个容器都需要什么样的数据,所以叫做template模板。
image.png
这样就给每个容器打上rabbitmq的标签。那么我们上面的service也就是负载均衡器,它就会将请求都均衡到所有打了rabbimq标签的rabbitmq节点上。
image.png
下面就是些具体的参数
image.png
当滚动升级的时候,至少给当前节点10秒的时间,给当前节点处理完自己的请求。这就是升级要替换它的时候,
image.png
为啥是containers呢?带个s。就是容器不是单独存在的,它是包过在pod里面的。pod不止可以启一个容器,可以启多个容器。但是这里其实我们设置的还是一个容器就可以了。
image.png
volumnMounts:这个就和前面的configMap联系起来了。我们需要启用一个卷,在linux里面就是一个卷,在windows里面就是一个小的硬盘分区。挂载到容器的etc/rabbimq这个路径下,就是为了我们上面写的configMap的配置有地方放。
image.png
把端口暴露出来
image.png

这是两个探针
image.png
livenessProbe是探测这个pod是死活。如果是死的就杀掉,启动新的。如果rabbimq节点宕机了。
每次探测会在容器里面执行 rabbitmqctl status这是查看rabbitmq节点状态的命令。
image.png
第一次会延迟60秒。pod启动后会延迟60秒去探测。
image.png
如果探测10秒这个节点没有返回的话,就表示这个节点挂了 。它会重启这个节点。
image.png
准备就绪探针 readinessProbe 监测它的死活的同时,还要监测它是不是准备好了。准备好了会将它挂载负载均衡器的后面。用户请求才会给他。如果它没有准备好。用户的请求是不会给他的。readinessProbe是判断准备好了没,如果没有准备好就不会把请求给它。

image.png
每次重启的时候,是不是要重新拉镜像。
image.png

env环境变量

image.png
比如MY_POD_IP这个环境变量就是从 status.podIP取出来的。注入到容器的环境变量里面。
image.png
使用长的主机名
image.png
rabbitmq节点的名称
image.png
取的是MY_POD_IP 前面加上rabbit@

image.png
最重要的 erlang_cookie
image.png

volumes挂载的卷

image.png
把configMap注入进来。
image.png

实战

登陆k8s集群的一个节点

开始部署
image.png
查看已经部署好的
image.png

结束