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.ioCRD'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:
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-sysctlsApplysave 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 = 2000000Bu 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 dorisAtlarsanı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 --untarTü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:
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:
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çiminiz | Ayarlamanı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 host | Yalnı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 templateya da--dry-runile 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=$HOSTTekrar 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
orbtraceile 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.hostmi 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/backendUrlsatı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.yamlGerç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
| Konu | Varsayılan chart | OpenShift overlay |
|---|---|---|
| Pod UID | sabit runAsUser (10001 / 1000 / 999) + fsGroup | atlanır — SCC, namespace'in önceden ayrılmış aralığından bir UID enjekte eder |
| Gömülü pgvector | imajın UID 999'u ile çalışır | bir 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 |
| Routing | Ingress | native Route (Router TLS'i sonlandırır) |
| Doris BE sysctl | ayrıcalıklı init vm.max_map_count'u yükseltir | atlanı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 -dadmin@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-configurationGiriş 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.