本文档介绍了如何在 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.
现在,您可以在浏览器中访问它:
