如何透過kubernetes-部署RabbitMQ

安全劍客發表於2020-11-30
RabbitMQ是實現了高階訊息佇列協議(AMQP)的開源訊息代理軟體(亦稱面向訊息的中介軟體)。RabbitMQ伺服器是用Erlang語言編寫的,而叢集和故障轉移是構建在開放電信平臺框架上的。AMQP:Advanced Message Queue,高階訊息佇列協議。它是應用層協議的一個開放標準,為面向訊息的中介軟體設計,基於此協議的客戶端與訊息中介軟體可傳遞訊息,並不受產品、開發語言燈條件的限制。
AMQP具有如下的特性

可靠性(Reliablity):使用了一些機制來保證可靠性,比如持久化、傳輸確認、釋出確認。

靈活的路由(Flexible Routing):在訊息進入佇列之前,透過Exchange來路由訊息。對於典型的路由功能,Rabbit已經提供了一些內建的Exchange來實現。針對更復雜的路由功能,可以將多個Exchange繫結在一起,也透過外掛機制實現自己的Exchange。

訊息叢集(Clustering):多個RabbitMQ伺服器可以組成一個叢集,形成一個邏輯Broker。

高可用(Highly Avaliable Queues):佇列可以在叢集中的機器上進行映象,使得在部分節點出問題的情況下佇列仍然可用。

多種協議(Multi-protocol):支援多種訊息佇列協議,如STOMP、MQTT等。

多種語言客戶端(Many Clients):幾乎支援所有常用語言,比如Java、.NET、Ruby等。

管理介面(Management UI):提供了易用的使用者介面,使得使用者可以監控和管理訊息Broker的許多方面。

跟蹤機制(Tracing):如果訊息異常,RabbitMQ提供了訊息的跟蹤機制,使用者可以找出發生了什麼。

外掛機制(Plugin System):提供了許多外掛,來從多方面進行擴充套件,也可以編輯自己的外掛。

RabbitMQ中的訊息都只能儲存在Queue中,生產者(下圖中的P)生產訊息並最終投遞到Queue中,消費者(下圖中的C)可以從Queue中獲取訊息並消費。

如何透過kubernetes-部署RabbitMQ如何透過kubernetes-部署RabbitMQ

RabbitMQ部署

下面是RabbitMQ部署的定義程式碼,此程式碼由兩部分組成,即RabbitMQ部署的部署以及其代理服務。映象使用的是bitnami/rabbitmq:latest。透過NodePort模式對外暴露了15672和5672埠,並透過nfs檔案系統對RabbitMQ的資料進行持久化。

#-------------定義RabbitMQ部署-----------------
apiVersion: apps/v1beta2
kind: Deployment
metadata:
 name: rabbit
spec:
 replicas: 1
 selector:
   matchLabels:
     app: rabbit
 strategy:
   rollingUpdate:
     maxSurge: 25%
     maxUnavailable: 25%
   type: RollingUpdate
 template:
   metadata:
     labels:
       app: rabbit
   spec:
     containers:
     - image: bitnami/rabbitmq:latest
       imagePullPolicy: IfNotPresent
       name: rabbit
       ports:
       - containerPort: 15672
         name: rabbit15672
         protocol: TCP
       - containerPort: 5672 
         name: rabbit5672 
         protocol: TCP
       resources: {}
       volumeMounts:
       - mountPath: /bitnami
         name: rabbit-persistent-storage
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
      - name: rabbit-persistent-storage
        nfs:
         path: /home/nfs-share/rabbit
         server: 10.0.33.201
#-----------------定義rabbit的代理服務--------------
apiVersion: v1
kind: Service
metadata:
 name: rabbit-service
spec:
 ports:
 - name: rabbit15672
   nodePort: 31199
   port: 15672
   protocol: TCP
   targetPort: 15672
 - name: rabbit15672 
   nodePort: 305672 
   port: 5672 
   protocol: TCP 
   targetPort: 5672
 selector:
   app: rabbit
 type: NodePort

透過kubectl,執行下面的 在Kubernetes叢集中部署Oracle資料庫。

$ kubectl create -f rabbitmq.yaml --namespace=kube-public

在部署完成後,透過下面的 可以檢視RabbitMQ暴露的埠:

$ kubectl get svc --namespace=kube-public
部署驗證

在瀏覽器中輸入:,訪問部署好的RabbitMQ。在登入頁面輸入使用者名稱和密碼(此處初始user/bitnami),系統將會進入RabbitMQ的主頁。

如何透過kubernetes-部署RabbitMQ如何透過kubernetes-部署RabbitMQ

執行環境配置

在部署時,可以透過設定下面的環境變數來改變容器的執行時:

RABBITMQ_USERNAME: 使用者名稱,預設值為user

RABBITMQ_PASSWORD: 密碼,預設值為bitnami

RABBITMQ_HASHED_PASSWORD: 雜湊密碼

RABBITMQ_VHOST: 安裝後啟動建立的虛擬主機,預設值為 /

RABBITMQ_ERL_COOKIE: Erlang cookie用於確定不同的節點之間是否允許行互相通訊。

RABBITMQ_NODE_TYPE: 節點型別,有限制: stats, queue-ram or queue-disc。 預設值為stats

RABBITMQ_NODE_NAME: 節點名稱和主機,例如: node@hostname或node 。預設值為rabbit@localhost。

RABBITMQ_NODE_PORT_NUMBER: 節點埠,預設值為5672

RABBITMQ_CLUSTER_NODE_NAME: 叢集名稱,例如:clusternode@hostname

RABBITMQ_CLUSTER_PARTITION_HANDLING: 叢集分割槽恢復機制,預設值為: ignore

RABBITMQ_MANAGER_PORT_NUMBER: 管理埠,預設值為15672

RABBITMQ_DISK_FREE_LIMIT: Rabbitmq儲存資料的可用空間限制,當低於該值的時候,將觸發流量限制。預設值為 {mem_relative, 1.0}

RABBITMQ_ULIMIT_NOFILES: 資源限制, 開啟檔案描述符的最大數目,預設值為65536

原文地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2738043/,如需轉載,請註明出處,否則將追究法律責任。

相關文章