Bu rehber, Proxus'u Kubernetes üzerinde yüksek erişilebilirlik hedefiyle kurmak için hazırlanmıştır. Docker Compose tek sunucu kurulumları için uygundur; bu rehber ise production ortamda arıza toleransı, kontrollü güncelleme ve operasyonel bakım isteyen ekipler içindir.
Manifestler lokal Kubernetes ortamında test edilebilir, ancak gerçek HA production kurulum için çok node'lu Kubernetes cluster, güvenilir persistent storage, izleme ve yedekleme politikası gerekir. Tek node'lu cluster topolojiyi doğrular, fakat node kaybına dayanıklı değildir.
Bu Kurulum Ne Sağlar?
HA kurulum Proxus'u veri katmanı ve uygulama katmanı olarak ayırır:
| Katman | Bileşen | HA davranışı |
|---|---|---|
| Veri | PostgreSQL | 3 instance, tek read-write endpoint ve otomatik failover |
| Veri | ClickHouse Keeper | 3 pod koordinasyon quorum'u |
| Veri | ClickHouse | Replikalı telemetri depolama için 1 shard, 2 replica |
| Mesajlaşma | NATS JetStream | 3 node mesajlaşma hub'ı, üç replikalı stream'lerle |
| Uygulama | Proxus UI | Node'lara dağıtılmış 2 replica, Kubernetes Service arkasında |
| Edge | Proxus Gateway | Her GatewayID için 1 pod, hata durumunda Kubernetes yeniden başlatır |
| Operasyon | Pod Disruption Budget | NATS ve UI için drain koruması |
| Operasyon | Prometheus metrikleri | Her NATS pod'unda NATS exporter sidecar |
| Operasyon | Kubernetes Secret | NATS ve PostgreSQL kimlik bilgileri plaintext manifest'lerden çıkarıldı |
Gateway workload'ları singleton'dır. Aynı GatewayID için replica sayısını artırmayın. Ayrı saha veya hat için kapasite eklemek istiyorsanız farklı GatewayID ile ayrı bir gateway deployment oluşturun.
Hızlı HA Kurulumu
Gerekenler: Kubernetes cluster, varsayılan StorageClass, kubectl erişimi, operator kurma yetkisi, Proxus lisansı ve kullanacağınız release'e ait Proxus container imajlarına erişim.
Tam HA paketi şunları ayağa kaldırır:
- CloudNativePG ile yönetilen 3 PostgreSQL instance
- 3 ClickHouse Keeper pod ve 2 replikalı ClickHouse cluster
- Üç replikalı stream'lerle JetStream çalıştıran 3 NATS pod
- Sticky-session ingress arkasında 2 Proxus UI pod
- 1 Proxus Gateway pod
- Pod Disruption Budget'lar, Prometheus metrikleri ve kimlik bilgisi Secret'ları
Paket iki Kubernetes Secret'ında varsayılan kimlik bilgileriyle gelir (nats-credentials, postgres-credentials). Aşağıdaki Hızlı Kurulum ile birkaç dakikada çalışan bir cluster elde edersiniz; ancak ortamı ekibiniz dışına açmadan önce bu varsayılanları değiştirin. Rotasyon prosedürü için Güvenlik ve Secret'lar bölümüne bakın.
Tüm HA kurulumu çalıştırın:
mkdir -p proxus-kubernetes-ha
cd proxus-kubernetes-ha
curl -L https://proxus.io/deployment/kubernetes-ha/proxus-kubernetes-ha.tar.gz | tar xz
kubectl apply --server-side -f https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.29/releases/cnpg-1.29.0.yaml
kubectl -n cnpg-system rollout status deployment/cnpg-controller-manager --timeout=300s
curl -s https://raw.githubusercontent.com/Altinity/clickhouse-operator/master/deploy/operator-web-installer/clickhouse-operator-install.sh | OPERATOR_NAMESPACE=clickhouse bash
kubectl -n clickhouse rollout status deployment/clickhouse-operator --timeout=300s
kubectl apply -k ha-data
kubectl -n proxus-data wait --for=jsonpath='{.status.phase}'='Cluster in healthy state' cluster/postgresql-ha --timeout=600s
kubectl -n clickhouse wait --for=jsonpath='{.status.status}'=Completed chi/clickhouse-ha --timeout=600s
kubectl -n clickhouse wait --for=condition=complete job/clickhouse-bootstrap --timeout=180s
kubectl apply -k ha
kubectl -n proxus-ha rollout status statefulset/hub-server --timeout=300s
kubectl -n proxus-ha rollout status deployment/proxus-ui --timeout=300s
kubectl -n proxus-ha rollout status deployment/proxus-server-gateway-1 --timeout=300s Sağlıklı bir cluster üzerinde toplam süre 5-10 dakikadır; çoğunluğu CloudNativePG'nin PostgreSQL primary'sini ayağa kaldırması ve ClickHouse Keeper quorum'unun başlamasıdır.
Kurulum Doğrulaması
Cluster'ın sağlıklı geldiğini ve JetStream stream'lerinin üç replikalı çalıştığını doğrulayın:
kubectl -n proxus-ha get pods,pdb
kubectl run -n proxus-ha nats-tmp --rm -i --restart=Never --image=natsio/nats-box:0.18.0 -- \
nats --server="nats://acc:acc@hub-server:4222" stream report Rapordaki her JetStream stream'i R=3 göstermelidir. Herhangi bir stream R=1 görünüyorsa Sorun Giderme bölümüne bakın.
İlk Giriş
Tarayıcıda http://127.0.0.1:30080/ adresini açın. Remote cluster'da 127.0.0.1 yerine erişilebilir Kubernetes node adresini kullanın veya verilen ingress'i load balancer arkasında yayınlayın.
Varsayılan giriş:
- Kullanıcı adı:
Admin - Şifre: ortamınızda değiştirilmediyse boş bırakın
İlk girişten sonra Proxus lisansınızı UI üzerinden aktive edin. Yeni HA PostgreSQL cluster, eski Docker veya lokal test veritabanındaki lisans verisini içermez; ancak o veritabanını restore ettiyseniz durum farklıdır.
Production'a Geçmeden Önce
Varsayılan NATS ve PostgreSQL kimlik bilgilerini rotate etmek için Güvenlik ve Secret'lar prosedürünü uygulayın, ardından Production Kontrol Listesi üzerinden geçin.
Kurulumu Kontrol Etme
Hızlı kurulum bittiğinde veya wait komutlarından biri timeout alırsa şu komutlarla durumu kontrol edin:
kubectl -n proxus-data get cluster,pods,svc,pvc
kubectl -n clickhouse get pods,svc,pvc,chi
kubectl -n proxus-ha get pods,svc,endpoints Beklenen yapı:
| Workload | Beklenen durum |
|---|---|
hub-server | 3 NATS pod |
proxus-ui | 2 UI pod |
proxus-server-gateway-1 | 1 gateway pod |
postgresql service | PostgreSQL read-write endpoint'ine ExternalName |
clickhouse service | ClickHouse service'ine ExternalName |
Production'da UI'ı ingress veya load balancer üzerinden yayınlayın. Verilen ingress örneği tarayıcı oturumları için sticky session kullanır:
kubectl -n proxus-ha get ingress Production Konfigürasyonu
Ortamı dışa açmadan önce şu değerleri gözden geçirip değiştirin:
| Dosya | Kontrol edilecek alan |
|---|---|
ha/secrets.yaml | NATS hesap kimlik bilgileri ve PostgreSQL kimlik bilgileri (önce burayı yapın; bkz. Güvenlik ve Secret'lar) |
ha-data/postgresql-ha.yaml | PostgreSQL storage boyutu ve instance sayısı |
ha-data/clickhouse-ha.yaml | ClickHouse şifresi, storage boyutu, Keeper ve replica sayısı |
ha/proxus-ui.yaml | UI imaj etiketi, replica sayısı, kaynak request/limit'leri |
ha/proxus-gateway-1.yaml | Gateway imaj etiketi, GatewayID, dışa açılan protokol portları, kaynak request/limit'leri |
ha/nats-cluster.yaml | JetStream storage boyutu, kaynak request/limit'leri |
ha/pod-disruption-budgets.yaml | İsteğe bağlı kesintilerde minimum erişilebilir pod sayısı |
ha/storage.yaml | Persistent volume boyutu ve access mode; çok node'lu production için ortak UI volume'leri ve nats-hub-config RWX storage kullanmalıdır |
ha/ingress-nginx-sticky.yaml | Host adı, ingress class, sticky session ayarları |
Manifest'leri her zaman kubectl apply -k ha (kustomize) ile uygulayın. Tek tek dosyaları kubectl apply -f ile uygulamak kustomization'da bildirilen namespace'i almaz; kaynaklar yanlış namespace'te oluşabilir.
Güvenlik ve Secret'lar
Varsayılan NATS ve PostgreSQL kimlik bilgileri plaintext manifest argümanları olarak değil, proxus-ha namespace'inde iki Kubernetes Secret içinde tutulur.
| Secret | Anahtarlar |
|---|---|
nats-credentials | users-user, users-password, sys-user, sys-password |
postgres-credentials | user, password, database |
NATS sunucusu accounts.conf içinde environment variable interpolation ile bu değerleri başlangıçta okur. UI ve Gateway pod'ları aynı değerleri ortam değişkeni olarak alır ve bağlantı argümanları pod başlatılırken $(VAR_NAME) ikamesi kullanır.
Manifest düzenlemeden değer rotasyonu:
kubectl -n proxus-ha edit secret nats-credentials
kubectl -n proxus-ha edit secret postgres-credentials
kubectl -n proxus-ha rollout restart statefulset/hub-server
kubectl -n proxus-ha rollout restart deployment/proxus-ui deployment/proxus-server-gateway-1 postgres-credentials değişikliğinden önce yeni kimlik bilgilerinin PostgreSQL cluster tanımına (ha-data/postgresql-ha.yaml) yansıdığından emin olun. ClickHouse kimlik bilgileri ha-data/clickhouse-ha.yaml üzerinden yönetilir; henüz postgres-credentials üzerinden geçmez.
Gözlenebilirlik
Her NATS pod'u 7777 portunda Prometheus formatında metrik sunan bir sidecar çalıştırır. Standart scrape annotation'larıyla bir headless servis bu uç noktayı yayar:
kubectl -n proxus-ha get svc hub-server-metrics
kubectl -n proxus-ha get pods -l app.kubernetes.io/name=hub-server -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.podIP}{"\n"}{end}' Prometheus instance'ınızı bu headless servise yönlendirin. Faydalı metrikler arasında JetStream stream/consumer sayıları, route durumu ve stream başına mesaj throughput'u bulunur.
Ölçekleme Kuralları
UI
UI yatay ölçeklenebilir:
kubectl -n proxus-ha scale deployment/proxus-ui --replicas=3
kubectl -n proxus-ha rollout status deployment/proxus-ui --timeout=300s Ortamınız sticky session olmadan doğrulanmadıysa ingress katmanında sticky session açık kalsın.
Gateway'ler
Bir gateway deployment'ını birden fazla replica'ya çıkarmayın:
kubectl -n proxus-ha scale deployment/proxus-server-gateway-1 --replicas=1 Başka bir gateway eklemek için farklı GatewayID ile ayrı deployment oluşturun.
PostgreSQL
PostgreSQL tek writable primary kullanır. Uygulama bağlantısı read-write service'e gider:
postgresql-ha-rw.proxus-data.svc.cluster.local:5432 Read-only service'i yalnızca replica üzerinde çalışması güvenli olan iş yükleri için kullanın:
postgresql-ha-ro.proxus-data.svc.cluster.local:5432 ClickHouse
Paket 1 shard ve 2 replica ile başlar. Bu yapı replica erişilebilirliği sağlar. Daha yüksek analitik kapasite için shard sayısı, tablo motorları ve distributed table stratejisi birlikte planlanmalıdır.
Proxus'u Güncelleme
- Yedek alın veya son başarılı yedekleri doğrulayın.
ha/proxus-ui.yamlveha/proxus-gateway-1.yamliçindeki imaj etiketini değiştirin.- Manifestleri uygulayın:
kubectl apply -k ha - Rollout'u izleyin:
kubectl -n proxus-ha rollout status deployment/proxus-ui --timeout=300s
kubectl -n proxus-ha rollout status deployment/proxus-server-gateway-1 --timeout=300s UI güncellemeleri rolling yapılır. Gateway singleton olduğu için gateway güncellemesi sırasında o gateway'e bağlı cihazlar kısa süreli kopup yeniden bağlanabilir.
NATS Control-Plane Stream Güncellemesi
Eski bir HA paketinden güncelliyorsanız legacy license_stream var mı kontrol edin. Proxus license ve license.health konularını core NATS request/reply olarak kullanır; bu konular JetStream stream arkasında olmamalıdır.
nats stream info license_stream
nats stream rm license_stream --force Bu stream'i yalnızca mevcut paket sürümünüzün artık license_stream oluşturmadığını ve üzerinde özel consumer olmadığını doğruladıktan sonra kaldırın.
Operator Güncellemeleri
Operator güncellemelerini altyapı bakım işi olarak planlayın:
- Operator release notlarını okuyun.
- Yedeklerin hazır olduğunu doğrulayın.
- Bakım penceresinde operator güncellemesini uygulayın.
- Veritabanı ve ClickHouse cluster sağlığını kontrol edin.
PostgreSQL:
kubectl -n proxus-data get cluster,pods ClickHouse:
kubectl -n clickhouse get chi,pods Yedekleme ve Geri Yükleme
PostgreSQL
Storage snapshot sisteminizi veya PostgreSQL operator'ünün backup konfigürasyonunu kullanın. En azından şunları kontrol edin:
kubectl -n proxus-data get cluster postgresql-ha
kubectl -n proxus-data get pvc Production'da zamanlanmış yedek oluşturun ve bu yedeği ayrı bir namespace'e restore ederek test edin.
ClickHouse
Tüm replica'ları ve Keeper metadata gereksinimlerini kapsayan storage snapshot veya ClickHouse backup süreci kullanın. Data PVC'leri ve Keeper PVC'lerinin korunduğunu doğrulayın:
kubectl -n clickhouse get pvc Proxus Konfigürasyonu ve Modüller
Proxus UI ve gateway PVC'lerini yedekleyin:
kubectl -n proxus-ha get pvc Önemli volume'ler:
- UI config
- UI modules
- her gateway'in config volume'ü
- NATS JetStream verisi
Arıza Testleri
Arıza testlerini bakım penceresinde çalıştırın.
UI Pod Arızası
kubectl -n proxus-ha delete pod -l app.kubernetes.io/name=proxus-ui
kubectl -n proxus-ha rollout status deployment/proxus-ui --timeout=300s Kubernetes silinen podu yeniden oluştururken service sağlıklı UI poduna trafik vermeye devam etmelidir.
Gateway Pod Arızası
kubectl -n proxus-ha delete pod -l app.kubernetes.io/name=proxus-server,proxus.io/gateway-id=1
kubectl -n proxus-ha rollout status deployment/proxus-server-gateway-1 --timeout=300s Bağlı cihazlar yeni pod başladıktan sonra yeniden bağlanabilir.
PostgreSQL Primary Arızası
PostgreSQL operator'ünün dokümante ettiği switchover veya failover prosedürünü kullanın. Failover sonrasında şunları doğrulayın:
kubectl -n proxus-data get cluster postgresql-ha
kubectl -n proxus-ha logs deploy/proxus-ui --tail=100 ClickHouse Replica Arızası
kubectl -n clickhouse delete pod chi-clickhouse-ha-proxus-0-0-0
kubectl -n clickhouse get pods,chi Kalan replica erişilebilir kalmalı, silinen pod yeniden oluşturulmalıdır.
Sorun Giderme
UI Açılmıyor
Service ve podları kontrol edin:
kubectl -n proxus-ha get pods,svc,endpoints
kubectl -n proxus-ha logs deploy/proxus-ui --tail=100 HA paketi UI service'ini NodePort 30080 olarak açar. Lokalde http://127.0.0.1:30080/ adresini açın; remote cluster'da 127.0.0.1 yerine erişilebilir node adresini kullanın.
Login Sayfası Açılıyor ama Gateway Aktif Değil
Gateway loglarını kontrol edin:
kubectl -n proxus-ha logs deploy/proxus-server-gateway-1 --tail=150 Lisans mevcut veritabanında aktive edilmediyse UI üzerinden lisansı aktive edin.
PostgreSQL Hazır Değil
kubectl -n proxus-data get cluster,pods,pvc
kubectl -n proxus-data describe cluster postgresql-ha Yaygın nedenler:
- storage class volume oluşturamıyor
- database imajı çekilemiyor
- cluster CPU veya memory kaynağı yetersiz
- küçük cluster'da pod anti-affinity karşılanamıyor
ClickHouse Hazır Değil
kubectl -n clickhouse get chi,pods,svc,pvc
kubectl -n clickhouse logs deploy/clickhouse-operator --tail=150
kubectl -n clickhouse logs statefulset/clickhouse-keeper --tail=150 Yaygın nedenler:
- ClickHouse imajı çekilemiyor
- Keeper quorum sağlıklı değil
- PVC'ler pending durumda
- bootstrap job tamamlanmadı
NATS Hazır Değil
kubectl -n proxus-ha get pods -l app.kubernetes.io/name=hub-server
kubectl -n proxus-ha logs statefulset/hub-server --tail=150 Üç NATS podunun çalıştığını ve PVC'lerinin bound olduğunu kontrol edin.
Temizlik
Yalnızca test ortamı için:
kubectl delete -k ha
kubectl delete -k ha-data Namespace, PVC veya storage snapshot silmek production verisini kalıcı olarak silebilir. Test edilmiş geri dönüş planı ve onaylı bakım süreci olmadan production ortamda temizlik komutları çalıştırmayın.
Production Kontrol Listesi
Canlıya çıkmadan önce:
- Çok node'lu Kubernetes cluster kullanın.
- Storage class ve backup politikalarını doğrulayın.
- Çok node'lu production için ortak UI volume'leri ve
nats-hub-configüzerinde RWX destekli storage kullanın. nats-credentialsvepostgres-credentialsSecret'larındaki varsayılan değerleri değiştirin.- Ingress TLS yapılandırın.
- UI'ın
http://<node-address>:30080/veya ingress/load balancer üzerinden erişilebilir olduğunu doğrulayın. - Proxus lisansını aktive edin.
- Her gateway deployment'ını singleton bırakın.
- JetStream stream'lerinin üç replikalı çalıştığını doğrulayın (
nats stream reportçıktısında her stream R=3 görünmeli). - Pod Disruption Budget'ların node drain sırasında en az iki NATS pod'u ve bir UI pod'u erişilebilir tuttuğunu doğrulayın.
- Prometheus'un
7777portundaki NATS metrik uç noktasını topladığını doğrulayın. - UI failover testini yapın.
- PostgreSQL failover testini yapın.
- ClickHouse replica recovery testini yapın.
- NATS pod recovery testini yapın.
- Restore prosedürünüzü dokümante edin.
- Pod sağlığı, storage kullanımı, database sağlığı ve uygulama loglarını izleyin.