Deployment Kubernetes XProf untuk Profiling Terdistribusi

Dokumen ini menjelaskan cara men-deploy XProf dalam penyiapan terdistribusi di Kubernetes, menggunakan deployment terpisah untuk pekerja dan penggabung.

Arsitektur Pekerja Penggabung XProf untuk Kubernetes

Prasyarat

  • Cluster Kubernetes. Untuk penyiapan minimal dalam tutorial ini, kita menggunakan minikube.
  • Image Docker XProf. Lihat Membangun Image Docker XProf untuk mengetahui petunjuk tentang cara membangunnya.

Konfigurasi Kubernetes

Konfigurasi YAML berikut menentukan deployment dan layanan Kubernetes untuk pekerja XProf dan penggabung.

Deployment penggabung menjalankan satu replika yang menerima permintaan pengguna dan mendistribusikan tugas pembuatan profil ke replika pekerja menggunakan kebijakan round-robin. Flag --worker_service_address mengonfigurasi penggabung untuk mengirim permintaan ke layanan pekerja.

Deployment pekerja menjalankan beberapa replika, yang masing-masing mengekspos port gRPC melalui flag --grpc_port untuk memproses tugas dari penggabung.

Agregator

Pertama, buat file agg.yaml dan tempelkan kontennya:

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

Pekerja

Untuk pekerja, kita membuat file 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

Penyiapan Minikube

Untuk men-deploy penyiapan kita, jalankan:

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

Anda akan dapat memeriksa objek yang di-deploy:

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

Sekarang, mari kita hubungkan ke agregator:

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.

Sekarang Anda dapat mengaksesnya di browser:

Halaman Landing Agregator XProf