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 install — Helm 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
Google-yönetilen / GCE — bunları siz çalıştırırsınız
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şen | GCP seçimi | Notlar |
|---|---|---|
| Orbtrace uygulaması | GKE Standard (bu chart) | Durumsuz — replika + HPA. Autopilot yerine Standard tercih edin (ayrıcalıklı DaemonSet + node-pool denetimi) |
| Postgres + pgvector | Cloud 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 Doris | GKE'de doris-operator ya da GCE 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 | GKE Ingress (GCLB) + ManagedCertificate | ingress-nginx alternatiftir |
| Blok depolama | Hyperdisk 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
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-nodesbölge başınadır, dolayısıyla--node-locationsolmadan 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
Pendingkalı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
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: trueApplysave 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
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;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 Memorystore 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 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.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'ıhyperdisk-orbtraceStorageClass'ını ve BE pool'u için birnodeSelectorkullanı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.hostiçin FE Service adresini not edin. - 6
Orbtrace'i Helm ile kurun
Helm ile kurun'u izleyin — pull secret ve
helm installGCP'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
Açığa çıkarın — GKE Ingress + ManagedCertificate
Global bir statik IP ayırın, DNS'i ona yönlendirin, sonra bir
ManagedCertificateoluş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 — birBackendConfig'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-managertlssecret'ıylanginx.ingress.kubernetes.io/*annotation'larını ayarlayı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 managedcertificate # STATUS Provisioning → Active olur curl -fsSI https://orbtrace.example.com | head -1 # sertifika Active olunca HTTP/2 200Sonra İ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; referansDorisClusterbir 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ı
ManagedCertificateProvisioningtakı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 dadoris.hostyanlış. Bkz. Sorun giderme. - Bir Doris BE pod'u yeniden zamanlamadan sonra
Pendingtakılı → PD'sinden farklı bir bölgeye indi. BE pool'unu tek bir bölgeye sabitleyin (1. adım). - BE diski yavaş / compaction geride →
premium-rwoboyut-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.