首页 > 其他分享 >基于k8s环境部署RabbitMQ集群

基于k8s环境部署RabbitMQ集群

时间:2023-06-09 18:55:58浏览次数:36  
标签:rmq name yaml RABBITMQ rabbitmq cluster 集群 RabbitMQ k8s

一、前言

本次案例是基于Statefulset部署RabbitMQ集群,同时基于Storage Class(存储类)来作为集群数据的持久化后端,因此在此之前已经部署好了NSF作为后端存储

 

 

1、创建服务命名空间Namespace

#kubectl create ns rabbitmq

2、创建rbac权限

Service Account是kubernetes Pod中的程序用于访问Kubernetes API的Account(账号),它作为Pod中的程序提供访问Kubernetes API的身份标示,下面是我们创建Rabbitmq Pod的ServiceAccount,并针对Kubernetes的enpoint资源授权,创建相关的role和rolebinding

#vim rabbitmq-rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: rmq-cluster
  namespace: rabbitmq
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rmq-cluster
  namespace: rabbitmq
rules:
  - apiGroups:
      - ""
    resources:
      - endpoints
    verbs:
      - get
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rmq-cluster
  namespace: rabbitmq
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: rmq-cluster
subjects:
- kind: ServiceAccount
  name: rmq-cluster
  namespace: rabbitmq

 

#kubectl create -f rabbitmq-rbac.yaml

#kubectl get -f rabbitmq-rbac.yaml

3、创建访问rabbitmqm集群的service

#vim rabbitmq-service.yaml

kind: Service
apiVersion: v1
metadata:
  labels:
    app: rmq-cluster
  name: rmq-cluster
  namespace: rabbitmq
spec:
  clusterIP: None
  ports:
  - name: amqp
    port: 5672
    targetPort: 5672
  selector:
    app: rmq-cluster
---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: rmq-cluster
    type: LoadBalancer
  name: rmq-cluster-balancer
  namespace: rabbitmq
spec:
  ports:
  - name: http
    port: 15672
    protocol: TCP
    targetPort: 15672
  - name: amqp
    port: 5672
    protocol: TCP
    targetPort: 5672
  selector:
    app: rmq-cluster
  type: NodePort

 

#kubectl create -f rabbitmq-service.yaml

#kubectl get -f rabbitmq-service.yaml 

4、创建rabbitmq secret

#vim rabbitmq-secret.yaml

kind: Secret
apiVersion: v1
metadata:
  name: rmq-cluster-secret
  namespace: rabbitmq
stringData:
  cookie: ERLANG_COOKIE
  password: RABBITMQ_PASS
  url: amqp://RABBITMQ_USER:RABBITMQ_PASS@rmq-cluster-balancer
  username: RABBITMQ_USER
type: Opaque

# kubectl create  -f rabbitmq-secret.yaml

#kubectl get   -f rabbitmq-secret.yaml

5、创建rabbitmq configmap资源

#vim  rabbitmq-configmap.yaml

kind: ConfigMap
apiVersion: v1
metadata:
  name: rmq-cluster-config
  namespace: rabbitmq
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
data:
    enabled_plugins: |
      [rabbitmq_management,rabbitmq_peer_discovery_k8s].
    rabbitmq.conf: |
      loopback_users.guest = false

      default_user = RABBITMQ_USER
      default_pass = RABBITMQ_PASS
      ## Clustering
      cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s
      cluster_formation.k8s.host = kubernetes.default.svc.cluster.local
      cluster_formation.k8s.address_type = hostname
      #################################################
      # public-service is rabbitmq-cluster's namespace#
      #################################################
      cluster_formation.k8s.hostname_suffix = .rmq-cluster.rabbitmq.svc.cluster.local
      cluster_formation.node_cleanup.interval = 10
      cluster_formation.node_cleanup.only_log_warning = true
      cluster_partition_handling = autoheal
      ## queue master locator
      queue_master_locator=min-masters

 

#kubectl create -f rabbitmq-configmap.yaml

#kubectl get -f rabbitmq-configmap.yaml

6、通过Statefulset类型创建rabbitmq集群

#vim rabbitmq-cluster-sts.yaml

kind: StatefulSet
apiVersion: apps/v1
metadata:
  labels:
    app: rmq-cluster
  name: rmq-cluster
  namespace: rabbitmq
spec:
  replicas: 3
  selector:
    matchLabels:
      app: rmq-cluster
  serviceName: rmq-cluster
  template:
    metadata:
      labels:
        app: rmq-cluster
    spec:
      containers:
      - args:
        - -c
        - cp -v /etc/rabbitmq/rabbitmq.conf ${RABBITMQ_CONFIG_FILE}; exec docker-entrypoint.sh
          rabbitmq-server
        command:
        - sh
        env:
        - name: RABBITMQ_DEFAULT_USER
          valueFrom:
            secretKeyRef:
              key: username
              name: rmq-cluster-secret
        - name: RABBITMQ_DEFAULT_PASS
          valueFrom:
            secretKeyRef:
              key: password
              name: rmq-cluster-secret
        - name: RABBITMQ_ERLANG_COOKIE
          valueFrom:
            secretKeyRef:
              key: cookie
              name: rmq-cluster-secret
        - name: K8S_SERVICE_NAME
          value: rmq-cluster
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: RABBITMQ_USE_LONGNAME
          value: "true"
        - name: RABBITMQ_NODENAME
          value: rabbit@$(POD_NAME).rmq-cluster.$(POD_NAMESPACE).svc.cluster.local
        - name: RABBITMQ_CONFIG_FILE
          value: /var/lib/rabbitmq/rabbitmq.conf
        image: registry.cn-beijing.aliyuncs.com/dotbalo/rabbitmq:3.7-management 
        imagePullPolicy: IfNotPresent
        livenessProbe:
          exec:
            command:
            - rabbitmqctl
            - status
          initialDelaySeconds: 30
          timeoutSeconds: 10
        name: rabbitmq
        ports:
        - containerPort: 15672
          name: http
          protocol: TCP
        - containerPort: 5672
          name: amqp
          protocol: TCP
        readinessProbe:
          exec:
            command:
            - rabbitmqctl
            - status
          initialDelaySeconds: 10
          timeoutSeconds: 10
        volumeMounts:
        - mountPath: /etc/rabbitmq
          name: config-volume
          readOnly: false
        - mountPath: /var/lib/rabbitmq
          name: rabbitmq-storage
          readOnly: false
      serviceAccountName: rmq-cluster
      terminationGracePeriodSeconds: 30
      volumes:
      - configMap:
          items:
          - key: rabbitmq.conf
            path: rabbitmq.conf
          - key: enabled_plugins
            path: enabled_plugins
          name: rmq-cluster-config
        name: config-volume
  volumeClaimTemplates:
  - metadata:
      name: rabbitmq-storage
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: "nfs-storage"
      resources:
        requests:
          storage: 4Gi

 

#kubectl create -f rabbitmq-cluster-sts.yaml

二、验证集群

进入其中一个pod副本查看集群状态是否异常

[root@k8s-master01 rabbitmq]# kubectl exec -it rmq-cluster-0 -n rabbitmq  bash 

通过service地址+端口访问rabbitmq web界面或者创建ingress实现域名访问1

 

标签:rmq,name,yaml,RABBITMQ,rabbitmq,cluster,集群,RabbitMQ,k8s
From: https://www.cnblogs.com/bixiaoyu/p/17470036.html

相关文章

  • 【k8s】服务选配及部署
    服务选配及部署焱牛平台服务选配焱牛开放平台https://open.hand-china.com/home猪齿鱼代码仓库创建应用服务修改配置配置完成后推送至git仓库进行部署如果pod详情加载失败检查deployment的路径流程为:maven编译【pom】-doker加载【dockerF......
  • rancher+k8s+harbor
    离线环境部署Rancher-2.5.9、Harbor、k8s-1.20.15,再升级为Rancher-2.5.16、Harbor、k8s-1.20.服务器:腾讯云主机4台,按需或竞价计费经济实惠,注意4台机器在同一地域的同一可用区,以确保可以内网互通。主机名规格操作系统是否绑定公网IP角色k8s-master2C4GCentos7.5否k......
  • Elasticsearch专题精讲—— REST APIs —— Document APIs —— Reindex API —— 跨
    Reindexfromremote(跨集群索引)https://www.elastic.co/guide/en/elasticsearch/reference/8.8/docs-reindex.html#reindex-from-remoteReindexsupportsreindexingfromaremoteElasticsearchcluster:Reindex支持从远程Elasticsearch集群进行重新索引:curl-XP......
  • k8s 证书全解析
    #01-创建证书和环境准备本步骤主要完成:-(optional)role:os-harden,可选系统加固,符合linux安全基线,详见[upstream](https://github.com/dev-sec/ansible-collection-hardening/tree/master/roles/os_hardening)-(optional)role:chrony,[可选集群节点时间同步](../guide/chrony......
  • tomcat 负载均衡 集群配置
    作者:罗代均ldj_work#126.com,转载请保持完整性0,环境说明      Apache:apache_2.0.55    1个       Tomcat:apache-tomcat-5.5.17(zip版)2个       mod_jk::mod_jk-apache-2.0.55.so1个第一部分:负载均衡   负载均衡,就是apache将客户请求......
  • RabbitMQ 延时队列
    分布式事务-最终一致性库存解锁逻辑一、Seata的不足Seata的AT模式是二阶段提交协议(2PC),第一阶段将本地事务直接提交,第二阶段想要回滚的时候,是通过回滚日志(日志表)做的反向补偿,数据库原来是多少又改了回来。Seata应用场景:后台管理系统,比如添加商品,优惠、库存、积分、会员要成功都成......
  • 从KubeOperator开启k8s之旅
    文章目录什么是KbueOperator?KubeOperator的技术优势部署方式部署模式Kubernetes离线安装包安装环境准备1环境要求2下载离线包安装KubeOperator访问KubeOperator升级KubeOperator什么是KbueOperator?FIT2CLOUD飞致云在2019年11月正式对外发布了容器领域第一个项目——KubeOp......
  • 1、Kafka集群部署(脚本一键部署JDK、Zookeeper、Kafka)
    消息队列kafka应用场景削峰填谷异步解耦顺序收发分布式事务一致性大数据分析分布式缓存同步蓄流压测kafka优点高吞吐量可扩展永久存储高可用性副本和分区replication:副本partition:分区,分区不要超过节点数分区的优势:1、实现存储空间的横向扩容,将多个kafka服务器的空间......
  • k8s执行crictl images报错
    FATA[0000]validateserviceconnection:CRIv1imageAPIisnotimplementedforendpoint"unix:///run/containerd/containerd.sock":rpcerror:code=Unimplementeddesc=unknownserviceruntime.v1.ImageService解决方法:找到runtime_type写入"io.conta......
  • .Net全网最简RabbitMQ操作【强烈推荐】
    【前言】本文自1年前的1.0版本推出以来,已被业界大量科技公司采用。同时也得到了.Net圈内多位大佬的关注+推荐,文章也被多家顶级.Net/C#公众号转载。现在更新到了7.0版本,更好的服务各位.Neter。 【正文】支持.Net/.NetCore/.NetFramework,可以部署在Docker,Windows,Linux,......