阿里云ack部署rabbitmq集群

1、创建持久化存储pv和pvc,我整理使用的是阿里云的NAS。

这里需要注意的是:

  • 设置下子目录,避免共用 NAS 时,文件组织混乱。
  • 给子目录分配权限,我这里设置的是777。

2、创建服务部署的yaml文件。
登录后复制

plain 复制代码
cat mq-Account.yaml 
apiVersion: v1
kind: ServiceAccount
metadata:
  name: rabbitmq
  namespace: service-rabbitmq
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rabbitmq
  namespace: service-rabbitmq
rules:
- apiGroups: [""]
  resources: ["endpoints"]
  verbs: ["get"]
- apiGroups: [""]
  resources: ["events"]
  verbs: ["create"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rabbitmq
  namespace: service-rabbitmq
subjects:
- kind: ServiceAccount
  name: rabbitmq
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: rabbitmq





cat mq-Configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: rabbitmq-config
  namespace: service-rabbitmq
data:
  rabbitmq.conf: |
    cluster_formation.peer_discovery_backend = k8s
    cluster_formation.k8s.host = kubernetes.default.svc.cluster.local
    cluster_formation.k8s.address_type = hostname
    cluster_formation.k8s.service_name = rabbitmq-headless
    queue_master_locator=min-masters
  enabled_plugins: |
    [rabbitmq_management,rabbitmq_peer_discovery_k8s,rabbitmq_delayed_message_exchange].
# 按需启用插件





cat mq-HeadlessService.yaml 
apiVersion: v1
kind: Service
metadata:
  name: rabbitmq-headless
  namespace: service-rabbitmq
spec:
  clusterIP: None
  ports:
    - name: epmd
      port: 4369
      protocol: TCP
      targetPort: 4369
    - name: cluster-links
      port: 25672
      protocol: TCP
      targetPort: 25672
  selector:
    app: rabbitmq
  sessionAffinity: None
  type: ClusterIP





cat mq-Service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: rabbitmq-external
  namespace: service-rabbitmq
spec:
  ports:
    - name: http
      port: 15672
      protocol: TCP
      targetPort: 15672
    - name: amqp
      port: 5672
      protocol: TCP
      targetPort: 5672
  selector:
    app: rabbitmq
  sessionAffinity: None
  type: ClusterIP






cat mq-Service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: rabbitmq-external
  namespace: service-rabbitmq
spec:
  ports:
    - name: http
      port: 15672
      protocol: TCP
      targetPort: 15672
    - name: amqp
      port: 5672
      protocol: TCP
      targetPort: 5672
  selector:
    app: rabbitmq
  sessionAffinity: None
  type: ClusterIP
[root@jumpserver test1]# cat mq-StatefulSet.yaml 
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rabbitmq-cluster
  namespace: service-rabbitmq
spec:
  replicas: 3
  selector:
    matchLabels:
      app: rabbitmq
  serviceName: rabbitmq-headless
  template:
    metadata:
      labels:
        app: rabbitmq
    spec:
      serviceAccountName: rabbitmq
      securityContext:
        fsGroup: 999
        runAsUser: 999
        runAsGroup: 999
      volumes:
        - name: config-volume
          configMap:
            name: rabbitmq-config
            items:
            - key: rabbitmq.conf
              path: "rabbitmq.conf"
            - key: enabled_plugins
              path: "enabled_plugins"
        - name: rabbitmq-config-rw
          emptyDir: {}
        - name: rabbitmq-data
          persistentVolumeClaim:
            claimName: nas-service-rabbitmq-pvc
      initContainers:
      - name: init
        image: harbor.hkfuliao.com/library/busybox:latest
        volumeMounts:
        - name: config-volume
          mountPath: /tmp/rabbitmq
        - name: rabbitmq-config-rw
          mountPath: /etc/rabbitmq
        command:
        - sh
        - -c
        - cp /tmp/rabbitmq/rabbitmq.conf /etc/rabbitmq/rabbitmq.conf && echo '' >> /etc/rabbitmq/rabbitmq.conf;
          cp /tmp/rabbitmq/enabled_plugins /etc/rabbitmq/enabled_plugins
      containers:
        - name: rabbitmq
          image: harbor.hkfuliao.com/service-rabbitmq/rabbitmq:3.9.13-management
          livenessProbe:
            exec:
              command: ["rabbitmq-diagnostics", "status"]
            initialDelaySeconds: 60
            periodSeconds: 60
            timeoutSeconds: 15
          readinessProbe:
            exec:
              command: ["rabbitmq-diagnostics", "ping"]
            initialDelaySeconds: 60
            periodSeconds: 60
            timeoutSeconds: 10
          ports:
            - name: amqp
              containerPort: 5672
              protocol: TCP
            - name: management-http
              containerPort: 15672
              protocol: TCP
            - name: epmd
              containerPort: 4369
              protocol: TCP
          resources: 
            limits:
              memory: 2Gi
            requests:
              memory: 2Gi
          env:
            - name: MY_POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name  # get pod.metadata.name, e.g. rabbitmq-cluster-0
            - name: MY_POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace  # get pod.metadata.namespace
            - name: RABBITMQ_DEFAULT_USER
              value: "admin"
            - name: RABBITMQ_DEFAULT_PASS
              value: "admin@123"
            - name: RABBITMQ_USE_LONGNAME
              value: "true"
            - name: K8S_SERVICE_NAME
              value: "rabbitmq-headless"
            - name: RABBITMQ_NODENAME
              value: "rabbit@$(MY_POD_NAME).$(K8S_SERVICE_NAME).$(MY_POD_NAMESPACE).svc.cluster.local"
            - name: K8S_HOSTNAME_SUFFIX
              value: .$(K8S_SERVICE_NAME).$(MY_POD_NAMESPACE).svc.cluster.local
            - name: RABBITMQ_ERLANG_COOKIE
              value: "91/rHX2a3GZw3RCHT1Q9y/G0Wo3cbX3qS06DyD4fAUs="    # generator by: echo $(openssl rand -base64 32)
          volumeMounts:
            - name: rabbitmq-config-rw
              mountPath: "/etc/rabbitmq"
            - name: rabbitmq-data
              mountPath: "/var/lib/rabbitmq/mnesia"

3、创建ingress路由,15672端口映射到指定域名上,然后DNS解析到此ingress的公网IP即可

相关推荐
KmSH8umpK8 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第八篇
数据库·redis·分布式
LemonSmile_10 小时前
CC Switch 配置 Claude Code 接入 阿里云百炼
阿里云·云计算·claude·百炼
KmSH8umpK11 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第七篇
数据库·redis·分布式
_F_y16 小时前
仿RabbitMQ实现消息队列-服务端核心模块实现(4)
分布式·rabbitmq
yyuuuzz18 小时前
aws 基础认知与实践注意点
运维·服务器·网络·云计算·github·aws
Albert Edison19 小时前
【RabbitMQ】发布确认模式(使用案例)
分布式·rabbitmq·ruby
EXnf1SbYK20 小时前
Redis分布式锁进阶第十二篇:全系列终极兜底复盘 + 锁架构巡检落地 + 线上零事故收尾方案
redis·分布式·架构
EXnf1SbYK21 小时前
Redis分布式锁进阶第八篇:锁超时乱序深度踩坑 + 看门狗失效真实溯源 + 业务长耗时标准化兜底方案
数据库·redis·分布式
EXnf1SbYK21 小时前
Redis分布式锁进阶第十一篇
数据库·redis·分布式
CS创新实验室1 天前
CS实验室行业报告:云计算与云原生行业分析报告
云原生·云计算