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 install — Helm 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
AWS-yönetilen / EC2 — bunları siz çalıştırırsınız
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şen | AWS seçimi | Notlar |
|---|---|---|
| Orbtrace uygulaması | EKS (bu chart) | Durumsuz — replika + HPA, AZ'lere yayılır |
| Postgres + pgvector | RDS 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 Doris | EKS'te doris-operator ya da EC2 VM'leri | Bellek ve IOPS ağırlıklı — kendi node group'unu / instance'larını verin |
| Collector | bir container / mevcut pipeline'ınız | Hiçbir zaman chart'ta değil — bkz. Entegrasyon desenleri |
| Ingress + TLS | AWS Load Balancer Controller (ALB) + ACM | LoadBalancer Service ile NLB alternatiftir |
| Blok depolama | gp3 (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
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
eksctlyapı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.yamlEBS 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
Pendingkalı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
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
Pendingasılı kalır. Rolü oluşturun, sonra add-on'u o role bağlı kurun (--service-account-role-arninsanların atladığı adımdır —--role-onlyrolü 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 --forceSonra bir
gp3StorageClass — 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ğlarApplysave as
gp3-orbtrace.yaml, then runkubectl apply -f gp3-orbtrace.yamlWaitForFirstConsumerö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
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;orbtraceadları bir gelenektir — herhangi bir veritabanı/kullanıcı olur; 6. adımdapostgres.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
Doris node kernel ön-koşulunu ayarlayın
Doris BE, node'larında
vm.max_map_count ≥ 2000000ister. Onu, 1. adımda etiketlediğiniz BE node group'una hedeflenmiş küçük bir ayrıcalıklı DaemonSet ile (ya da özel bir AMI'ninsysctl'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.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'ıgp3-orbtraceStorageClass'ını ve BE node group'u için birnodeSelectorkullanır — ya da EC2 VM'lerinde çalıştırıp chart'ı ona yönlendirin. Tam adım adım anlatım (operatör kurulumu, referansDorisCluster, BE PVC boyutlandırma) 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 installAWS'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
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: falseyapıpservice.beta.kubernetes.io/aws-load-balancer-type: nlbtaşıyan, selector'ıapp.kubernetes.io/name: orbtrace'e işaret eden küçük bağımsız birtype: LoadBalancerService'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.annotationsanahtarı render edilmez — ya upgrade edin ya da bu annotation'larla,orbtrace-appService'ine işaret eden elle-yazılmış birIngressuygulayın. - 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 200Sonra İlk giriş'e devam edin.
AWS'de üretim sıkılaştırması
- RDS: Multi-AZ, otomatik yedekler + PITR ve makul bir
max_connectionsiçeren bir parameter group. DB parolasını Secrets Manager'da saklayın vepostgres.existingSecretile 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 (referansDorisClusterbir 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/0yok.
AWS'de sık görülen ilk-kurulum takıntıları
- PVC'ler
Pendingtakı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
Pendingtakı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 dadoris.hostyanlış. 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.