kubernetes安装rabbitmq集群

摘要:
1.准备K8S环境2。要下载基本映像,需要安装两个插件:autocluster和rabbitmq_管理方法1:下载现有的插件映像[root@localhost~]#Dockerpullregistry.cn-hangzhou.aliyuncs.com/wise2c/kubernetes-rabbitmq-autocluster以下是定制的DockerfileFROMregistry

1.准备K8S环境

2.下载基础镜像,需要安装两种插件:autocluster、rabbitmq_management

方法一:

下载已有插件镜像

[root@localhost ~]#docker pull registry.cn-hangzhou.aliyuncs.com/wise2c/kubernetes-rabbitmq-autocluster

下面是自定义的Dockerfile

FROM registry.cn-hangzhou.aliyuncs.com/wise2c/kubernetes-rabbitmq-autocluster:latest
 
RUN rabbitmq-plugins enable --offline rabbitmq_management

构建新镜像(在当前目录新建Dockerfile)

docker build -t  . rabbitmq:new

方法二:

下载原始镜像

下面是自定义的Dockerfile(需要下载autocluster-0.6.1.ez插件)

FROM rabbitmq:3.6.8

ENV RABBITMQ_USE_LONGNAME=true 
    AUTOCLUSTER_LOG_LEVEL=debug 
    AUTOCLUSTER_CLEANUP=true 
    CLEANUP_INTERVAL=60 
    CLEANUP_WARN_ONLY=false 
    AUTOCLUSTER_TYPE=k8s 
    LANG=en_US.UTF-8

ADD plugins/*.ez /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.8/plugins/

RUN rabbitmq-plugins enable --offline autocluster
RUN rabbitmq-plugins enable --offline rabbitmq_management

构建新镜像(在当前目录新建Dockerfile)

docker build -t  . rabbitmq:new

3.kubernetes配置文件(serviceAccount.yaml、service.yaml、deployment.yaml)

创建serviceAccount,这样autocluster可以通过serviceAccount去访问rabbitmq-service的endpoints

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: rabbitmq 
  namespace: default
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: endpoint-reader
  namespace: default 
rules:
- apiGroups: [""]
  resources: ["endpoints"]
  verbs: ["get"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: endpoint-reader
  namespace: default
subjects:
- kind: ServiceAccount
  name: rabbitmq
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: endpoint-reader

创建service.yaml

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: rabbitmq
  name: rabbitmq
spec:
  ports:
  - port: 5672
    name: port-5672
    targetPort: 5672
    protocol: TCP
    nodePort: 5672
  - port: 4369
    name: port-4369
    targetPort: 4369
    protocol: TCP
  - port: 5671
    name: port-5671
    targetPort: 5671
    protocol: TCP
  - port: 15672
    targetPort: 15672
    nodePort: 15672
    name: port-15672
    protocol: TCP
  - port: 25672
    name: port-25672
    targetPort: 25672
    protocol: TCP
  type: NodePort
  selector:
    app: rabbitmq

创建deployment.yaml,在此之前需要先生成cookie文件

[root@localhost ~]echo $(openssl rand -base64 32) > erlang.cookie
[root@localhost ~]kubectl -n cat create secret generic erlang.cookie --from-file=erlang.cookie
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: rabbitmq
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: rabbitmq
    spec:
      containers:
      - name: rabbitmq
        image: rabbitmq:new
        ports:
          - containerPort: 5672
            name: port-5672
          - containerPort: 4369
            name: port-4369
          - containerPort: 5671
            name: port-5671
          - containerPort: 15672
            name: port-15672
          - containerPort: 25672
            name: port-25672
        env:
          - name: HOSTNAME
            valueFrom:
             fieldRef:
              fieldPath: status.podIP
          - name: MY_POD_IP
            valueFrom:
             fieldRef:
              fieldPath: status.podIP
          - name: AUTOCLUSTER_CLEANUP
            value: "true"
          - name: RABBITMQ_USE_LONGNAME
            value: "true"
          - name: AUTOCLUSTER_LOG_LEVEL
            value: "debug"
          - name: CLEANUP_INTERVAL
            value: "60"
          - name: CLEANUP_WARN_ONLY
            value: "false"
          - name: AUTOCLUSTER_TYPE
            value: "k8s"
          - name: LANG
            value: "en_US.UTF-8"
          - name: RABBITMQ_ERLANG_COOKIE
            valueFrom:
             secretKeyRef:
              name: erlang.cookie
              key: erlang.cookie

[root@localhost ~]# kubectl create -f serviceAccount.yaml

[root@localhost ~]# kubectl create -f service.yaml

[root@localhost ~]# kubectl create -f deployment.yaml

启动后出现报错: 

=INFO REPORT==== 8-Aug-2018::06:18:41 ===
autocluster: (cleanup) No partitioned nodes found.
 
 解决办法:需要将其他两个节点加入到第一个节点中
[root@localhost ~]#kubectl exec -it rabbitmq-84c7bb6bf9-6jq88 /bin/bash -n default
root@rabbitmq-84c7bb6bf9-6jq88:/#rabbitmqctl stop_app
root@rabbitmq-84c7bb6bf9-6jq88:/#rabbitmqctl join_cluster  rabbit@rabbitmq1
root@rabbitmq-84c7bb6bf9-6jq88:/#rabbitmqctl start_app

若出现节点无法加入集群的问题

root@rabbitmq-84c7bb6bf9-6jq88:/#rabbitmqctl reset
root@rabbitmq-84c7bb6bf9-6jq88:/#rabbitmqctl join_cluster  rabbit@rabbitmq1
root@rabbitmq-84c7bb6bf9-6jq88:/#rabbitmqctl start_app
 
测试访问地址:http://K8S地址:15672
kubernetes安装rabbitmq集群第1张

 20181102更新

部署单节点rabbitmq,使用自带管理界面插件的镜像,在docker hub上搜索rabbitmq,下载镜像docker pull rabbitmq:3.6-management

免责声明:文章转载自《kubernetes安装rabbitmq集群》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇《转》事务对数据库的重要性C# 实现 Snowflake算法 ID生成下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Storm实战:在云上搭建大规模实时数据流处理系统(Storm+Kafka)

在大数据时代,数据规模变得越来越大。由于数据的增长速度和非结构化的特性,常用的软硬件工具已无法在用户可容忍的时间内对数据进行采集、管理和处理。本文主要介绍如何在阿里云上使用Kafka和Storm搭建大规模消息分发和实时数据流处理系统,以及这个过程中主要遭遇的一些挑战。实践主要立足建立一套汽车状态实时监控系统,可以在阿里云上立即进行部署。   实时大数据处理...

centeros 下 docker 安装

关键字      镜像   容器   仓库 centerOs条件: 必须是 64 位操作系统 建议内核在 3.8 以上 查看内核版本 uname -r  安装     rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm  yum -...

docker使用技巧小记

1、在使用docker的时候有很多人习惯使用官方镜像、有的人喜欢自己制作镜像,有的时候都是使用默认的配置启动的服务,或者自己在制作镜像的时候直接将配置文件打包到镜像里面了。有的时候会碰到要修改配置文件的情况,而又不想麻烦去创建一次镜像,可以直接进入到docker container里面去修改文件。但是这样会有种情况就是修改错了配置文件导致container...

Kubernetes1.11.1 使用Nvidia显卡配置方法

一、安装 1.1、kubernetes硬件支持问题说明 Kubernetes目前主要在很小程度上支持CPU和内存的发现。Kubelet本身处理的设备非常少。Kubernetes对于硬件都使用都依赖于硬件厂商的自主研发kubernetes插件,通过硬件厂商的插件从而让kubernetes进行硬件支持。 实现的逻辑如下: 1.2、适用于Kubernetes的N...

用dockerfile创建jmeter的docker镜像

网上多是创建docker镜像是从jmeter官方下载jmeter的tgz包 今天我们用本地已经下载好的tgz包。 以下是dockerfile FROM java:8 ENV http_proxy "" ENV https_proxy "" RUN mkdir /jmeter RUN cd /jmeter ENV JMETER_VERSION=5.1....

k8s的namespace一直Terminating的完美解决方案

k8s的namespace一直Terminating的完美解决方案 在k8s集群中进行测试删除namespace是经常的事件,而为了方便操作,一般都是直接对整个名称空间进行删除操作。 相信道友们在进行此步操作的时候,会遇到要删除的namespace一直处于Terminating。下面我将给出一个完美的解决方案, 测试demo 创建demo namespac...