במאמר הזה מוסבר איך לפרוס את XProf בהגדרה מבוזרת ב-Kubernetes, באמצעות פריסות נפרדות לעובדים ולמצבר.

דרישות מוקדמות
- אשכול Kubernetes. במדריך הזה נשתמש ב-minikube כדי להגדיר הגדרה מינימלית.
- קובץ אימג' של Docker של XProf. הוראות ליצירת קובץ אימג' של XProf Docker מפורטות במאמר בנושא יצירת קובץ אימג' של XProf Docker.
הגדרת Kubernetes
ההגדרות הבאות ב-YAML מגדירות פריסות ושירותים של Kubernetes עבור עובדי XProf ומצבר.
פריסת האגרגטור מפעילה רפליקה אחת שמקבלת בקשות ממשתמשים ומפיצה משימות פרופיל לרפליקות של העובדים באמצעות מדיניות של הקצאת משאבים לפי סדר מחזורי.
הדגל --worker_service_address מגדיר את האגרגטור לשליחת בקשות לשירות העובד.
פריסת העובד מפעילה כמה רפליקות, שכל אחת מהן חושפת יציאת gRPC באמצעות הדגל --grpc_port כדי להאזין למשימות עיבוד מהמצבר.
אתר אגרגטור
קודם יוצרים קובץ 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.
עכשיו אפשר לגשת אליו בדפדפן:
