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 install — Helm 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
Azure-yönetilen / VM'ler — bunları siz çalıştırırsınız
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şen | Azure seçimi | Notlar |
|---|---|---|
| Orbtrace uygulaması | AKS (bu chart) | Durumsuz — replika + HPA, bölgelere yayılır |
| Postgres + pgvector | Azure 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 Doris | AKS'te doris-operator ya da Azure VM'leri | Bellek ve IOPS ağırlıklı — kendi node pool'unu / VM'lerini verin |
| Collector | bir container / mevcut pipeline'ınız | Hiçbir zaman chart'ta değil — bkz. Entegrasyon desenleri |
| Ingress + TLS | Application Gateway (AGIC) ya da app-routing (yönetilen nginx) | cert-manager secret'ı ya da bir App Gateway / Key Vault sertifikası |
| Blok depolama | Premium 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
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 orbtraceAzure 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
Pendingkalı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
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: trueApplysave 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
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
vector'ıazure.extensions'a ekleyin — insanların atladığı adım budur:az postgres flexible-server parameter set -g <rg> -s <server-name> \ --name azure.extensions --value vectorSonra, 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;orbtraceadları bir gelenektir; 6. adımdapostgres.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
Doris node kernel ön-koşulunu ayarlayın
Doris BE, node'larında
vm.max_map_count ≥ 2000000ister. 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.9Applysave as
doris-sysctl.yaml, then runkubectl apply -f doris-sysctl.yaml - 5
Doris'i ayağa kaldırın
Doris'i kümede doris-operator ile çalıştırın —
DorisCluster'ıpremium2-orbtraceStorageClass'ını ve BE pool'u için birnodeSelectorkullanı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.hostiçin FE Service adresini not edin. - 6
Orbtrace'i Helm ile kurun
Helm ile kurun'u izleyin — pull secret ve
helm installAzure'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
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
tlsbloğunu kaldırın veappgw.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 —nginxdeğil) ve standartnginx.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.annotationsanahtarı render edilmez — upgrade edin ya da elle-yazılmış birIngressuygulayın. - 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 200Sonra İ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; referansDorisClusterbir 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 vectorbaşarısız →vectorhenüzazure.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 dadoris.hostyanlış. Bkz. Sorun giderme. - Bir Doris BE pod'u yeniden zamanlamadan sonra
Pendingtakı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.