build Dockerfile内容

FROM rabbitmq:3.13-management

COPY rabbitmq_delayed_message_exchange-3.13.0.ez /opt/rabbitmq/plugins
RUN chown -R rabbitmq:rabbitmq /opt/rabbitmq/plugins/rabbitmq_delayed_message_exchange-3.13.0.ez && \
    rabbitmq-plugins enable --offline rabbitmq_delayed_message_exchange

插件地址

rabbitmq_delayed_message_exchange-3.13.0.ez

创建secret

apiVersion: v1
kind: Secret
metadata:
  name: rabbitmq-secret
type: Opaque
stringData:
  username: admin
  password: "123456"  # 请修改
  erlang-cookie: "aaabbbbcccceeee123"

创建configmap

apiVersion: v1
kind: ConfigMap
metadata:
  name: rabbitmq-cm
data:
  rabbitmq.conf: |
    management.tcp.port = 15672
  enabled_plugins: |
    [rabbitmq_management, rabbitmq_delayed_message_exchange].

创建headless svc

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq-headless
spec:
  clusterIP: None
  selector:
    app: rabbitmq
  ports:
    - name: amqp
      port: 5672
      targetPort: 5672
    - name: epmd
      port: 4369
      targetPort: 4369
    - name: distribution
      port: 25672
      targetPort: 25672

创建svc

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq-svc
spec:
  type: NodePort
  selector:
    app: rabbitmq
  ports:
    - name: amqp
      port: 5672
      targetPort: 5672
      nodePort: 30672
    - name: management
      port: 15672
      targetPort: 15672
      nodePort: 31672

部署rabbitmq

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rabbitmq
spec:
  serviceName: rabbitmq-headless
  replicas: 1
  selector:
    matchLabels:
      app: rabbitmq
  template:
    metadata:
      labels:
        app: rabbitmq
    spec:
      containers:
        - name: rabbitmq
          image: 192.168.66.241/base/rabbitmq-delayed:3.13.0
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 5672
              name: amqp
            - containerPort: 15672
              name: management
            - containerPort: 4369
              name: epmd
            - containerPort: 25672
              name: distribution
          env:
            - name: RABBITMQ_DEFAULT_USER
              valueFrom:
                secretKeyRef:
                  name: rabbitmq-secret
                  key: username
            - name: RABBITMQ_DEFAULT_PASS
              valueFrom:
                secretKeyRef:
                  name: rabbitmq-secret
                  key: password
            - name: RABBITMQ_ERLANG_COOKIE
              valueFrom:
                secretKeyRef:
                  name: rabbitmq-secret
                  key: erlang-cookie
            # 集群发现配置
            - name: RABBITMQ_USE_LONGNAME
              value: "false"
          volumeMounts:
            - name: rabbitmq-config
              mountPath: /etc/rabbitmq/conf.d/
            - name: rabbitmq-data
              mountPath: /var/lib/rabbitmq
          livenessProbe:
            exec:
              command: ["rabbitmq-diagnostics", "status"]
            initialDelaySeconds: 60
            periodSeconds: 30
            timeoutSeconds: 10
          readinessProbe:
            exec:
              command: ["rabbitmq-diagnostics", "ping"]
            initialDelaySeconds: 20
            periodSeconds: 10
            timeoutSeconds: 5
          resources:
            requests:
              memory: "512Mi"
              cpu: "500m"
            limits:
              memory: "8Gi"
              cpu: "4000m"
      imagePullSecrets:
      - name: regcred
      volumes:
        - name: rabbitmq-config
          configMap:
            name: rabbitmq-cm
            defaultMode: 0644
        - name: rabbitmq-data
          hostPath:
            type: DirectoryOrCreate
            path: /data/rabbitmq