用于分布式分析的 XProf Kubernetes 部署

本文档介绍了如何在 Kubernetes 上以分布式设置部署 XProf,为工作器和聚合器使用单独的部署。

适用于 Kubernetes 的 XProf 聚合器工作器架构

前提条件

  • Kubernetes 集群。在本教程中,我们将使用 minikube 进行极简设置。
  • XProf 的 Docker 映像。如需了解如何构建 XProf Docker 映像,请参阅构建 XProf Docker 映像

Kubernetes 配置

以下 YAML 配置定义了 XProf 工作器和聚合器的 Kubernetes Deployment 和服务。

聚合器部署运行单个副本,该副本接收用户请求并使用轮询政策将分析任务分发给工作器副本。--worker_service_address 标志用于配置聚合器,以将请求发送到 worker 服务。

工作器部署运行多个副本,每个副本通过 --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 聚合着陆页