نشر XProf Kubernetes من أجل "التوصيف الموزّع"

يوضّح هذا المستند كيفية نشر XProf في إعداد موزّع على Kubernetes، وذلك باستخدام عمليات نشر منفصلة للعاملين والمجمّع.

بنية XProf Aggregator Worker في Kubernetes

المتطلبات الأساسية

  • مجموعة Kubernetes لإجراء عملية إعداد بسيطة في هذا البرنامج التعليمي، سنستخدم minikube.
  • صورة Docker لـ XProf راجِع إنشاء صورة XProf Docker للحصول على تعليمات حول كيفية إنشاء صورة.

إعدادات Kubernetes

تحدّد إعدادات YAML التالية عمليات نشر وخدمات Kubernetes الخاصة بعمال XProf ومجمّع.

ينفّذ نشر أداة التجميع نسخة طبق الأصل واحدة تتلقّى طلبات المستخدمين وتوزّع مهام إنشاء الملفات الشخصية على النسخ المتماثلة للعاملين باستخدام سياسة التوزيع بالتناوب. يضبط الخيار --worker_service_address المجمّع لإرسال الطلبات إلى خدمة العامل.

ينفّذ نشر العامل نسخًا متعدّدة، يعرض كل منها منفذ gRPC من خلال العلامة --grpc_port للاستماع إلى مهام المعالجة من المجمّع.

موقع تجميع

لنبدأ بإنشاء ملف 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