Sürüm: 1.4.9Bu dokümantasyon Spitfire 1.4.9 içindir.
Kubernetes'i bağlamak: cluster'da Tower, port açmadan
Bu sayfa bir Kubernetes cluster'ını Spitfire'a baştan sona bağlar: node'ların sunucu metrikleri (CPU, bellek, disk, ağ), kubelet metrikleri (pod ve container) ve cluster'ın durumu (Deployment, DaemonSet, node koşulları). Tower cluster'ın içinde çalışır ve Spitfire'a tek bir giden bağlantı açar: cluster'a dışarıdan hiçbir port açılmaz. Veri kaynağının alanları ve cluster görünümü: Altyapı izleme: Kubernetes.
Ön koşullar
- Sürekli metrikler açık: Tower'lar ve metrikler
Spitfire'da: /towers→ Metrikleri topla ve sakla (Metrikleri açmak). Kapalıyken Tower metrikleri alır ama atar; manifest sorunsuz uygulanır, hiçbir şey görünmez. - Bir Tower: bu sayfa onu cluster'ın içine kurar (Cluster'ın içinde Tower). Ağda zaten bir Tower varsa ve cluster'ın pod'ları ona ulaşabiliyorsa onu da kullanabilirsiniz.
- kubectl erişimi: namespace, ClusterRole ve ClusterRoleBinding oluşturabilen bir kullanıcı
(genelde
cluster-admin). Kubernetes 1.25 ve sonrası (Pod Security etiketleri). - Giden bağlantı: Tower pod'u Spitfire'ın adresine (HTTPS) ulaşabilmeli. İnternet çıkışı başka hiçbir şey için gerekmez.
- Kurulum yöneticisi: Tower'lar sayfası yalnız kurulum yöneticisine açıktır.
Neden Tower? Uygulama APM verisi (sfotlp_ anahtarlı OTLP) Tower istemez, doğrudan
Spitfire'ın /otlp adresine gider; Tower'a trace ya da log gönderilirse Tower bunu söyleyip
geri çevirir. Altyapı metrikleri (sfcol_ token'ı) ise internet çıkışı olsa bile yalnız Tower
üzerinden gelir: sfcol_'i yalnız Tower kabul eder. Karşılığında cluster'a gelen port olmaz,
güvenlik duvarında tek giden kural yeter, metrikler Tower ve bölge etiketini taşır, kaynak başına
sınır uygulanır ve Tower'ın sağlığı Tower'lar sayfasında görünür. Sınırı da bilin: kuyruk yalnız
bellektedir (SPITFIRE_TOWER_QUEUE_MB, varsayılan 64, en çok 256). Spitfire
SPITFIRE_TOWER_DROP_AFTER_SECONDS (varsayılan 60 sn) boyunca ulaşılamazsa kuyruk atılır ve
yanıt gelene kadar yeni metrikler de atılır: kesinti süresince grafiklerde boşluk olur.
Neler kurulur
Hepsi spitfire namespace'inde; ClusterRole ve ClusterRoleBinding cluster genelindedir.
| Nesne | Nereden | Ne yapar |
|---|---|---|
Namespace spitfire |
Tower manifest'i | Pod Security etiketleri (aşağıda) |
Secret spitfire-tower, spitfire-collector |
Secret komutu | sftower_ ve sfcol_ token'ları |
Deployment + Service + NetworkPolicy spitfire-tower |
Tower manifest'i | Tower, http://spitfire-tower.spitfire.svc:4318 |
DaemonSet spitfire-collector-host (isteğe bağlı) |
Tower manifest'i | Her node'u sunucu olarak okur (kök salt okunur) |
DaemonSet spitfire-collector-node |
Veri kaynağı manifest'i | Her node'un kubelet'i (kubelet_stats) |
Deployment spitfire-collector-cluster |
Veri kaynağı manifest'i | Cluster'ın durumu (k8s_cluster) |
ServiceAccount, ClusterRole, ClusterRoleBinding spitfire-collector |
Veri kaynağı manifest'i | Salt okuma: node, pod, workload; kubelet için yalnız nodes/stats |
Pod Security: host Collector açıksa namespace enforce: privileged olur, çünkü node'un kökünü,
ağını ve süreçlerini okumak (hostPath, hostNetwork, hostPID) başka hiçbir seviyede
yoktur. warn ve audit restricted kalır; host Collector dışındaki her pod (Tower, kubelet ve
cluster Collector'ları) restricted'a uyar: root olmayan kullanıcı, RuntimeDefault seccomp,
salt okunur kök dosya sistemi, bütün capability'ler düşürülmüş. Host Collector kapalıysa
namespace enforce: restricted olur.
Cluster'ın içinde Tower
Tower'lar ve metrikler
Spitfire'da: /towers→ Tower ekle → ad (ör.prod-eu-k8s) ve isteğe bağlı bölge → Tower ekle.İki token yalnız bu pencerede görünür. Pencereyi kapatmayın, sonraki adımları açıkken yapın.
Kubernetes (manifest) sekmesini seçin.
Her node'u bir sunucu olarak da izle kutusu: açıkken node'lar Sunucular'da görünür (namespace
privilegedolur, yukarıda). Mobil bildirimleri bu Tower taşıyacaksa ilgili kutuyu da işaretleyin.1. Namespace ve Secret'lar komutunu kopyalayıp cluster'a erişen bir terminale yapıştırın. İki kez token sorar: önce
sftower_…'u, sonrasfcol_…'u pencereden kopyalayıp yapıştırın, her birinde Enter.2. spitfire-tower.yaml içeriğini ev klasörünüze
spitfire-tower.yamlolarak kaydedin.Uygulayın:
kubectl apply --dry-run=server -f spitfire-tower.yaml && kubectl apply -f spitfire-tower.yaml--dry-run=serverönce sunucuya sorar: Pod Security ya da yetki reddi burada, hiçbir şey değişmeden görünür.Tower listede Bağlı olur (birkaç saniye). Sekmenin altındaki adres (
http://spitfire-tower.spitfire.svc:4318) veri kaynağının Tower adresidir.
NetworkPolicy yalnız 4318'e izin verir. Host Collector kapalıyken yalnız spitfire namespace'indeki
pod'lar gönderebilir. Açıkken host Collector node'un adresinden gönderdiği için (hiçbir pod
seçicisi onu tutmaz) port cluster'a açıktır ve kapıyı sfcol_ token'ı korur. NetworkPolicy'yi
uygulamayan bir CNI'de kural yok sayılır.
Secret'lar gizli sorudan
Komut token'ları read -rs ile sorar: ekranda görünmezler, kabuk geçmişine ve manifest'e girmezler.
kubectl'e standart girdiden (--from-file=…=/dev/stdin) verilirler; --from-literal değeri
komut satırında bırakır, süreç listesinde ve geçmişte görünür. Komut tek mantıksal satırdır
(satır sonları \): çok satırlı bir blok yapıştırılınca read bir sonraki yapıştırılan satırı
token sanar. Elle yazmak isterseniz:
kubectl create namespace spitfire
printf 'sftower_ token: ' && read -rs SF_TOWER && echo && \
printf 'sfcol_ token: ' && read -rs SF_COL && echo && \
printf '%s' "$SF_TOWER" | kubectl -n spitfire create secret generic spitfire-tower --from-file=SPITFIRE_TOWER_TOKEN=/dev/stdin && \
printf '%s' "$SF_COL" | kubectl -n spitfire create secret generic spitfire-collector --from-file=token=/dev/stdin; \
unset SF_TOWER SF_COLManifest token taşımadığı için bir depoda (GitOps) tutulabilir; Secret'lar ayrı yönetilir.
İmajı digest'e sabitlemek
Manifest imajı etiketle verir (usespitfire/spitfire:<sürüm> ve host Collector için
<sürüm>-collector); sürüm Spitfire'ınkiyle aynı olmalıdır. Etiket yerine digest isterseniz:
docker buildx imagetools inspect usespitfire/spitfire:<sürüm> --format '{{json .Manifest.Digest}}'
docker buildx imagetools inspect usespitfire/spitfire:<sürüm>-collector --format '{{json .Manifest.Digest}}'ve manifest'teki image: satırlarını usespitfire/spitfire:<sürüm>@sha256:<digest> yapın.
Sürüm yükseltirken yeni manifest'i pencereden alıp kubectl diff -f spitfire-tower.yaml ile
karşılaştırın.
Kubernetes veri kaynağı
Altyapı izleme → Kaynak ekle → Kubernetes. Ön koşullardan biri eksikse pencere bunu en üstte söyler.
Manuel kurulum sekmesi: Cluster adı (ör.
prod-eu; Spitfire'da cluster'ın adı olur) ve Tower adresihttp://spitfire-tower.spitfire.svc:4318→ Kaydet.Secret komutunu atlayın:
spitfire-collectorSecret'ı Tower adımında oluştu. (Ağdaki başka bir Tower'a gönderiyorsanız komutu çalıştırın; o Tower'ınsfcol_token'ını sorar.)Manifest komutunu Kopyala ile kopyalayıp aynı terminalde çalıştırın. Tek komuttur (
kubectl apply -f - <<'EOF' … EOF); dosya kaydetmeniz gerekmez. Sonra rollout'u bekleyin:kubectl -n spitfire rollout status daemonset/spitfire-collector-node --timeout=120sTest et: "Cluster içinden toplanıyor" ise bekleyin; ilk veri 1-2 dakikada gelir.
Hızlı kurulum sekmesi de aynı işi yapar: Komutu oluştur bir saatlik, tek kullanımlık
sfsetup_ token'lı bir komut verir; betik kubectl context'ini, cluster adını, Tower adresini ve
sfcol_ token'ını sorar, var olan Secret'ı günceller ve manifest'i uygular. Token yalnız düğmeye
basınca üretilir; pencereyi açıp kapatmak geçerli bir token bırakmaz.
Doğrulama
Pod'lar
Running: birspitfire-tower, her node'da birspitfire-collector-node(ve host Collector açıksa birspitfire-collector-host), birspitfire-collector-cluster.kubectl -n spitfire get pods -o wideTower bağlandı: günlükte
connected to controllervar.kubectl -n spitfire logs deploy/spitfire-tower | grep -E 'connected|unreachable|not kept'Collector günlüklerinde
no such host,connection refused,forbiddenya da401yok:kubectl -n spitfire logs ds/spitfire-collector-node --tail=50 kubectl -n spitfire logs deploy/spitfire-collector-cluster --tail=50Spitfire'da: Tower'lar ve metrikler'de Tower Bağlı ve trafiği artıyor; Altyapı izleme'de Kubernetes kaynağı yeşil; APM → Kubernetes'te node'lar ve namespace'ler; host Collector açıksa Sunucular'da node adları.
Sık hatalar
| Görülen | Neden | Çözüm |
|---|---|---|
Her şey Running, Spitfire'da veri yok; Tower günlüğü metrics are not kept on the controller |
Sürekli metrikler kapalı | Ön koşullar: Metrikleri topla ve sakla |
Tower günlüğü controller unreachable |
Tower pod'u Spitfire'ın adresine çıkamıyor (DNS, proxy, egress NetworkPolicy) | Pod'dan adresi deneyin; cluster'ın egress kuralına Spitfire'ın adresini ekleyin |
would violate PodSecurity "restricted:latest": hostNetwork, hostPID, hostPath |
Host Collector; beklenen uyarı (warn: restricted) |
Bir şey yapmayın; namespace privileged uygular |
| Aynı uyarı host Collector dışındaki bir pod için | Eski bir manifest | Manifest'i bu sürümün penceresinden yeniden alın |
secrets "spitfire-collector" already exists |
Secret Tower adımında oluştu | Veri kaynağı adımında Secret komutunu atlayın; değiştirmek için kubectl -n spitfire delete secret spitfire-collector ve komutu yeniden çalıştırın |
namespaces "spitfire" already exists |
Namespace önceden var | Zararsız; komutun geri kalanını çalıştırın |
Warning: resource namespaces/spitfire is missing the kubectl.kubernetes.io/last-applied-configuration annotation |
Namespace önce kubectl create ile açıldı |
Zararsız, kubectl ekler |
Collector günlüğü dial tcp <node IP>:10250: i/o timeout |
kubelet'e node'un IP'siyle gidiliyor (status.hostIP, 1.4.8'den beri) ve pod ağı ona ulaşamıyor |
Pod ağından node'un 10250/TCP'sine izin verin; 1.4.8 öncesi manifest node'a adıyla gidiyordu (no such host): manifest'i yeniden uygulayın |
Collector günlüğü connection refused (10250) |
kubelet 10250'de dinlemiyor ya da node güvenlik duvarı kapalı | Pod ağından node'un 10250/TCP'sine izin verin |
Collector günlüğü forbidden |
ClusterRole ya da binding eksik | Veri kaynağı manifest'ini yeniden uygulayın |
Collector günlüğü 401 / Tower unauthorized sayıyor |
sfcol_ token'ı başka bir Tower'ın ya da Tower iptal edildi |
Secret'ı bu Tower'ın token'ıyla yeniden oluşturun |
Tower günlüğü SPITFIRE_TOWER_BUFFER_MB and _HOURS are no longer used |
Eski bir şablon; disk tamponu yok | SPITFIRE_TOWER_QUEUE_MB kullanın, manifest'i yeniden alın |
| Host Collector ConfigMap'i değişti, davranış değişmedi | Elle düzenlenmiş ConfigMap; pod şablonu değişmediği için yeniden başlamaz | kubectl -n spitfire rollout restart ds/spitfire-collector-host (üretilen manifest'te ayar özeti pod'u kendisi yeniden başlatır) |
Geri almak
Spitfire'da: Altyapı izleme'den Kubernetes kaynağını silin, Tower'lar ve metrikler'de Tower'ı İptal et. İki token geçersiz olur.
Cluster'da manifest'leri silin (ClusterRole, ClusterRoleBinding ve namespace dahil; Secret'lar namespace ile gider):
kubectl delete namespace spitfire kubectl delete clusterrolebinding spitfire-collector --ignore-not-found kubectl delete clusterrole spitfire-collector --ignore-not-foundBeklenen çıktı:
namespace "spitfire" deleted, ardından ClusterRole ve ClusterRoleBinding içindeleted. Başka bir namespace'e kurduysanızspitfireyerine onu yazın.
Geçmiş metrikler saklama süresi dolunca silinir.