Orbtrace

AWS'ye dağıtım (EKS)

Orbtrace'i Amazon EKS'te önerilen şekilde çalıştırın — Postgres+pgvector için RDS, throughput'u ayarlanmış bir gp3 StorageClass, operatör ya da EC2 ile Doris, ACM TLS'li bir ALB ingress ve AWS'ye özgü tuzaklar (EBS AZ kilidi, IRSA, security group'lar).

Bu, Amazon EKS üzerinde Kubernetes (Helm) yoludur. Genel Helm mekaniği — pull secret, my-values.yaml, helm installHelm ile kurun sayfasındadır; bu sayfa ise onun üstüne katmanlanan AWS'ye özgü kararlardır ve her yerdeki aynı öneriyi izler: durumlu depoları yönetilen servisler olarak çalıştırın, Helm yalnızca durumsuz uygulamayı kursun.

EKS'te — Helm kurar

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

AWS-yönetilen / EC2 — bunları siz çalıştırırsınız

Apache DorisTelemetri deposu · EKS'te operatör ya da EC2
Postgres + pgvectorAyarlar + RCA vektörleri · RDS for PostgreSQL
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. EKS'teki durumsuz Orbtrace uygulaması telemetriyi Doris'ten geri okur ve ayarları + önbelleğini RDS Postgres + gömülü Valkey'de tutar. EKS'te yalnızca uygulama ve geçici önbellek yaşar; kaybedemeyeceğiniz veri (RDS, Doris) pod yaşam döngüsünün dışında, yönetilen/EC2 servislerde kalır.

AWS'de ne nerede çalışır

BileşenAWS seçimiNotlar
Orbtrace uygulamasıEKS (bu chart)Durumsuz — replika + HPA, AZ'lere yayılır
Postgres + pgvectorRDS for PostgreSQLÜretimde Multi-AZ; pgvector tek satırlık bir CREATE EXTENSION
Valkey (önbellek)küme içi gömülüGeçici — EKS'te bırakın. Yönetilmesini istiyorsanız ElastiCache
Apache DorisEKS'te doris-operator ya da EC2 VM'leriBellek ve IOPS ağırlıklı — kendi node group'unu / instance'larını verin
Collectorbir container / mevcut pipeline'ınızHiçbir zaman chart'ta değil — bkz. Entegrasyon desenleri
Ingress + TLSAWS Load Balancer Controller (ALB) + ACMLoadBalancer Service ile NLB alternatiftir
Blok depolamagp3 (EBS CSI)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 boyutlandırın: Kapasite planlama hesaplayıcısını çalıştırın; Doris FE/BE sayılarını, node başına vCPU/bellek ve diski döndürür — aşağıdaki node-group şekilleri bundan çıkar.

  1. 1

    EKS kümesini oluşturun — iki node group

    Doris BE'ye kendi node group'unu verin: bellek (her biri 16–32 GB+) ve sabitlenmiş, IOPS ağırlıklı EBS ister; bunu durumsuz uygulamayla yarıştırmak istemezsiniz. HA için uygulama grubunu AZ'lere yayın. İkisini de içeren bir eksctl yapılandırması:

    cluster.yaml
    apiVersion: eksctl.io/v1alpha5
    kind: ClusterConfig
    metadata: { name: orbtrace, region: <region>, version: "1.30" }
    iam: { withOIDC: true }   # IRSA için gerekli (2. adım)
    managedNodeGroups:
      - name: app
        instanceType: m6i.xlarge
        desiredCapacity: 3
        availabilityZones: ["<az-a>", "<az-b>", "<az-c>"]
      - name: doris-be
        instanceType: r6i.2xlarge       # bellek-optimize; kapasite planlamaya göre boyutlandırın
        desiredCapacity: 3
        availabilityZones: ["<az-a>"]    # bir BE grubunu TEK AZ'de tutun — aşağıdaki EBS notuna bakın
        labels: { "orbtrace.io/doris-be": "true" }

    Applysave as cluster.yaml, then runeksctl create cluster -f cluster.yaml

    EBS volume'ları AZ'ye kilitlidir — Doris BE'yi tek AZ'ye sabitleyin

    Bir EBS volume tek bir Availability Zone'da yaşar; o PVC'ye bağlı bir pod yalnızca aynı AZ'deki bir node'da çalışabilir. Bir Doris BE pod'u başka bir AZ'ye yeniden zamanlanırsa verisini mount edemez ve Pending kalır. Her BE node group'unu tek bir AZ'de tutun (yukarıdaki gibi) ya da operatörün anti-affinity'siyle AZ başına bir BE node group'u çalıştırın — tek bir BE'nin replikalarının asla AZ'ler arasında dolaşmasına izin vermeyin. Durumsuz uygulamanın böyle bir kısıtı yoktur; onu serbestçe yayın.

  2. 2

    EBS CSI sürücüsü (IRSA ile) + throughput'u ayarlanmış bir gp3 StorageClass

    EBS CSI sürücüsü IRSA üzerinden kendi IAM rolüne ihtiyaç duyar — o olmadan her PVC Pending asılı kalır. Rolü oluşturun, sonra add-on'u o role bağlı kurun (--service-account-role-arn insanların atladığı adımdır — --role-only rolü oluşturur ama sürücüye bağlamaz):

    eksctl create iamserviceaccount --cluster orbtrace --region <region> \
      --namespace kube-system --name ebs-csi-controller-sa \
      --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
      --role-only --role-name orbtrace-ebs-csi --approve
    eksctl create addon --cluster orbtrace --region <region> --name aws-ebs-csi-driver \
      --service-account-role-arn arn:aws:iam::<acct-id>:role/orbtrace-ebs-csi --force

    Sonra bir gp3 StorageClass — ve IOPS ile throughput'u yükseltin. gp3 varsayılan olarak 3000 IOPS / 125 MB/s'dir; bu, Doris BE compaction'ını aç bırakır; gerçek bir iş yükü için 6000+ IOPS ve 250+ MB/s makul bir tabandır:

    gp3-orbtrace.yaml
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: gp3-orbtrace
      annotations: { storageclass.kubernetes.io/is-default-class: "true" }
    provisioner: ebs.csi.aws.com
    parameters:
      type: gp3
      iops: "6000"          # gp3 varsayılanı 3000, BE compaction için fazla düşük
      throughput: "250"     # MB/s — gp3 varsayılanı 125 fazla düşük
    volumeBindingMode: WaitForFirstConsumer   # volume'u pod'un AZ'sinde bağlar

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

    WaitForFirstConsumer önemlidir: sağlamayı pod zamanlanana dek erteler, böylece volume pod ile aynı AZ'de oluşturulur (yukarıdaki AZ kilidinin diğer yüzü).

  3. 3

    Postgres'i sağlayın — RDS for PostgreSQL + pgvector

    Kümenin VPC'sinde, private subnet'lerde bir RDS for PostgreSQL 16+ örneği oluşturun (üretim için Multi-AZ — otomatik failover ve yedekler). EKS node security group'unun 5432'de ona ulaşmasına izin verin:

    aws ec2 authorize-security-group-ingress \
      --group-id <rds-sg-id> --protocol tcp --port 5432 \
      --source-group <eks-node-sg-id>

    Sonra, örneğe bağlıyken veritabanını oluşturun ve pgvector'ı etkinleştirin (RDS onu getirir — parameter-group değişikliği gerekmez):

    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 — herhangi bir veritabanı/kullanıcı olur; 6. adımda postgres.database/postgres.username'i eşleşecek şekilde ayarlarsınız. (Önbellek: Valkey'i gömülü bırakın — geçicidir; yalnızca yönetilmesini istiyorsanız ElastiCache'e uzanı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ımda etiketlediğiniz BE node group'una hedeflenmiş küçük bir ayrıcalıklı DaemonSet ile (ya da özel bir AMI'nin sysctl'ine gömerek) 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 — DorisClustergp3-orbtrace StorageClass'ını ve BE node group'u için bir nodeSelector kullanır — ya da EC2 VM'lerinde çalıştırıp chart'ı ona yönlendirin. Tam adım adım anlatım (operatör kurulumu, referans DorisCluster, BE PVC boyutlandırma) 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 AWS'de aynıdır. my-values.yaml'ınızda Postgres'i RDS'e, Doris'i 5. adımdaki adrese yönlendirin:

    my-values.yaml
    global:
      imagePullSecrets: [{ name: ghcr }]     # Helm sayfasındaki secret
    postgres:
      mode: external
      host: orbtrace.abc123.<region>.rds.amazonaws.com   # RDS 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 / EC2 adresi
  7. 7

    Açığa çıkarın — ACM TLS'li ALB ingress

    AWS Load Balancer Controller'ı kurun (kendi Helm chart'ı + bir IRSA rolü), sonra ALB'yi tümüyle chart'ın ingress annotation'larından sürün (chart ≥ 2.0.13):

    my-values.yaml (ekleyin)
    orbtrace:
      ingress:
        enabled: true
        className: alb
        annotations:
          alb.ingress.kubernetes.io/scheme: internet-facing
          alb.ingress.kubernetes.io/target-type: ip
          alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
          alb.ingress.kubernetes.io/ssl-redirect: "443"   # yönlendirme için yukarıdaki HTTP:80 listener'ı gerekir
          alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<region>:<acct-id>:certificate/<id>
          alb.ingress.kubernetes.io/healthcheck-path: /actuator/health/readiness
        hosts:
          - host: orbtrace.example.com
            paths: [{ path: /, pathType: Prefix }]

    DNS'i (bir Route 53 alias kaydı) ALB'ye yönlendirin, sonra release'i upgrade edin. Alternatif — NLB: uygulamayı bir Network Load Balancer'ın önüne koymayı tercih ederseniz, orbtrace.ingress.enabled: false yapıp service.beta.kubernetes.io/aws-load-balancer-type: nlb taşıyan, selector'ı app.kubernetes.io/name: orbtrace'e işaret eden küçük bağımsız bir type: LoadBalancer Service'i uygulayın — TLS o zaman LB'de değil, üst taraftaki bir proxy'de sonlanır. Yukarıdaki ALB yolu daha basit, önerilen olandır.

    2.0.13'ten eski bir chart'ta ingress.annotations anahtarı render edilmez — ya upgrade edin ya da bu annotation'larla, orbtrace-app Service'ine işaret eden elle-yazılmış bir Ingress uygulayın.

  8. 8

    Doğrulayın

    kubectl -n orbtrace get pods
    # orbtrace-app ×N, orbtrace-valkey-0 Running; migration satırı:
    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 sütunu ALB DNS adını gösterir
    curl -fsSI https://orbtrace.example.com | head -1   # HTTP/2 200

    Sonra İlk giriş'e devam edin.

AWS'de üretim sıkılaştırması

  • RDS: Multi-AZ, otomatik yedekler + PITR ve makul bir max_connections içeren bir parameter group. DB parolasını Secrets Manager'da saklayın ve postgres.existingSecret ile referans verin.
  • Doris yedekleri: Postgres dump'larını ve Doris snapshot'larını S3'e göndermek için chart'ın backup.* CronJob'larını etkinleştirin (referans DorisCluster bir S3 cold tier'ı da destekler — bkz. Kapasite planlama).
  • Node'lar: uygulama node group'unu ≥ 3 AZ'de çalıştırın; Cluster Autoscaler ya da Karpenter ekleyin. Chart zaten PodDisruptionBudget'ları getirir, böylece bir node drain'i asla son replikayı almaz.
  • En az ayrıcalık: controller başına IRSA (EBS CSI, Load Balancer Controller), private RDS subnet'leri, node SG'ye kısıtlanmış security group'lar — 5432'de 0.0.0.0/0 yok.

AWS'de sık görülen ilk-kurulum takıntıları

  • PVC'ler Pending takılı → EBS CSI sürücüsünün IAM rolü yok. 2. adımdaki IRSA service account'unu yeniden kontrol edin.
  • Bir Doris BE pod'u yeniden zamanlamadan sonra Pending takılı → EBS volume'undan farklı bir AZ'ye indi. BE node group'unu tek bir AZ'ye sabitleyin (1. adım).
  • Ingress'in ADDRESS'i yok → AWS Load Balancer Controller kurulu değil ya da IRSA rolü eksik.
  • Uygulama Ready değil, STORAGE_UNAVAILABLE → node security group RDS'e 5432'de ulaşamıyor ya da doris.host yanlış. Bkz. Sorun giderme.
  • BE diski yavaş / compaction geride → gp3 varsayılan 3000 IOPS'ta. StorageClass'ta iops/throughput'u yükseltin (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.