분산 프로파일링을 위한 XProf Kubernetes 배포

이 문서에서는 작업자와 집계기를 별도로 배포하여 Kubernetes의 분산 설정에 XProf를 배포하는 방법을 설명합니다.

Kubernetes용 XProf Aggregator 작업자 아키텍처

기본 요건

  • Kubernetes 클러스터가 필요합니다. 이 튜토리얼에서는 최소 설정을 위해 minikube를 사용합니다.
  • XProf의 Docker 이미지 빌드 방법에 관한 안내는 XProf Docker 이미지 빌드를 참고하세요.

Kubernetes 구성

다음 YAML 구성은 XProf 작업자 및 집계기의 Kubernetes 배포 및 서비스를 정의합니다.

집계기 배포는 사용자 요청을 수신하고 라운드 로빈 정책을 사용하여 프로파일링 작업을 작업자 복제본에 분산하는 단일 복제본을 실행합니다. --worker_service_address 플래그는 요청을 작업자 서비스로 전송하도록 어그리게이터를 구성합니다.

작업자 배포는 여러 복제본을 실행하며 각 복제본은 --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.

이제 브라우저에서 액세스할 수 있습니다.

XProf 애그리게이터 방문 페이지