Orbtrace

GCP'ye dağıtım (GKE)

Orbtrace'i Google Kubernetes Engine'de önerilen şekilde çalıştırın — Postgres+pgvector için Cloud SQL, ayarlanabilir bir Hyperdisk StorageClass, operatör ya da GCE ile Doris, yönetilen sertifikalı GKE Ingress ve GCP'ye özgü tuzaklar.

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

GKE'de — Helm kurar

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

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

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

GCP'de ne nerede çalışır

BileşenGCP seçimiNotlar
Orbtrace uygulamasıGKE Standard (bu chart)Durumsuz — replika + HPA. Autopilot yerine Standard tercih edin (ayrıcalıklı DaemonSet + node-pool denetimi)
Postgres + pgvectorCloud SQL for PostgreSQLÜretimde bölgesel HA; private IP; pgvector tek satırlık bir CREATE EXTENSION
Valkey (önbellek)küme içi gömülüGeçici — GKE'de bırakın. Yönetilmesini istiyorsanız Memorystore
Apache DorisGKE'de doris-operator ya da GCE 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 + TLSGKE Ingress (GCLB) + ManagedCertificateingress-nginx alternatiftir
Blok depolamaHyperdisk Balanced (pd.csi.storage.gke.io)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

    GKE kümesini oluşturun — iki node pool

    VPC-native (--enable-ip-alias) bir Standard küme kullanın — VPC-native, sonradan container-native yük dengelemeyi mümkün kılan şeydir. Doris BE'ye kendi bellek-optimize pool'unu verin:

    gcloud container clusters create orbtrace --region <region> \
      --machine-type e2-standard-4 --num-nodes 1 --enable-ip-alias
    gcloud container node-pools create dorisbe --cluster orbtrace --region <region> \
      --machine-type n2-highmem-8 --num-nodes 1 \
      --node-locations <single-zone> \        # BE pool'unu TEK bölgeye sabitleyin (callout'a bakın)
      --node-labels orbtrace.io/doris-be=true
    gcloud container clusters get-credentials orbtrace --region <region>

    Bölgesel bir kümede --num-nodes bölge başınadır, dolayısıyla --node-locations olmadan BE pool'u her bölgeye birer node yayardı ve bir BE'nin zonal diski onu izleyemezdi. --node-locations <single-zone> tüm BE pool'unu tek bir bölgede tutar.

    Zonal Persistent Disk'ler bölgeye kilitlidir — Doris BE'yi sabitleyin

    Bir zonal PD/Hyperdisk tek bir bölgede 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 pool'unu tek bir bölgede tutun 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 Hyperdisk StorageClass

    GKE PD CSI sürücüsünü zaten getirir — volume'lar için IAM bağlantısı yok. Varsayılan premium-rwo (pd-ssd) boyut-başına sabit performansa sahiptir; Hyperdisk Balanced ise Doris BE compaction'ının ihtiyaç duyduğu şekilde IOPS ile throughput'u bağımsız ayarlamanızı sağlar:

    hyperdisk-orbtrace.yaml
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: hyperdisk-orbtrace
      annotations: { storageclass.kubernetes.io/is-default-class: "true" }
    provisioner: pd.csi.storage.gke.io
    parameters:
      type: hyperdisk-balanced
      provisioned-iops-on-create: "6000"
      provisioned-throughput-on-create: "250Mi"
    volumeBindingMode: WaitForFirstConsumer   # diski pod'un bölgesinde bağlar
    allowVolumeExpansion: true

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

    (Hyperdisk makine tipiniz/bölgeniz tarafından desteklenmeli; değilse temel IOPS'u için yeterince büyük boyutlandırılmış premium-rwo'ya geri dönün.)

  3. 3

    Postgres'i sağlayın — Cloud SQL + pgvector

    Kümenin VPC'sinde private IP'li bir Cloud SQL for PostgreSQL (v16+) örneği oluşturun (Private Service Access / VPC peering) — ya da bir sidecar olarak Cloud SQL Auth Proxy üzerinden ona ulaşın. Cloud SQL pgvector'ı destekler; bağlandıktan sonra bir kez 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 Memorystore 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 pool'una hedeflenmiş küçük bir ayrıcalıklı DaemonSet ile uygulayın (bu, Autopilot yerine Standard kullanmanın bir nedenidir — Autopilot ayrıcalıklı container'ları engeller):

    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 — DorisClusterhyperdisk-orbtrace StorageClass'ını ve BE pool'u için bir nodeSelector kullanır — ya da GCE 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 GCP'de aynıdır. my-values.yaml'ınızda:

    my-values.yaml
    global:
      imagePullSecrets: [{ name: ghcr }]     # Helm sayfasındaki secret
    postgres:
      mode: external
      host: 10.x.x.x                         # Cloud SQL private IP (ya da Auth Proxy ile 127.0.0.1)
      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 / GCE adresi
  7. 7

    Açığa çıkarın — GKE Ingress + ManagedCertificate

    Global bir statik IP ayırın, DNS'i ona yönlendirin, sonra bir ManagedCertificate oluşturup onu bir statik-IP annotation'ıyla birlikte chart'ın ingress'ine bağlayın (chart ≥ 2.0.13):

    orbtrace-cert.yaml
    apiVersion: networking.gke.io/v1
    kind: ManagedCertificate
    metadata: { name: orbtrace-cert, namespace: orbtrace }
    spec: { domains: [orbtrace.example.com] }
    my-values.yaml (ekleyin)
    orbtrace:
      ingress:
        enabled: true
        # className ayarlanmaz → varsayılan GKE (GCLB) Ingress class'ı
        annotations:
          kubernetes.io/ingress.global-static-ip-name: orbtrace-ip
          networking.gke.io/managed-certificates: orbtrace-cert
        hosts:
          - host: orbtrace.example.com
            paths: [{ path: /, pathType: Prefix }]

    GKE sağlık kontrolünü readiness probe'undan türetir — BackendConfig gerekmez

    VPC-native bir kümede GKE Ingress container-native yük dengelemeyi (NEG'ler) kullanır ve LB sağlık kontrolünü yapılandırmak için pod'un readiness probe'unu okur. Orbtrace'in readiness probe'u /actuator/health/readiness'tir, dolayısıyla sağlık kontrolü otomatik olarak doğrudur — bir BackendConfig'e ihtiyacınız yoktur. (Yalnızca ileri düzey ayar için ekleyin: IAP, özel timeout'lar, Cloud CDN.) Tek uyarı: Ingress oluşturulduğunda uygulama pod'ları çoktan çalışıyor olmalı — Deployment 0'a ölçeklenmişse GKE varsayılan bir / kontrolüne düşer ve sonradan yapılan bir readiness-probe düzenlemesi mevcut bir Ingress'e yayılmaz. Chart'ı Ingress'ten önce (ya da onunla birlikte) kurun; buradaki adım sırası bunu zaten yapar.

    Bunun yerine ingress-nginx kullanmak için className: nginx'i, bir cert-manager tls secret'ıyla nginx.ingress.kubernetes.io/* annotation'larını ayarlayı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 managedcertificate    # STATUS Provisioning → Active olur
    curl -fsSI https://orbtrace.example.com | head -1   # sertifika Active olunca HTTP/2 200

    Sonra İlk giriş'e devam edin.

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

  • Cloud SQL: bölgesel (HA) örnek, otomatik yedekler + PITR, yalnızca private IP. Parolayı Secret Manager'da tutun; pod'lar Google API'lerine anahtarsız kimlik doğrulasın diye Workload Identity kullanın.
  • Doris yedekleri: Postgres dump'larını ve Doris snapshot'larını GCS'ye (S3-uyumlu endpoint'i üzerinden) göndermek için chart'ın backup.* CronJob'larını etkinleştirin; referans DorisCluster bir cold tier'ı destekler — bkz. Kapasite planlama.
  • Node'lar: bölgesel bir küme app pool'unu bölgelere yayar; node auto-provisioning'i etkinleştirin. Chart PodDisruptionBudget'ları getirir.
  • Private küme: yetkili ağlarla private bir GKE kümesi çalıştırın; firewall kurallarını yalnızca küme Cloud SQL'e ulaşacak şekilde kısıtlayın.

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

  • ManagedCertificate Provisioning takılı → Google alan adını doğrulayabilmeden önce DNS statik IP'ye çözümlenmeli ve yük dengeleyici hizmet veriyor olmalı. 15–60 dakika sürebilir; önce A kaydını doğrulayın.
  • Ayrıcalıklı DaemonSet reddedildi → ayrıcalıklı pod'ları engelleyen Autopilot'tasınız. Standard bir küme kullanın (1. adım) ya da vm.max_map_count'u başka bir yolla ayarlayın.
  • Uygulama Ready değil, STORAGE_UNAVAILABLE → Cloud SQL private IP peering'i kurulu değil (ya da Auth Proxy sidecar'ı çalışmıyor) ya da doris.host yanlış. Bkz. Sorun giderme.
  • Bir Doris BE pod'u yeniden zamanlamadan sonra Pending takılı → PD'sinden farklı bir bölgeye indi. BE pool'unu tek bir bölgeye sabitleyin (1. adım).
  • BE diski yavaş / compaction geridepremium-rwo boyut-başına temel değerinde. Açık IOPS'lu Hyperdisk 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.