प्रौद्योगिकी साझेदारी

[k8s मध्ये rabbitmq संस्थापयन्तु] rabbitmq संस्थापयन्तु तथा k8s मध्ये एकं दर्पणसमूहं निर्मायन्तु - pvc संस्करणम्

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

आमुख

अस्मिन् लेखे निर्मितः rabbitmq क्लस्टरः rabbitmq_peer_discovery_k8s इत्यस्य रूपेण निर्मितः अस्ति प्लग-इन् स्वयमेव k8s api तः नोड् सूचनां पठति तथा च rabbitmq क्लस्टरं निर्माति, अतः आँकडानां गारण्टी भवितुमर्हति स्थायित्वं hostpath + node affinity इत्यस्य रूपं ग्रहीतुं शक्नोति, अथवा pvc इत्यस्य रूपं ग्रहीतुं शक्नोति अस्मिन् लेखे pvc इत्यस्य उपयोगस्य वर्णनं भविष्यति ।

1. परिस्थितयः पर्यावरणवर्णनं च

k8s संस्करणं k8s-1.29.4 साझाभण्डारणस्य रूपेण निर्मितं भवति यदि सः अलीबाबा मेघस्य उपयोगेन क्लस्टरः अस्ति तर्हि कठिनं माउण्ट् कृत्वा आँकडानां स्थायित्वं प्राप्तुं शक्यते disk, nas, अथवा object storage ization, साझा भण्डारणस्य उपयोगस्य दोषः दुर्बलपठनलेखनप्रदर्शनस्य सामान्यसमस्या अस्ति ।

4.2.configmap विन्यासः रचयन्तु

निम्नलिखितविन्यासं autotest-rabbitmq-config.yaml इत्यत्र रक्षन्तु, विन्यासे पूर्वनिर्धारितं vhost तथा ​​उपयोक्तृगुप्तशब्दं विन्यस्यताम्, तथा च क्लस्टर नोड् [स्थापनात् पूर्वं नोड् नाम योजनां कुर्वन्तु] सूचनां आरभत

apiVersion: v1
kind: ConfigMap
metadata:
  name: autozx-rabbitmq-config
  namespace: zx-app
  labels:
    appname: pcauto-zx
    app: autozx-rabbitmq-config 
data:
  enabled_plugins: |
    [rabbitmq_management,rabbitmq_peer_discovery_k8s].
  rabbitmq.conf: |
    cluster_name = autozx-rabbitmq
    listeners.tcp.default = 5672
    
    default_vhost = /
    default_user = admin
    default_pass = pconline

    default_user_tags.administrator = true
    default_user_tags.management = true
    default_user_tags.custom_tag = true

    channel_max = 1024
    tcp_listen_options.backlog = 2048

    cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s
    cluster_formation.k8s.host = kubernetes.default.svc.cluster.local
    cluster_formation.k8s.address_type = hostname
    cluster_formation.node_cleanup.interval = 30
    cluster_formation.node_cleanup.only_log_warning = true

    cluster_partition_handling = autoheal

    queue_master_locator=min-masters
    loopback_users.guest = false
    cluster_formation.k8s.hostname_suffix = .autozx-rabbitmq.zx-app.svc.cluster.local
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
4.3.statefulset तथा ​​service headless विन्यासाः रचयन्तु

३ प्रतियाः गृह्यताम्

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: autozx-rabbitmq 
  namespace: zx-app 
  labels:
    appname: pcauto-zx
    app: autozx-rabbitmq
spec:
  serviceName: "autozx-rabbitmq"
  replicas: 3
  selector:
    matchLabels:
      app: autozx-rabbitmq
  template:
    metadata:
      labels:
        app: autozx-rabbitmq
    spec:
      containers:
      - name: rabbitmq-server
        image: pcgroup-registry-vpc.cn-shenzhen.cr.aliyuncs.com/public/rabbitmq:3.12.14-management 
        imagePullPolicy: IfNotPresent
        env:
        - name: RABBITMQ_ERLANG_COOKIE
          value: "YZSDHWMFSMKEMBDHSGGZ"
        - name: K8S_SERVICE_NAME
          value: autozx-rabbitmq 
        - 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).$(K8S_SERVICE_NAME).$(POD_NAMESPACE).svc.cluster.local
        ports:
        - name: http
          containerPort: 15672 
        - name: amqp
          containerPort: 5672 
        readinessProbe:
          exec:
            command:
            - rabbitmq-diagnostics
            - status
          initialDelaySeconds: 20
          periodSeconds: 60
          timeoutSeconds: 10
        volumeMounts:
        - name: rbmq-data
          mountPath: /var/lib/rabbitmq
        - name: rabbitmq-config-volume
          mountPath: /etc/rabbitmq/ 
      restartPolicy: Always 
      serviceAccountName: rabbitmq-cluster
      terminationGracePeriodSeconds: 30
      volumes:
        - name: rabbitmq-config-volume
          configMap:
            name: autozx-rabbitmq-config
  volumeClaimTemplates:
  - metadata:
      name: rbmq-data
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: example-storageclass
      resources:
        requests:
          storage: 20Gi
---
apiVersion: v1
kind: Service
metadata:
  name: autozx-rabbitmq
  namespace: zx-app
  labels:
    appname: pcauto-zx
    app: autozx-rabbitmq
spec:
  ports:
  - port: 5672
  clusterIP: None
  selector:
    app: autozx-rabbitmq
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94

नोट्: यदि भवान् समानं पोड् एकस्मिन् नोड् मध्ये नियुक्तुं परिहरितुं इच्छति तर्हि भवान् निम्नलिखितविन्यासं योजयितुं शक्नोति:

      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                      - autozx-rabbitmq
              topologyKey: "kubernetes.io/hostname"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
4.4.प्राधिकरणविन्यासः

नोड् सूचनां पठितुं statefulset अधिकृत्य serviceAccount, role, RoleBinding च विन्यस्यताम्

apiVersion: v1
kind: Service
metadata:
  name: autozx-rabbitmq-manage
  namespace: zx-app
  labels:
    app: autozx-rabbitmq-manage
    appname: pcauto-zx
spec:
  ports:
  - port: 5672
    name: amqp
  - port: 15672
    name: http
  selector:
    app: autozx-rabbitmq
  type: LoadBalancer 
[root@autobbs-docker-240-213 rabbitmq]# cat rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: rabbitmq-cluster
  namespace: zx-app
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rabbitmq-cluster
  namespace: zx-app
rules:
- apiGroups: [""]
  resources: ["endpoints"]
  verbs: ["get"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rabbitmq-cluster
  namespace: zx-app
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: rabbitmq-cluster
subjects:
- kind: ServiceAccount
  name: rabbitmq-cluster
  namespace: zx-app
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
4.5.सेवाविन्यासस्य निर्माणं कुर्वन्तु

amqp पोर्ट् 5672 तथा प्रबन्धन पोर्ट् 15672 कृते सेवाप्रॉक्सी सेवां विन्यस्यताम् ।

apiVersion: v1
kind: Service
metadata:
  name: autozx-rabbitmq-manage
  namespace: zx-app
  labels:
    app: autozx-rabbitmq-manage
    appname: pcauto-zx
spec:
  ports:
  - port: 5672
    name: amqp
  - port: 15672
    name: http
  selector:
    app: autozx-rabbitmq
  type: LoadBalancer 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

5. संस्थापनानन्तरं विन्यासः

rabbitmq क्लस्टरं 3-node mirror cluster इत्यत्र सेट् कुर्वन्तु, चरणं 4.4 पूर्णं कृत्वा, भवान् loadbalancer इत्यस्य IP मार्गेण console मध्ये प्रवेशं कर्तुं शक्नोति: http://ip:15672, तथा च configmap to इत्यत्र सेट् कृतं default_user तथा default_pass इत्यस्य उपयोगं कर्तुं शक्नोति log in इति ।
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

दर्पणविधिसेटिंग्स् : १.
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

सेट् कृत्वा : १.
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

प्रतिबिम्बविधानं आदेशेन सेट् कर्तुं शक्यते :
demo vhost इत्यस्य image execution आदेशं सेट् कुर्वन्तु:
rabbitmqctl set_policy -p demo ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
पूर्वनिर्धारित vhost/ कृते प्रतिबिम्बविधानं सेट् कुर्वन्तु:
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

6. स्थापनानिर्देशाः

  • विन्यासस्य उपयोगात् पूर्वं, विन्यासे autozx इत्यस्य स्थाने आवश्यकं नाम विन्यस्तं नामस्थानं भवति: zx-app, स्वस्य नामस्थानं परिवर्तयन्तु, appname pcauto-zx इति, स्वस्य अनुप्रयोगनाम परिवर्तयन्तु, एतत् लेबलं अपि कर्तुं शक्नोति लोपितः भवतु .
  • विन्यासे दर्पणपतेः निजीदर्पणपतेः उपयोगं करोति दर्पणं dockerhub तः डाउनलोड् कृत्वा निजीदर्पणगोदामे प्रतिबिम्बितम् अस्ति यदि बाह्यजालपुटे k8s इत्यनेन सह प्रत्यक्षतया सम्बद्धं कर्तुं शक्नोति, rabbitmq:3.12.14 -प्रबन्धनस्य प्रयोगः प्रत्यक्षतया कर्तुं शक्यते। अन्यथा, एकं पारयोग्यं दर्पणसङ्केतं विन्यस्यताम् ।
  • पूर्वनिर्धारितं उपयोक्तृनाम गुप्तशब्दं च admin अस्ति ।
  • pvc टेम्पलेट् इत्यस्मिन् भण्डारणवर्गः: example-storageclass भवतः स्वस्य भण्डारणवर्गे परिवर्तितः अस्ति
  • "5. संस्थापनानन्तरं विन्यासः" यतः विन्यासविधयः समानाः सन्ति, पूर्वलेखे स्क्रीनशॉट् उपयुज्यते ।