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

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:
