Orbtrace

Azure'a dağıtım (AKS)

Orbtrace'i Azure Kubernetes Service'te önerilen şekilde çalıştırın — pgvector allowlist'li Azure Database for PostgreSQL, ayarlanabilir bir Premium SSD v2 StorageClass, operatör ya da Azure VM'leri ile Doris, AGIC ingress ve Azure'a özgü tuzaklar.

Bu, Azure Kubernetes Service (AKS) üzerinde Kubernetes (Helm) yoludur. Genel Helm mekaniği — pull secret, my-values.yaml, helm installHelm ile kurun sayfasındadır; bu sayfa Azure'a özgü kararlardır ve aynı öneriyi izler: durumlu depoları yönetilen servisler olarak çalıştırın, Helm yalnızca durumsuz uygulamayı kursun.

AKS'te — Helm kurar

Orbtrace serverDurumsuz uygulama · replika + HPA · AGIC ingress
ValkeyÖnbellek · küme içi gömülü (üretimde de uygun)

Azure-yönetilen / VM'ler — bunları siz çalıştırırsınız

Apache DorisTelemetri deposu · AKS'te operatör ya da Azure VM'leri
Postgres + pgvectorAyarlar + RCA vektörleri · Postgres Flexible Server
OTel CollectorTelemetri toplama · bir container / mevcut pipeline'ınız
Your appsOTLPOTel CollectorwriteApache DorisreadOrbtrace (in cluster)

Uygulamalar OTLP'yi Collector'ınıza gönderir, o da Doris'e yazar. AKS'teki durumsuz Orbtrace uygulaması telemetriyi Doris'ten geri okur ve ayarları + önbelleğini Azure Postgres + gömülü Valkey'de tutar. AKS'te yalnızca uygulama ve geçici önbellek yaşar; kaybedemeyeceğiniz veri (Flexible Server, Doris) pod yaşam döngüsünün dışında, yönetilen servislerde / VM'lerde kalır.

Azure'da ne nerede çalışır

BileşenAzure seçimiNotlar
Orbtrace uygulamasıAKS (bu chart)Durumsuz — replika + HPA, bölgelere yayılır
Postgres + pgvectorAzure Database for PostgreSQL — Flexible ServerÜretimde bölge-yedekli HA; vector uzantı allowlist'inde olmalı (3. adım)
Valkey (önbellek)küme içi gömülüGeçici — AKS'te bırakın. Yönetilmesini istiyorsanız Azure Cache for Redis
Apache DorisAKS'te doris-operator ya da Azure VM'leriBellek ve IOPS ağırlıklı — kendi node pool'unu / VM'lerini verin
Collectorbir container / mevcut pipeline'ınızHiçbir zaman chart'ta değil — bkz. Entegrasyon desenleri
Ingress + TLSApplication Gateway (AGIC) ya da app-routing (yönetilen nginx)cert-manager secret'ı ya da bir App Gateway / Key Vault sertifikası
Blok depolamaPremium SSD v2 (disk.csi.azure.com)IOPS/throughput'u ayarlayın — Doris BE IOPS'a bağımlıdır (2. adım)

Kümeyi önce iş yükünüze göre Kapasite planlama hesaplayıcısıyla boyutlandırın — aşağıdaki node-pool şekilleri, onun Doris FE/BE sayıları ile node başına CPU/bellek/diskinden çıkar.

  1. 1

    AKS kümesini oluşturun — iki node pool

    Doris BE'ye kendi node pool'unu verin — bellek-optimize (E-serisi), sabitlenmiş ayarlanabilir diskle. system/app pool'unu bölgelere yayın:

    az aks create -g <rg> -n orbtrace \
      --node-vm-size Standard_D4s_v5 --node-count 3 --zones 1 2 3 \
      --network-plugin azure --generate-ssh-keys
    az aks nodepool add -g <rg> --cluster-name orbtrace -n dorisbe \
      --node-vm-size Standard_E8s_v5 --node-count 3 --zones 1 \
      --labels orbtrace.io/doris-be=true
    az aks get-credentials -g <rg> -n orbtrace

    Azure yönetilen diskleri bölgeye kilitlidir — Doris BE'yi tek bölgeye sabitleyin

    Bir yönetilen disk tek bir availability zone'da yaşar; o PVC'ye bağlı bir pod yalnızca aynı bölgedeki bir node'da çalışabilir. Bir Doris BE pod'u başka bir bölgeye yeniden zamanlanırsa verisini mount edemez ve Pending kalır. BE node pool'unu tek bir bölgede tutun (yukarıda --zones 1) ya da operatörün anti-affinity'siyle bölge başına bir BE pool'u çalıştırın. Durumsuz uygulamanın böyle bir kısıtı yoktur.

  2. 2

    Ayarlanabilir bir Premium SSD v2 StorageClass

    AKS Azure Disk CSI sürücüsünü zaten getirir — volume'lar için IAM/kimlik bağlantısı gerekmez. Ama varsayılan managed-csi-premium (Premium SSD) IOPS'u disk boyutuna bağlar ve Doris BE compaction'ını aç bırakır. IOPS ile throughput'u bağımsız ayarlanan Premium SSD v2'yi kullanın:

    premium2-orbtrace.yaml
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: premium2-orbtrace
      annotations: { storageclass.kubernetes.io/is-default-class: "true" }
    provisioner: disk.csi.azure.com
    parameters:
      skuName: PremiumV2_LRS
      DiskIOPSReadWrite: "6000"     # boyuttan bağımsız — BE compaction için ayarlayın
      DiskMBpsReadWrite: "250"      # MB/s
    volumeBindingMode: WaitForFirstConsumer   # diski pod'un bölgesinde bağlar
    allowVolumeExpansion: true

    Applysave as premium2-orbtrace.yaml, then runkubectl apply -f premium2-orbtrace.yaml

    (Premium SSD v2 bölgenizde/zone'unuzda kullanılabilir olmalı; değilse managed-csi-premium'a geri dönün ve diskleri temel IOPS'ları yetecek kadar büyük boyutlandırın.)

  3. 3

    Postgres'i sağlayın — Flexible Server + pgvector allowlist'i

    AKS VNet'ine (ya da peered bir VNet'e) private erişimli (VNet entegrasyonu) bir Azure Database for PostgreSQL — Flexible Server (v16+) oluşturun. Azure uzantıları sunucu-başına bir allowlist'in arkasına koyar, bu yüzden önce vectorazure.extensions'a ekleyin — insanların atladığı adım budur:

    az postgres flexible-server parameter set -g <rg> -s <server-name> \
      --name azure.extensions --value vector

    Sonra, sunucuya bağlıyken veritabanını oluşturun ve uzantıyı etkinleştirin:

    CREATE DATABASE orbtrace;
    CREATE USER orbtrace WITH PASSWORD 'a-strong-password';
    GRANT ALL PRIVILEGES ON DATABASE orbtrace TO orbtrace;
    \c orbtrace
    CREATE EXTENSION IF NOT EXISTS vector;

    orbtrace adları bir gelenektir; 6. adımda postgres.database/postgres.username'i eşleşecek şekilde ayarlayın. (Önbellek: Valkey'i gömülü bırakın — geçicidir; yalnızca yönetilmesini istiyorsanız Azure Cache for Redis kullanın.)

  4. 4

    Doris node kernel ön-koşulunu ayarlayın

    Doris BE, node'larında vm.max_map_count ≥ 2000000 ister. Onu, 1. adımdaki BE node pool'una hedeflenmiş küçük bir ayrıcalıklı DaemonSet ile uygulayın:

    doris-sysctl.yaml
    apiVersion: apps/v1
    kind: DaemonSet
    metadata: { name: doris-sysctl, namespace: kube-system }
    spec:
      selector: { matchLabels: { app: doris-sysctl } }
      template:
        metadata: { labels: { app: doris-sysctl } }
        spec:
          nodeSelector: { "orbtrace.io/doris-be": "true" }
          initContainers:
            - name: sysctl
              image: busybox:1.37
              securityContext: { privileged: true }
              command: ["sh", "-c", "sysctl -w vm.max_map_count=2000000"]
          containers:
            - name: pause
              image: registry.k8s.io/pause:3.9

    Applysave as doris-sysctl.yaml, then runkubectl apply -f doris-sysctl.yaml

  5. 5

    Doris'i ayağa kaldırın

    Doris'i kümede doris-operator ile çalıştırın — DorisClusterpremium2-orbtrace StorageClass'ını ve BE pool'u için bir nodeSelector kullanır — ya da Azure VM'lerinde çalıştırıp chart'ı ona yönlendirin. Tam adım adım anlatım Doris kurulumu sayfasındadır. doris.host için FE Service adresini not edin.

  6. 6

    Orbtrace'i Helm ile kurun

    Helm ile kurun'u izleyin — pull secret ve helm install Azure'da aynıdır. my-values.yaml'ınızda:

    my-values.yaml
    global:
      imagePullSecrets: [{ name: ghcr }]     # Helm sayfasındaki secret
    postgres:
      mode: external
      host: <server-name>.postgres.database.azure.com   # Flexible Server endpoint'i
      port: 5432
      database: orbtrace
      username: orbtrace
      password: <your-postgres-password>     # ya da existingSecret — bkz. Helm sayfası
    doris:
      host: <your-doris-fe-host>             # 5. adımdaki FE Service / VM adresi
  7. 7

    Açığa çıkarın — AGIC (ya da app-routing) ingress

    Application Gateway Ingress Controller add-on'unu (az aks enable-addons -a ingress-appgw …) — ya da application-routing yönetilen-nginx add-on'unu (az aks approuting enable) — etkinleştirin. Sonra onu chart'ın ingress annotation'larından sürün (chart ≥ 2.0.13). TLS'i bir cert-manager Kubernetes secret'ı ile sonlandıran ve Orbtrace'in readiness path'ini sağlık-kontrol eden AGIC örneği:

    my-values.yaml (ekleyin)
    orbtrace:
      ingress:
        enabled: true
        className: azure-application-gateway
        annotations:
          appgw.ingress.kubernetes.io/ssl-redirect: "true"
          appgw.ingress.kubernetes.io/health-probe-path: /actuator/health/readiness
        hosts:
          - host: orbtrace.example.com
            paths: [{ path: /, pathType: Prefix }]
        tls:
          - secretName: orbtrace-tls          # cert-manager tarafından verilmiş bir sertifika ya da kendinizinki
            hosts: [orbtrace.example.com]

    Bir K8s secret'ı yerine App Gateway– ya da Key Vault–yönetilen bir sertifika için tls bloğunu kaldırın ve appgw.ingress.kubernetes.io/appgw-ssl-certificate: <cert-name> ekleyin. Bunun yerine app-routing yönetilen-nginx add-on'uyla, className: webapprouting.kubernetes.azure.com (add-on'un kaydettiği IngressClass — nginx değil) ve standart nginx.ingress.kubernetes.io/* annotation'larını ayarlayın; DNS ve TLS'i Azure DNS + Key Vault üzerinden entegre eder. DNS'i ingress adresine yönlendirin, sonra release'i upgrade edin.

    2.0.13'ten eski bir chart'ta ingress.annotations anahtarı render edilmez — upgrade edin ya da elle-yazılmış bir Ingress uygulayın.

  8. 8

    Doğrulayın

    kubectl -n orbtrace get pods
    kubectl -n orbtrace logs deploy/orbtrace-app -c orbtrace | grep doris-migration
    # şunu görünce hazır: [doris-migration] complete
    kubectl -n orbtrace get ingress    # sağlandığında ADDRESS App Gateway public IP'sini gösterir
    curl -fsSI https://orbtrace.example.com | head -1   # HTTP/2 200

    Sonra İlk giriş'e devam edin.

Azure'da üretim sıkılaştırması

  • Flexible Server: bölge-yedekli HA, otomatik yedekler + PITR ve private erişim (public endpoint yok). Parolayı Key Vault'ta tutun ve Secrets Store CSI sürücüsüyle mount edip postgres.existingSecret üzerinden referans verin.
  • Doris yedekleri: Postgres dump'larını ve Doris snapshot'larını Blob Storage'a (S3 endpoint'i üzerinden S3-uyumlu) göndermek için chart'ın backup.* CronJob'larını etkinleştirin; referans DorisCluster bir cold tier'ı destekler — bkz. Kapasite planlama.
  • Node'lar: system/app pool'u ≥ 3 bölgede; Cluster Autoscaler'ı etkinleştirin. Chart PodDisruptionBudget'ları getirir.
  • Kimlik: Azure API'lerini çağıran pod'lar için Workload Identity kullanın; NSG'leri yalnızca AKS subnet'i Postgres'e 5432'de ulaşacak şekilde kısıtlayın.

Azure'da sık görülen ilk-kurulum takıntıları

  • CREATE EXTENSION vector başarısızvector henüz azure.extensions'da değil (3. adım). Parametreyi ayarlayın, sonra yeniden deneyin.
  • Uygulama Ready değil, STORAGE_UNAVAILABLE → Flexible Server'a ulaşılamıyor (VNet peered değil / firewall kuralı eksik) ya da doris.host yanlış. Bkz. Sorun giderme.
  • Bir Doris BE pod'u yeniden zamanlamadan sonra Pending takılı → yönetilen diskinden farklı bir bölgeye indi. BE node pool'unu tek bir bölgeye sabitleyin (1. adım).
  • Ingress'in adresi yok → AGIC add-on'u / App Gateway subnet'i kurulu değil ya da add-on devre dışı.
  • BE diski yavaş / compaction geride → varsayılan Premium SSD, IOPS'u boyuta bağlar. Açık IOPS'lu Premium SSD v2 kullanın (2. adım).

Telemetrinizi bağlayın — bir OTel Collector kurun ya da doris exporter'ını mevcut OTel pipeline'ınıza ekleyin (Entegrasyon desenleri) — sonra kurulum-sonrası kontrol listesi ile bitirin.