kubernetes安裝rabbitmq集群


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

 20181102更新

部署單節點rabbitmq,使用自帶管理界面插件的鏡像,在docker hub上搜索rabbitmq,下載鏡像docker pull rabbitmq:3.6-management


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM