استقرار XProf Kubernetes برای پروفایل توزیع‌شده

این سند نحوه‌ی استقرار XProf را در یک محیط توزیع‌شده روی Kubernetes، با استفاده از استقرارهای جداگانه برای Workerها و یک Aggregator، شرح می‌دهد.

معماری Worker تجمیع‌کننده XProf برای Kubernetes

پیش‌نیازها

پیکربندی کوبرنتیز

پیکربندی‌های YAML زیر، پیاده‌سازی‌ها و سرویس‌های Kubernetes را برای کارگران XProf و یک تجمیع‌کننده تعریف می‌کنند.

استقرار تجمیع‌کننده یک کپی واحد را اجرا می‌کند که درخواست‌های کاربر را دریافت می‌کند و وظایف پروفایل‌بندی را با استفاده از یک سیاست نوبت گردشی (round-robin) بین کپی‌های کارگر توزیع می‌کند. پرچم --worker_service_address تجمیع‌کننده را برای ارسال درخواست‌ها به سرویس کارگر پیکربندی می‌کند.

استقرار worker چندین کپی را اجرا می‌کند که هر کدام یک پورت gRPC را از طریق فلگ --grpc_port در معرض نمایش قرار می‌دهند تا به وظایف پردازشی از تجمیع‌کننده گوش دهند.

جمع کننده

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: <your-xprof-docker-image>
        imagePullPolicy: Always
        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
  clusterIP: None
  ports:
  - protocol: TCP
    port: 80
    targetPort: 10000

کارگر

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: <your-xprof-docker-image>
        imagePullPolicy: Always
        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