【问题标题】:How rabbitmq pod traffic are handled in kubernetes when running single node with 3 replicas?运行具有 3 个副本的单节点时,如何在 kubernetes 中处理 rabbitmq pod 流量?
【发布时间】:2022-11-17 13:25:06
【问题描述】:

我让 rabbitmq 在具有 3 个副本的单个节点中运行。问题是队列没有正确反映,所以我强行将流量转发到一个 pod。当我们必须更新 rabbitmq 以及应用程序连接到其他节点的某些情况时,这不是一个好方法。

rabbitmq.yml(状态集)

---
apiVersion: v1
kind: Namespace
metadata:
  name: rabbitmq-test
  labels:
    name: rabbitmq-test
---
apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
  namespace: rabbitmq-test
  labels:
    app: rabbitmq
spec:
  type: NodePort
  ports:
    - name: amqp
      nodePort: 30000
      port: 5672
      protocol: TCP
      targetPort: 5672
    - name: management
      nodePort: 30001
      port: 15672
      protocol: TCP
      targetPort: 15672
  selector:
    app: rabbitmq
    statefulset.kubernetes.io/pod-name: rabbitmq-0
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rabbitmq
  namespace: rabbitmq-test
spec:
  selector:
    matchLabels:
      app: rabbitmq
  serviceName: "rabbitmq"
  minReadySeconds: 10
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: rabbitmq
    spec:
      volumes:
        - name: rabbitmq-storage
          persistentVolumeClaim:
            claimName: rabbitmq-pvc
      terminationGracePeriodSeconds: 10
      containers:
        - name: rabbitmq
          image: rabbitmq:3.11.3-management
          lifecycle:
            postStart:
              exec:
                command: ["/bin/sh", "-c", "cp /mnt/data/test/rabbitmq_delayed_message_exchange-3.11.1.ez /opt/rabbitmq/plugins/ && rabbitmq-plugins --offline enable rabbitmq_peer_discovery_k8s rabbitmq_delayed_message_exchange"]
          imagePullPolicy: Always
          env:
            - name: RABBITMQ_DEFAULT_USER
              value: ""
            - name: RABBITMQ_DEFAULT_PASS
              value: ""
            - name: RABBITMQ_DEFAULT_VHOST
              value: ""
          ports:
            - name: amqp
              containerPort: 5672
            - name: management
              containerPort: 15672
          volumeMounts:
            - mountPath: "/mnt/data/test"
              name: rabbitmq-storage
          resources:
            requests:
              cpu: 500m
              memory: 256Mi
            limits:
              cpu: 1000m
              memory: 512Mi
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: rabbitmq-hpa
  namespace: rabbitmq-test
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: StatefulSet
    name: rabbitmq
  minReplicas: 3
  maxReplicas: 5
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 50
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageUtilization: 60
  behavior:
    scaleDown:
      policies:
        - type: Pods
          value: 2
          periodSeconds: 60
        - type: Percent
          value: 5
          periodSeconds: 60

【问题讨论】:

标签: kubernetes rabbitmq kubectl kubernetes-statefulset rabbitmqctl


【解决方案1】:

看来您的服务选择器有误。 您正在使用 statefulset.kubernetes.io/pod-name: rabbitmq-0 定位 pod。

但是在有状态集上,只有第一个 pod 将被命名为rabbitmq-0,接下来的将被命名为rabbitmq-1, rabbitmq-2, ...。如果您的服务旨在将流量转发到 STS 中的所有 pod,那么您的服务标签选择器应与 STS 的标签选择器相匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多