Orbtrace

OpenShift / OKD

Orbtrace'i OpenShift'te varsayılan restricted-v2 SCC altında kurma — values-openshift overlay'i, tek node-seviyesi ön-koşul (Node Tuning Operator ile kernel ayarları), Doris operatör PSA + SCC'si ve Route tabanlı ingress.

Orbtrace'in Helm chart'ı, OpenShift overlay'i ile kurulduğunda OpenShift'te varsayılan restricted-v2 Security Context Constraint (SCC) altında çalışır — oc adm policy add-scc-to-user yok, özel SCC yok. Kubernetes yolunda Caddy yoktur (Caddy yalnızca tek-host Docker Compose ters proxy'sidir); OpenShift Router, TLS'i bir Route üzerinden sonlandırır.

Bunu Helm ile kurun (genel Helm adımları) ve Doris kurulumu (chart'ın hiçbir zaman kurmadığı telemetri deposu) ile birlikte okuyun.

Bu sayfa, işleri gerçekten çalıştırdığınız sırayı izler: node kernel ayarları → Doris → registry girişi & values dosyanız → overlay ile helm install → ilk giriş.

1. Tek node-seviyesi ön-koşul — kernel ayarları

Doris BE, vm.max_map_count >= 2000000 ile Doris kurulumu — Gereksinimler sayfasındaki iki inotify limitini ister. Bunlar, ayrıcalıksız bir pod'un değiştiremeyeceği node kernel ayarlarıdır — Elasticsearch / OpenSearch'ün OpenShift'te taşıdığı aynı gereksinim. Ayrı bir Doris kurulumu değildir; tek bir küme-yönetici adımıdır ve ilk sırada gelir, çünkü bir sonraki adımda başlatacağınız Doris BE bunlar olmadan çalışmaz.

Bunun aracı Node Tuning Operator'dır. Herhangi bir şey uygulamadan önce operatörün kümenizde olduğunu kontrol edin — aşağıdaki Tuned kaynak türü ancak operatör kuruluysa var olur:

oc get crd tuneds.tuned.openshift.io

CRD'yi adlandıran tek bir satır bekleyin. Gerçek OpenShift operatörü varsayılan olarak taşır; OpenShift Local (CRC) ve bazı minimal OKD kurulumları taşımaz. Bu komut NotFound dönerse aşağıdaki YAML'i atlayın — operatör olmadan oc apply çalışamaz — ve doğrudan bu adımın sonundaki Kümede operatör yok mu? kutusuna geçin.

Operatör varsa profili bir kez uygulayın:

doris-node-tuning.yaml
apiVersion: tuned.openshift.io/v1
kind: Tuned
metadata:
  name: doris-node-sysctls
  namespace: openshift-cluster-node-tuning-operator
spec:
  profile:
    - name: doris-node-sysctls
      data: |
        [main]
        summary=Kernel settings for Apache Doris BE
        [sysctl]
        vm.max_map_count=2000000
        fs.inotify.max_user_instances=8192
        fs.inotify.max_user_watches=1048576
  recommend:
    - match:
        - label: node-role.kubernetes.io/worker
      priority: 20
      profile: doris-node-sysctls

Applysave as doris-node-tuning.yaml, then runoc apply -f doris-node-tuning.yaml

Kümede operatör yok mu? Sysctl'leri doğrudan node'lara yazın

Operatör yokken küme Tuned kaynak türünü hiç tanımaz; yukarıdaki oc apply bu yüzden no matches for kind "Tuned" in version "tuned.openshift.io/v1" / ensure CRDs are installed first hatasıyla düşer. Bu hata tam olarak bu durumu anlatır: çözüm bu kutudaki yedek yoldur. Bunlar pod-başına değil node (makine) başına ayarlardır — Doris BE'nin düşebileceği her node'a yazın:

# 1. Aday node'ları listeleyin — ihtiyacınız olan NAME sütunudur.
#    (OpenShift Local/CRC'de tam olarak bir node vardır.)
oc get nodes -l node-role.kubernetes.io/worker
 
# 2. Tüm worker'lara tek seferde uygulayın:
for n in $(oc get nodes -l node-role.kubernetes.io/worker -o jsonpath='{.items[*].metadata.name}'); do
  oc debug node/$n -- chroot /host sysctl -w \
    vm.max_map_count=2000000 \
    fs.inotify.max_user_instances=8192 \
    fs.inotify.max_user_watches=1048576
done
 
# 3. Bir node üzerinde doğrulayın:
oc debug node/<node-adı> -- chroot /host sysctl vm.max_map_count
# Beklenen: vm.max_map_count = 2000000

Bu yalnızca o node'lara ve yeniden başlayana kadar etki eder — sonradan eklenen bir node (autoscaling, değişim) varsayılanlarla gelir ve aynı komutu ister. Pod restart'ları ayarı SIFIRLAMAZ. Bir değerlendirme için yeterli. Operatörsüz kalıcı ayar için worker pool'a bir MachineConfig (ya da her node'da /etc/sysctl.d drop-in'i) kullanın.

Bir storage pool'u taint/label'larsanız match'i Doris BE'nin indiği node'lara daraltın. Bu yerindeyken BE pod'ları restricted-v2 altında ayrıcalıksız çalışır. (Doris'i küme dışında mı çalıştırıyorsunuz? O zaman bu adım OpenShift node'larınıza uygulanmaz — bir sonraki bölüme geçin.)

2. OpenShift'te Doris

Chart, Doris'i kurmaz (doris.mode: external). Onu doris-operator ile çalıştırın ve chart'ı operatör yönetimindeki FE Service'ine yönlendirin — tam adım adım anlatım (operatör kurulumu, referans DorisCluster CR'ı, doğrulama) Doris kurulumu sayfasındadır. Doris, chart'ı kurmadan önce ayakta olmalıdır: Orbtrace pod'u canlı bir FE/BE'ye erişene kadar un-Ready kalır.

OpenShift'e özgü kısım: iki güvenlik varsayılanı operatörün pod'larını engeller. Operatör, BE pod'larına ayrıcalıklı bir default-init container'ı enjekte eder (vm.max_map_count'u yükseltir) — varsayılan namespace Pod Security Admission'ı (restricted/baseline) herhangi bir ayrıcalıklı container'ı reddeder, dolayısıyla BE pod'u hiç admit edilmez ve cluster initializing'de kalır. Ayrıca stok apache/doris image'ları root olarak çalışır — restricted-v2'nin rastgele UID'si altında FE, start_fe.sh: Permission denied ile crashloop yapar; bunu anyuid SCC'si çözer. Doris namespace'ini oluşturun, PSA'sını gevşetin ve iki SCC'yi de verin (bir kez, DorisCluster CR'ını uygulamadan önce — blok idempotent'tir; create satırı olmadan kalanlar namespaces "doris" not found ile düşer):

oc create namespace doris --dry-run=client -o yaml | oc apply -f -
oc label namespace doris pod-security.kubernetes.io/enforce=privileged --overwrite
oc adm policy add-scc-to-user privileged -z default -n doris
oc adm policy add-scc-to-user anyuid -z default -n doris

Atlarsanız operatör logunda would violate PodSecurity "…": privileged (container "default-init" must not set securityContext.privileged=true) yazar, oc get doriscluster initializing'den çıkmaz ve Orbtrace app'i eksik BE yüzünden crashloop yapar. vm.max_map_count'u node genelinde ayarlamak (1. adım) yine önerilir ama bu izinleri ortadan kaldırmaz — operatör ayrıcalıklı init'i her hâlükârda enjekte eder. Ayrıcalıklı init'ten ve her iki izinden tamamen kaçınmak için Doris'i küme dışında çalıştırın (VM/managed, doris.mode: external) — OpenShift'te önerilen yol.

3. Registry girişi, chart ve values dosyanız

Chart ve image özel (private) GHCR paketleridir. Nivorbit'in verdiği müşteriye-özel token'la giriş yapın, sonra chart'ın kullanacağı pull secret'ı oluşturun. <token> ve <username> birden fazla yerde geçiyor — çalıştırmadan önce hepsini değiştirin:

echo "<token>" | helm registry login ghcr.io -u <username> --password-stdin
oc create namespace orbtrace
oc -n orbtrace create secret docker-registry ghcr \
  --docker-server=ghcr.io --docker-username=<username> --docker-password=<token>

helm registry login, Helm CLI'yi chart'ı çekmek için doğrular; Secret + global.imagePullSecrets (aşağıdaki values dosyasında) ise çalışma zamanı pod'larının image'ı çekmesini sağlar.

Chart'ı çekip açın — OpenShift overlay'i ve boyutlandırma preset'leri chart'ın içinde gelir ve helm show values size bu dosyaları veremez:

helm pull oci://ghcr.io/nivorbit/charts/orbtrace --version 2.1.0 --untar

Tüm values.yaml'ı kopyalamazsınız — Helm, chart'ın kendi varsayılanlarını taban olarak uygular. Açtığınız orbtrace/ dizininin yanına, yalnızca değiştirdiğiniz anahtarları içeren küçük bir my-values.yaml yazın:

my-values.yaml
global:
  imagePullSecrets: [{ name: ghcr }] # yukarıda oluşturulan secret
# OpenShift'te orbtrace.ingress yok — overlay, Ingress yerine Route koyar.
# Hostname ve OAuth2 URL'leri varsayılanda hiçbir şey istemez (chart kurulum
# anında kendisi türetir); özel host + yedek yol bir sonraki alt bölümde.
# Doris — referans operator DorisCluster (2. bölüm) ile varsayılanlar zaten
# eşleşir; yalnızca sizde farklı olanı açın:
# doris:
#   host: <doris-fe-host-unuz> # VM / yönetilen FE, ya da varsayılan-dışı operator adları
#   password: <doris-root-parolası> # yalnızca Doris'inizin parolası varsa — taze kurulumda yoktur
#   # Tek-BE Doris mi (değerlendirme)? Aşağıdaki İKİ satırı da açın, yoksa
#   # uygulama boot'ta durur ("replication num … available backend num is 1")
#   # — tablolar varsayılanda replikasyon faktörü 2 ile oluşturulur ve bu
#   # ≥2 canlı BE ister. Asla üretimde kullanmayın.
#   allowSingleReplica: true
#   profile: { replicationNum: 1 }
postgres:
  password: <postgres-parolası> # zorunlu — boşken chart kurulumu reddeder

İsteğe bağlı anahtarlar — orbtrace.licenseKey (boş = ücretsiz COMMUNITY), orbtrace.oidc.* (SSO), orbtrace.ai.* (AI sağlayıcısı), doris.profile.activeProfile (small / medium / large) — Helm ile kurun sayfasında ve açtığınız orbtrace/values.yaml içinde belgelidir; ilk kurulum için hiçbiri gerekmez.

Route hostname & external URL

Varsayılanda burada ayarlanacak bir şey yok. openshift.route.host'u boş bırakın; chart kurulum anında her şeyi kendisi çözer: kümenin apps domain'ini okur (ingresses.config.openshift.io/cluster), Route host'unu orbtrace-<namespace>.<apps-domain> olarak üretir ve OAuth2 giriş URL'lerini aynı host'tan türetir — giriş sıfır konfigürasyonla çalışır (chart ≥ 2.0.12).

Belirli bir adres mi istiyorsunuz? Özel bir host verin — gerisi yine ondan türer:

my-values.yaml
openshift:
  route:
    host: orbtrace.your-company.com   # isteğe bağlı; boş = orbtrace-<namespace>.<apps-domain>

Özel host, DNS işi anlamına gelmek zorunda değil: kümenin apps-domain'i altındaki her ad, Router'ın wildcard DNS'i tarafından zaten karşılanır — örneğin üretilen addaki namespace parçası olmadan orbtrace.apps.<cluster-domain>. Yalnızca apps-domain dışındaki bir ad (orbtrace.sirketiniz.com gibi) Router'a yönlenmiş bir DNS kaydı ister.

TLS sonlandırması varsayılan olarak edge'dir; reencrypt ve passthrough, openshift.route.tls.termination ile kullanılabilir.

SeçiminizAyarlamanız gereken
Varsayılan — openshift.route.host boşHiçbir şey: host ve OAuth2 URL'leri kümenin apps domain'inden otomatik türer
Özel hostYalnızca openshift.route.host — URL'ler ondan türer

Giriş localhost:8080'e mi yönleniyor (ERR_CONNECTION_REFUSED)?

Bu ne zaman olur? Normalde hiç — gerçek bir helm install sırasında chart, kümenin apps domain'ini okur ve giriş adresini kendisi ayarlar. Bunu yalnızca iki durumda yapamamış olabilir:

  • release gerçek kurulum yerine helm template ya da --dry-run ile render edildiyse, veya
  • helm install'u çalıştıran kullanıcının cluster Ingress config'ini (ingresses.config.openshift.io/cluster) okuma izni yoksa.

Kurulumun kendisi yine tamamlanır — yalnızca giriş bozuktur.

Çözüm — iki komut. Router'ın Route'unuza fiilen verdiği adresi okuyun, sonra release'e yazın:

HOST=$(oc -n <namespace> get route orbtrace -o jsonpath='{.spec.host}')
helm upgrade orbtrace ./orbtrace -n <namespace> \
  -f orbtrace/values-small.yaml -f my-values.yaml -f orbtrace/values-openshift.yaml \
  --set openshift.route.host=$HOST

Tekrar giriş yapın — tarayıcı artık https://$HOST adresine yönlenir. (Alternatifler: orbtrace.frontendUrl/backendUrl değerlerini https://$HOST yapmak aynı işi görür; yeniden kurulumsuz env yaması Giriş sorun giderme altında.)

Bilmeye değer, işlem gerektirmeyen iki adlandırma gerçeği:

  • Her zaman tek bir hostname vardır. Orbtrace, UI'ı ve API'yi aynı origin'den servis eder — asla ikinci bir adres yapılandırmazsınız.
  • Üretilen ad orbtrace ile başlar çünkü Route, Helm release'inin adını taşır. Küme içi iş yükleri bileşen adlarını korur (orbtrace-app, orbtrace-postgres, orbtrace-valkey) ama bunlar hiçbir URL'de görünmez.

Chart 2.0.10 ya da öncesinden mi yükseltiyorsunuz? Üretilen adres değişir

Eski chart'lar Route'u orbtrace-app diye adlandırıyordu; üretilen hostname de orbtrace-app-<namespace>.… okunuyordu. Yükseltme Route'u orbtrace olarak yeniden adlandırır ve üretilen hostname onunla birlikte değişir — yer imlerini ve eski adresi gösteren her şeyi güncelleyin. Yapmanız gereken tek soruya bağlı:

  • Özel openshift.route.host mi verdiniz? Hiçbir şey — adresiniz sizindir, kalır.
  • Üretilen host'u mu kullanıyorsunuz? Yeni adres ve giriş URL'leri yükseltme sonrası otomatik türer. Önce tek bir temizlik: values dosyanızda hâlâ elle girilmiş orbtrace.frontendUrl / backendUrl satırları varsa (eski chart bunları zorunlu kılıyordu), yükseltmeden önce o satırları silin — elle girilen değerler otomatik olanları ezer ve girişi eski, artık ölü adrese yönlendirmeye devam ederdi.

4. Overlay ile kurun

Bu komutu chart'ı açtığınız dizinde çalıştırın (3. bölüm) — ./orbtrace, -f yolları ve my-values.yaml oraya göre çözülür. Sırayla katmanlayın: boyutlandırma preset'i, override'larınız ve en sona OpenShift overlay'i (sonraki -f kazanır ve overlay'in UID işlemesi kazanmak zorundadır):

# Boyutlandırma preset'i: values-small | values-medium | values-large
helm install orbtrace ./orbtrace -n orbtrace \
  -f orbtrace/values-small.yaml -f my-values.yaml \
  -f orbtrace/values-openshift.yaml

Gerçek ayarlarınız my-values.yaml'da kalır (önceki bölüm); en sona katmanlanan overlay yalnızca üstüne SCC / Route / UID işlemesini ekler — sizin değerlerinizi tutmaz.

Overlay neyi değiştirir

KonuVarsayılan chartOpenShift overlay
Pod UIDsabit runAsUser (10001 / 1000 / 999) + fsGroupatlanır — SCC, namespace'in önceden ayrılmış aralığından bir UID enjekte eder
Gömülü pgvectorimajın UID 999'u ile çalışırbir passwd-shim init container, SCC-atanmış UID için bir /etc/passwd girdisi enjekte eder, böylece postgres ikilisinin getpwuid()'i başarılı olur — pgvector anyuid izni olmadan rastgele bir UID altında açılır
RoutingIngressnative Route (Router TLS'i sonlandırır)
Doris BE sysctlayrıcalıklı init vm.max_map_count'u yükseltiratlanır — onu node genelinde siz ayarlarsınız (1. adım)

Namespace'in aralığı dışındaki sabit kodlanmış bir UID, tam olarak restricted-v2 admission'ının reddettiği şeydir; overlay bu yüzden "güvenli" bir sayı seçmek yerine onu atlar. Harici Postgres (postgres.mode: external) çalıştırırsanız gömülü-pgvector UID konusundan tamamen kaçınırsınız — SCC'nin kısıtlayacağı bir küme içi veritabanı pod'u yoktur.

OpenShift'te beklenen (zararsız) Postgres log satırı

İlk açılışta gömülü Postgres şunu yazar: chmod: changing permissions of '/var/run/postgresql': Operation not permitted. Bu, upstream postgres imajının entrypoint'inden gelir — açılışta socket dizinini chmod eder; SCC'nin atadığı rastgele UID sahiplik değiştiremediği için satır yazılır ve atlanır (|| :). Bu satırı Orbtrace chart'ı üretmez ve Postgres normal başlar: hemen sonraki log satırları database system is ready to accept connections olur. Bir işlem gerekmez.

5. Giriş — break-glass admin, sonra SSO

Taze bir kurulum sizi kutudan çıktığı gibi içeri alır: chart, bir Secret'ta saklanan kuruluma özel, üretilmiş bir parolayla bir break-glass yerel admin oluşturur (orbtrace.bootstrapAdmin, varsayılan açık) — kasıtlı olarak sabit bir varsayılan parola yoktur (her kuruluma gömülü ortak bir kimlik kritik bir zafiyet olurdu). Kurulumdan sonra okuyun (helm install çıktısı da bunu basar):

oc -n <namespace> get secret <release>-bootstrap-admin \
  -o jsonpath='{.data.password}' | base64 -d

admin@orbtrace.local (ya da orbtrace.bootstrapAdmin.username değeriniz) ile girin — Orbtrace bir oturum vermeden önce yeni bir parola belirlemeniz zorunludur. Sonra üretim için SSO'yu bağlayın (GOOGLE_ / MICROSOFT_ / GITHUB_CLIENT_ID + _SECRET, ya da genel bir OIDC issuer — Kimlik doğrulama); MFA, lockout ve rotasyonu IdP yönetir. Yerel admin'i break-glass olarak tutun ya da saf-SSO sayfası için orbtrace.bootstrapAdmin.enabled=false ile kapatın. Değiştirdiğiniz parolayı mı kaybettiniz? Kimlik doğrulama sayfasındaki reset anahtarına bakın.

Giriş sorun giderme

"This site can't be reached" — adres çubuğu localhost:8080/oauth2/authorize'da

Uygulama dış URL'ini bilmiyordu, OIDC discovery pod-içi adresi yayınladı. Chart ≥ 2.0.12'de bu normalde olamaz — chart, host'u kurulum anında kendisi türetir. Bunu, otomatik türetim çalışamadığında görürsünüz: release helm template / --dry-run ile render edildi ya da kuran kullanıcının cluster kapsamlı Ingress config'ini (ingresses.config.openshift.io/cluster) okuma izni yoktu ve elle openshift.route.host / orbtrace.frontendUrl+backendUrl de verilmemişti (3. bölüm). Kalıcı düzeltme tek komut — Router'ın ürettiği host'u sabitleyip yükseltin:

HOST=$(oc -n <namespace> get route orbtrace -o jsonpath='{.spec.host}')
helm upgrade orbtrace ./orbtrace -n <namespace> \
  -f orbtrace/values-small.yaml -f my-values.yaml -f orbtrace/values-openshift.yaml \
  --set openshift.route.host=$HOST

Çalışan bir deploy'u Helm upgrade olmadan açmak için env'i patch'leyip roll ettirin — bu geçicidir, bir sonraki helm upgrade geri alır:

oc set env deploy/<release>-app -n <namespace> \
  ORBTRACE_BACKEND_URL=https://<route-host'unuz> \
  ORBTRACE_FRONTEND_URL=https://<route-host'unuz>
oc rollout status deploy/<release>-app -n <namespace>

Düzeldiğini doğrulayın — discovery authorization_endpoint'i localhost değil Route host'unuz olmalı:

oc exec deploy/<release>-app -n <namespace> -- \
  wget -qO- http://localhost:8080/.well-known/openid-configuration

Giriş sayfası "No login providers are configured" diyor

Break-glass admin'i SSO bağlamadan kapatmışsınız (orbtrace.bootstrapAdmin.enabled=false) — ya da break-glass varsayılanı olmayan 2.0.4-öncesi bir chart'tasınız. Ya SSO'yu konfigüre edin (Kimlik doğrulama) ya da bootstrap admin'i yeniden açın; çalışan bir deploy'u yeniden kurmadan açmak için:

oc set env deploy/<release>-app -n <namespace> \
  ORBTRACE_BOOTSTRAP_ADMIN_USERNAME=admin@your-company.com \
  ORBTRACE_BOOTSTRAP_ADMIN_PASSWORD='<güçlü-bir-parola>'
oc rollout status deploy/<release>-app -n <namespace>

Sonra sayfayı yenileyip bu kimlikle girin (ilk girişte yeni bir parola belirlemeniz istenir). oc set env bir sonraki helm upgrade'de silinir — kalıcılık için chart values'unu (orbtrace.bootstrapAdmin.*) tercih edin.

Air-gapped OpenShift

GHCR imajlarını ve OCI Helm chart'ını dahili registry'nize aynalayın ve global.imageRegistry'yi ona yönlendirin. Tam çevrimdışı akış için Air-gapped çalışma sayfasına bakın.

Sıradaki

Uygulama Ready olunca telemetriyi bağlayın — bir OTel Collector kurun ya da dorisexporter'ı mevcut OTel pipeline'ınıza ekleyin (Entegrasyon desenleri) — sonra kurulum-sonrası kontrol listesi ile bitirin.