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 匯總到達網頁