В этом документе описывается, как развернуть XProf в распределенной среде Kubernetes, используя отдельные развертывания для рабочих процессов и агрегатора.

Предпосылки
- Кластер Kubernetes.
- Docker-образ XProf. Инструкции по его созданию см. в разделе «Создание Docker-образа XProf» .
Конфигурация Kubernetes
Следующие конфигурации YAML определяют развертывания и службы Kubernetes для рабочих процессов XProf и агрегатора.
Развёртывание агрегатора запускает одну реплику, которая получает запросы пользователей и распределяет задачи профилирования между репликами рабочих процессов, используя политику циклического перебора. Флаг --worker_service_address настраивает агрегатор на отправку запросов к службе рабочих процессов.
Развертывание рабочего процесса запускает несколько реплик, каждая из которых предоставляет порт 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