ডিস্ট্রিবিউটেড প্রোফাইলিংয়ের জন্য XProf Kubernetes স্থাপনা

এই ডকুমেন্টটি বর্ণনা করে যে কীভাবে Kubernetes-এ একটি বিতরণকৃত সেটআপে XProf স্থাপন করা যায়, কর্মীদের জন্য পৃথক স্থাপনা এবং একটি সমষ্টিগত ব্যবহার করে।

কুবারনেটের জন্য XProf অ্যাগ্রিগেটর ওয়ার্কার আর্কিটেকচার

পূর্বশর্ত

  • একটি Kubernetes ক্লাস্টার। এই টিউটোরিয়ালে একটি ন্যূনতম সেটআপের জন্য আমরা minikube ব্যবহার করছি।
  • XProf এর একটি ডকার ছবি। XProf ডকার ছবি তৈরির নির্দেশাবলীর জন্য একটি XProf ডকার ছবি তৈরি করা দেখুন।

কুবারনেটস কনফিগারেশন

নিম্নলিখিত 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 এর জন্য আমরা 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

মিনিকিউব সেটআপ

আমাদের সেটআপ রান স্থাপন করতে:

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 অ্যাগ্রিগেটর ল্যান্ডিং পৃষ্ঠা