डिस्ट्रिब्यूटेड प्रोफ़ाइलिंग के लिए XProf Kubernetes डिप्लॉयमेंट

इस दस्तावेज़ में, Kubernetes पर डिस्ट्रिब्यूट किए गए सेटअप में XProf को डिप्लॉय करने का तरीका बताया गया है. इसके लिए, वर्कर और एग्रीगेटर के लिए अलग-अलग डिप्लॉयमेंट का इस्तेमाल किया जाता है.

Kubernetes के लिए XProf Aggregator Worker का आर्किटेक्चर

ज़रूरी शर्तें

  • Kubernetes क्लस्टर. इस ट्यूटोरियल में, कम से कम सेटअप के लिए हम minikube का इस्तेमाल कर रहे हैं.
  • XProf की Docker इमेज. इसे बनाने के निर्देशों के लिए, XProf की Docker इमेज बनाना लेख पढ़ें.

Kubernetes कॉन्फ़िगरेशन

यहां दिए गए YAML कॉन्फ़िगरेशन, XProf वर्कर और एग्रीगेटर के लिए Kubernetes डिप्लॉयमेंट और सेवाओं के बारे में बताते हैं.

एग्रीगेटर डिप्लॉयमेंट, एक रेप्लिका चलाता है. यह रेप्लिका, उपयोगकर्ता के अनुरोधों को स्वीकार करती है और राउंड-रॉबिन नीति का इस्तेमाल करके, वर्कर रेप्लिका को प्रोफ़ाइलिंग के टास्क बांटती है. --worker_service_address फ़्लैग, एग्रीगेटर को वर्कर सेवा पर अनुरोध भेजने के लिए कॉन्फ़िगर करता है.

वर्कर डिप्लॉयमेंट, कई रेप्लिका चलाता है. हर रेप्लिका, एग्रीगेटर से प्रोसेसिंग टास्क सुनने के लिए, --grpc_port फ़्लैग के ज़रिए gRPC पोर्ट को दिखाता है.

एग्रीगेटर

सबसे पहले, agg.yaml फ़ाइल बनाते हैं और उसमें कॉन्टेंट चिपकाते हैं:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: xprof-aggregator-deployment
  labels:
    app: xprof-aggregator-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: xprof-aggregator-app
  template:
    metadata:
      labels:
        app: xprof-aggregator-app
    spec:
      containers:
      - name: aggregator-container
        image: xprof:2.21.3
        imagePullPolicy: Never
        env:
        - name: GRPC_LB_POLICY
          value: "round_robin"
        - name: GRPC_DNS_RESOLVER
          value: "native"
        args:
          - "--port=10000"
          - "--worker_service_address=dns:///xprof-worker-service.default.svc.cluster.local:8891"
          - "-gp=50051"
          - "--hide_capture_profile_button"
        ports:
        - containerPort: 10000

---
apiVersion: v1
kind: Service
metadata:
  name: xprof-agg-service
  labels:
    app: xprof-aggregator-app
spec:
  selector:
    app: xprof-aggregator-app
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    targetPort: 10000
    nodePort: 30001

वर्कर

हम वर्कर के लिए worker.yaml फ़ाइल बनाते हैं:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: xprof-worker-deployment
  labels:
    app: xprof-worker-app
spec:
  replicas: 4
  selector:
    matchLabels:
      app: xprof-worker-app
  template:
    metadata:
      labels:
        app: xprof-worker-app
    spec:
      containers:
      - name: worker-container
        image: xprof:2.21.3
        imagePullPolicy: Never
        args:
          - "--port=9999"
          - "-gp=8891"
          - "--hide_capture_profile_button"
        ports:
        - containerPort: 8891

---
apiVersion: v1
kind: Service
metadata:
  name: xprof-worker-service
  labels:
    app: xprof-worker-app
spec:
  selector:
    app: xprof-worker-app
  clusterIP: None
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8891

Minikube सेटअप करना

सेटअप को डिप्लॉय करने के लिए, यह कमांड चलाएं:

kubectl apply -f worker.yaml
kubectl apply -f agg.yaml

आपको डिप्लॉय किए गए ऑब्जेक्ट की जांच करने का विकल्प मिलना चाहिए:

kubectl get services
NAME                   TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes             ClusterIP   10.96.0.1      <none>        443/TCP          13h
xprof-agg-service      NodePort    10.96.13.172   <none>        8080:30001/TCP   13h
xprof-worker-service   ClusterIP   None           <none>        80/TCP           13h

अब अपने एग्रीगेटर से कनेक्ट करें:

minikube service xprof-agg-service --url
http://127.0.0.1:50609
❗  Because you are using a Docker driver on darwin, the terminal needs to be open to run it.

अब इसे अपने ब्राउज़र में ऐक्सेस किया जा सकता है:

XProf एग्रीगेटर लैंडिंग पेज