Triển khai XProf Kubernetes để phân tích tài nguyên phân tán

Tài liệu này mô tả cách triển khai XProf trong một chế độ thiết lập phân tán trên Kubernetes, sử dụng các quy trình triển khai riêng biệt cho các worker và một trình tổng hợp.

Cấu trúc Worker tổng hợp XProf cho Kubernetes

Điều kiện tiên quyết

  • Một cụm Kubernetes. Để thiết lập tối thiểu trong hướng dẫn này, chúng ta sẽ sử dụng minikube.
  • Hình ảnh Docker của XProf. Hãy xem bài viết Tạo một hình ảnh Docker XProf để biết hướng dẫn về cách tạo một hình ảnh.

Cấu hình Kubernetes

Các cấu hình YAML sau đây xác định các dịch vụ và hoạt động triển khai Kubernetes cho các worker XProf và một trình tổng hợp.

Việc triển khai trình tổng hợp chạy một bản sao duy nhất nhận các yêu cầu của người dùng và phân phối các tác vụ lập hồ sơ cho các bản sao worker bằng chính sách luân phiên. Cờ --worker_service_address định cấu hình trình tổng hợp để gửi yêu cầu đến dịch vụ worker.

Việc triển khai worker chạy nhiều bản sao, mỗi bản sao hiển thị một cổng gRPC thông qua cờ --grpc_port để theo dõi các tác vụ xử lý từ trình tổng hợp.

Trang web tổng hợp

Trước tiên, hãy tạo tệp agg.yaml rồi dán nội dung sau vào:

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

Đối với worker, chúng ta tạo tệp 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

Thiết lập Minikube

Cách triển khai quá trình thiết lập chạy:

kubectl apply -f worker.yaml
kubectl apply -f agg.yaml

Bạn có thể kiểm tra các đối tượng đã triển khai:

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

Bây giờ, hãy kết nối với đơn vị tập hợp của chúng ta:

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.

Giờ đây, bạn có thể truy cập vào trang này trong trình duyệt:

Trang đích của trang web tổng hợp XProf