Dağıtılmış Profil Oluşturma için XProf Kubernetes dağıtımı

Bu belgede, Kubernetes'te dağıtılmış bir kurulumda XProf'un nasıl dağıtılacağı açıklanmaktadır. Bu işlemde, çalışanlar ve toplayıcı için ayrı dağıtımlar kullanılır.

Kubernetes için XProf Aggregator Worker mimarisi

Ön koşullar

  • Kubernetes kümesi. Bu eğitimde minimum kurulum için minikube kullanıyoruz.
  • XProf'un Docker görüntüsü. Nasıl oluşturulacağıyla ilgili talimatlar için XProf Docker görüntüsü oluşturma başlıklı makaleyi inceleyin.

Kubernetes Yapılandırması

Aşağıdaki YAML yapılandırmaları, XProf çalışanları ve bir toplayıcı için Kubernetes dağıtımlarını ve hizmetlerini tanımlar.

Toplayıcı dağıtımı, kullanıcı isteklerini alan ve profil oluşturma görevlerini sırayla dağıtma politikası kullanarak çalışan kopyalarına dağıtan tek bir kopya çalıştırır. --worker_service_address işareti, toplayıcıyı istekleri çalışan hizmetine gönderecek şekilde yapılandırır.

Çalışan dağıtımı, her biri toplayıcıdan gelen işleme görevlerini dinlemek için --grpc_port işareti aracılığıyla bir gRPC bağlantı noktası sunan birden fazla replika çalıştırır.

Toplayıcı

Öncelikle agg.yaml dosyası oluşturup içeriğini yapıştıralım:

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

Çalışan

Çalışan için worker.yaml dosyası oluştururuz:

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 kurulumu

Kurulumumuzu dağıtmak için şu komutu çalıştırın:

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

Dağıtılan nesneleri inceleyebilmeniz gerekir:

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

Şimdi toplayıcımıza bağlanalım:

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.

Artık tarayıcınızdan erişebilirsiniz:

XProf Aggregator Landing Page