Kubernetes ile Mikro hizmette Logging için Singleton Desenini Uygulamayın
Table of Contents
Giriş: Mikroservices'teki Neden Logging Maddeleri
Modern mikro hizmet mimarilerinde, giriş, gözlemlenebilirliğin arka kemiğidir. Bir koherent giriş stratejisi olmadan, dağıtılmış bir başarısızlık, dağınık zaman izlerinin kabusu haline gelir, eksik bağlam ve yanlış biçimler sunar.
Bu makale orijinal konsepte genişletir, uygulama detaylarına derin bir şekilde daldırır, ticaret-offs ve en iyi uygulamaları. Kubernetes'te tekton log hizmeti nasıl tasarlayacağınızı keşfedeceğiz, neden işe yarayabilirsiniz ve sonunda, mikro hizmet filonuzda birleşik bir giriş yapmak için açık bir yol haritasınız olacak.
Singleton Design Desen: Hızlı Bir Yenileme
Tekton modeli bir sınıfı tek bir örnekle kısıtlar ve her hizmetten gelen her girişin aynı hedefe ulaşması, yapılandırma, iplik havuzları veya - burada odaklandığımız gibi - kayıt. mikro hizmet bağlamda, tekton giriş örneği, her bir servisten gelen girişin aynı varış noktasına doğru gitmesini ve bir hata mantığın düzeltilmesini sağlar.
Eleştirmenler genellikle tektonlara karşı uyarır, çünkü küresel durumu ve gizli bağımlılıkları tanıtırlar. Ancak, devletsiz bir giriş boru hattına uygulandığında, dezavantajları dışlıyoruz.
Logging Challenges Benzersiz to Microservices
Geleneksel monolithic log disk üzerinde tek bir dosyaya yazar. Mikroservices bu basitliği parçaladı. İşte tekton yaklaşımıyla çözmeyi amaçladığımız temel zorluklar:
- [FONT:0)Log parçalama[[Dönetici:0)[[[Dönetici:0)[[FONT:0))[[[[[FONT:0)Log parçalama[[[[FONT][FONT][/FONT=0)) – Her hizmet kendi günlüklerini, genellikle yerel depolama veya stdout'a yazar, çapraz hizmet kanalı zor hale getirir.
- [FONT:0]Inconsistent formatlar[[Dönler: 1 ) – Takımlar farklı günlük kütüphaneler, çıkış stilleri (JSON vs. düz metin) ve fiiloity seviyeleri kullanabilir.
- [FONT:0) Basitleştirilmiş bir hacim[Dönemli 1] - onlarca veya yüzlerce hizmet örneği ile, merkezi kontrol olmadan göksel ve depolama maliyetleri gökselleşmeye giriş yapın.
- [[Dönetici korelasyon[[[Dönetici:0)Context korelasyon[[[Dönetici:0)[[[Dönetici: Tek bir kullanıcı isteği birden fazla hizmette umut edebilir; loglar zinciri yeniden inşa etmek için korelasyon kimliklerini taşımalıdır.
- [FONT:0]Operasyonel karmaşıklığı[Dönetici: 1) - Toplayıcı, aggregating ve Kubernetes gibi olgun olmayan bir ortamdaki günlükleri sorgulayın.
Tekton giriş modeli doğrudan parçaya hitap eder ve tüm logları tek standart bir boru hattı aracılığıyla eğlenceli hale getirir. Kubernetes'te, bu boru hattı yönetilebilir bir birim haline gelir: tek bir Pod veya Servis.
Kubernetes'te Singleton Logging Servisi
Kubernetes tekton log ajanını çalıştırmak için birçok yol sunar. En basit şey, yuvarlanma veya ağ bölümleri sırasında farklı düğümler için planlanan birden fazla örneği kapsamalıdır.
Seçenek 1: Merkezileştirilmiş Singleton Aggregator (Deployment)
Belirli bir günlük aggregator - örneğin, Fluentd, Logstash veya özel bir hizmet - tek-repli bir iş arama olarak, HTTP'ye veya bir yankar aracılığıyla, gRPC'ye veya aggregator parslar, zenginler ve uzun vadeli bir depolamaya girişler gönderiyorlar (Elasticsearch, Loki, CloudWatchlar).
Bu model, tek bir başarısızlık noktası ve bir şişenck'ı azaltmak için, tekton çökerlerini yerel olarak gömmek ve Kubernetes canlılığı / hazırlığı prototiplerine güvenmek, sadece başarısızlıkta aktif olarak rol oynayan ikinci bir standby pod ile - bu tekton konseptini tekrarlıyorsa.
Seçenek 2: Sidecar-Per-Service with Shared Forwarder
Doğrudan giriş gönderme hizmetleri yerine, her hizmet pod bir yankar konteyner (örneğin, hafif bir Fluent Bit) bu kuyruklar ana konteynerin girişlerini ve gemilerini tekton aggregator'a taşır. Bu de çiftler iş mantığından formatlandırır ve per-pod tamponlama sağlar.
Seçenek 3: DaemonSet Node Level - Anti-Singleton?
KubernetesurFLT:0)DaemonSets[Döneticileri 1 ), merkezi bir depolama için standart bir yaklaşımdır (örneğin, akıcı bir şekilde-daemonset, akıcı-daemonset).Bir tekton (birçok düğümün her biri bir kopyasının olduğu için), bir alt tabakaya kadar, bir tekton katmanına kadar bir araya gelmemelidir.
Merkezileştirilmiş tekton aggregator yaklaşımına odaklanacağız çünkü en iyi tek bir mantıksal log lavaboyu uygular.
Kubernetes'te Singleton Davranışı
Kubernetes, küme başarısızlıkları arasında bir iş için maksimum Pod çalışan bir kişi uygulamaz - eğer bir düğüm ölürse, Pod başka bir düğümde yeniden yaratılır, ancak bu geçiş sırasında, iki Pods'un kısa sürede tekton davranışını garanti altına alabilir, bu tekniklerin bir veya daha fazlasını uygulayın:
- [FONT:0)Pod Anti-Affinity[[DÜT:1) – A kota veya lider seçimle bir araya gelmenin iki ayağını aynı düğümde çalıştırmasını engellemek için.
- [FONT=0]Lease or Leader Selection[Döneticileri 1 ) – Bir Kubernetes Lease nesnesi (Üye ait API) bir potansiyel tekton pods seti arasında bir lider seçmek için. Liderin kiralama süresine kadar pods blok.
- [FONT:0]Pervertistent Volume Talep[Dönetici:0)[Dönetici:0)Işıkçı bir yığın, tek bir kopya ile bir araya gelme ve bir PVC, yalnızca bir pod'un veri hacmine yazabileceğini garanti eder.Eğer iki podyum, ikincisi de PVC'yi bağlamayı emreder.
- [FONT:0)Müşteri Operatör) - Tek bir giriş kaynağı yönetmek, aktif olarak aşağı ölçeklendirmek veya ekstra pods öldürmek için aşırı uç.
Uygulamada, oturum açma için, canlılık kehanetleri ile tek bir iş birliği ve tekton hazır olduğunda sadece tektonun hazır olması yeterlidir.Eğer kümeniz HAFTAT:0)PodDisruptionBudgets), setFLT:4'ı tektonun gönüllü ev ödevlerini önlemek için hazır hale getirir.
Uygulama Adım-Adım: Singleton Fluentd Aggregator
Tekton aggregator olarak Fluentd kullanarak beton bir uygulama üzerinden yürüyelim. Fluentd sağlam Kubernetes desteği ile popüler bir açık kaynak veri toplayıcısıdır.
1. Bir Fluentd Konsülü oluşturun
Bir limanda dinleyen bir ConfigMap (örneğin, 98808080) mikro hizmetlerden gelen girişler için onları Elasticsearch veya başka bir geri dönüş için ileri sürün.
apiVersion: v1
kind: ConfigMap
metadata:
name: fluentd-config
data:
fluent.conf: |
<source>
@type http
port 9880
bind 0.0.0.0
body_size_limit 32m
keepalive_timeout 10s
</source>
<match **>
@type elasticsearch
host elasticsearch-logging
port 9200
logstash_format true
flush_interval 5s
</match>
2. Singleton Deployment with Anti-Affinity ile iş birliği tanımlamak
apiVersion: apps/v1
kind: Deployment
metadata:
name: fluentd-singleton
spec:
replicas: 1
selector:
matchLabels:
app: fluentd-singleton
template:
metadata:
labels:
app: fluentd-singleton
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- fluentd-singleton
topologyKey: kubernetes.io/hostname
containers:
- name: fluentd
image: fluent/fluentd:v1.16-1
ports:
- containerPort: 9880
volumeMounts:
- name: config
mountPath: /fluentd/etc
volumes:
- name: config
configMap:
name: fluentd-config
Bu anti-affinity aynı düğümde koşmaktan iki pods engeller, ancak farklı düğümlere engel değildir. Daha güçlü garanti için, bir liderlik kiralama ekleyin.
3. Singleton'ı Headless Service aracılığıyla Expose
Bir kafasız hizmet, DNS tur-robin'in pods'a izin verir, ancak sadece bir uç noktası istiyoruz. Standart bir ClusterIP hizmeti kullanın:
apiVersion: v1
kind: Service
metadata:
name: fluentd-svc
spec:
selector:
app: fluentd-singleton
ports:
- port: 9880
targetPort: 9880
Mikro hizmetler, logları 5'e gönderebilir.
4. Logs Gönderme Mikro hizmetleri
Her mikro hizmet, kayıt /st ( Kubernetes yolu) için yazılmalıdır. Uygunluk için bir yan aracı seçin ve bunları tekton Fluent hizmetine gönderir. Alternatif olarak, uygulama kendisi doğrudan bir HTTP logu ile yapılandırabilir.
Örnek sidecar konteyner tanımı aynı pod:
containers:
- name: app
image: myapp
...
- name: fluentbit-sidecar
image: fluent/fluent-bit:latest
args: ["-c", "/etc/fluent-bit.conf"]
volumeMounts:
- name: varlog
mountPath: /var/log
env:
- name: FLUENTD_HOST
value: "fluentd-svc"
- name: FLUENTD_PORT
value: "9880"
Fluent Bit yapılandırması, uygulamanın günlük dosyasını kuyruğunu döndürür veya Docker'in günlük sürücüsünden okur, sonra tekton'a doğru ilerler.
Deeper Dive için dış referanslar
Kubernetes'te kapsamlı bir giriş anlayışı için, resmi olarak [[Dönetici:0)Kubernetes Logging Architecture) için Fluentd specifics, [[Şamp:2)Fluentd belgeleri[Döneticileri kullanarak, kiralamaları ve eklentileri tercih ederseniz [Elasticsearch, Fluentd, Kibana)[T:4)Kubernetler ekspert.[FLT|D)
Singleton Logging (Expanded)
- [FONT=0)Demeksiz bir günlük format[[Dönemli: 1)[Dönemli)[[[Dönemli)[[[[Dönemli))[[[[[[[[[[Dönemli))))
- [FONT:0) Basitleştirilmiş uyumluluk[[[Dönetici: 1) Merkezileştirilmiş günlük tutma politikaları tüm filo boyunca uygulanması daha kolaydır.
- [FONT:0) Alçakgömürücü altyapı maliyetleri[Dönetici:0)[Dönetici:0) Düşük altyapı maliyetleri) - Her hizmet kendi günlük gemisini çalıştırıyor (kendi tampon ve depolama ile), tekton bir kovalama ile, azaltma, kesmeyi ele geçiriyor.
- [FONT:0]Easier debugging[[Döntgen: 1) Soru sormak için bir yer. seçmek istemiyorsanız birden çok kaynaktan giriş yapmanız gerekmez.
- [FONT:0]Konsistent log seviyeleri[[Dönetici: 1 ) – Tekton küresel log seviye eşlerini (örneğin, sadeceFLT:11) ve üretimde yukarıdakiler veya korelasyon kimlikleri otomatik olarak uygulayabilir.
- [FONT:0]Kaynak izolasyonu[[Dönetici:0)[[Dönetici:0))[[[Dönetici:0))) – Tekton pod, yüklemeyi işlemek için yeterli CPU/memory'ye sahip olabilir, uygulama pods'un bağımsız.
Ticaret-offs ve Singleton Loggingten Kaçmak
Hiçbir mimarlık mükemmel değildir. Singleton log birkaç mağara tanıtıyor:
- [FONT=0) Tek bir başarısızlık noktası [Dönetici: 1] – Tekton pod ölürse, loglar kaybolur (müşteri tarafında tamponsuzsunuz). yüksek-tavuş ortamlarda, hatta birkaç saniye bile binlerce günlük çizgiyi bırakabilir.
- [FONT=0)Bottleneck kapasitesi) - Tek bir Fluentd örneği tüm günlük trafiği ele almalıdır. (günde gigabaytların yüzlerce), Kafka gibi bir aggregator ölçeklendirmek veya tekton kalıbını kırmak gerekir.
- [FONT:0) Ağ Geçim[Dönetici[Dönetici:0)[BİLMİŞKİNCİYLEMLER: 0 ) Ağa Geçme[Dönetici[DÜye Olmayanlar İçindekiler)
- [FONT:0] Gerçek tektonun [Dönetici:0]Complexitesi [Dönetici:0) Gerçek tektonun [Düzücük: 1) Achieving tam olarak bir başarısızlık koşulu altında çalışan bir örnek (gösterme, yuvarlanma, bölünmüş-brain) lider seçimi veya dış kilitleme gerektirir, operasyonel yük eklemek.
- [FONT:0]Limited esneklik[[DDev vs. Prod veya deneysel hizmetler) tekton çok sert bulabilir.
Kümeniz 20-50 düğümün ötesine büyürse veya tek bir pod'un ne işe yarayabileceğini aşırsa alternatif desenler göz önünde bulundurun.TheETHFLT:0)DaemonSet + Centralized Storage), büyük kümeler için de facto endüstri standardıdır. küçük bir araçta güçlü bir tutarlılığa ihtiyacınız olduğunda, küçük seviyeli bir mikro hizmet filosuna veya hala eğlenceli bir koleksiyoncuya tamamlayıcı olarak, küresel sorgular için tek bir tek bir aggregatora.
Singleton Logging için en iyi uygulamalar
Uygulamadan Yapılı Logging
Tüm hizmetleri, sabit alanlarda (JSON) bir yapılandırılmış formatta (JSON) yayılabilir: 03.03.2012, [[Dönemli, [[Dönemli, s.) veya s.
Buffer Locally, Singleton Outages'ı Hayatta Kalmak için
Yankar Fluent Bit, disk tamponlama sağlar.Konfigure aİLDİT:20.||||||||s.)||s.|s.|s.
Singleton'ın Sağlığını Takip Etmek
Tekton için Prometheus metrikleri ayarlayın (örneğin, işleyici olayların sayısı, hata oranı, tampon boyutu).Buffer doldurmayı veya tekton oturum açmayı durdururken uyarılar oluşturun.Use KubernetesurDesurf:24 are applied for a singleton, but dikey pod autoscaling (VPA) can adjust resources.
Implement Retry ve Backpress
Giriş boru hattı yeniden baskıyı özenle idare etmelidir. Tekton boğulursa, 429 Çok fazla İstek ve müşteri (veya yancar) üst üste üst üste üst üste binmelidir. Aksi takdirde, tekton paketleri veya kazayı yük altına alabilir.
İngress
Tekton servisi sadece küme içinde (ClusterIP) dışsal olarak ortaya çıkarsanız, AğPolicies ile kısıtlayın ve TLS'yi günlük ulaşım için kullanır. Fluentd TLS girişini 444 ile destekler.
Gelişmiş Desenler: Buffer Katmanlı ile Devletsiz Singleton
Şişenin kaygısını aşmak için, Kafkas gibi bir tamponlama katmanı eklemeyi düşünün:0)Kafka) veya [[Dönetici)Redis), tüketicinin ön kısmında tekton kalırken, Kafkaslar (veya yankarlar) Kafkaslar Kafkas'ı korumak için tek bir mantıksal oturumdan yararlanırlar.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Kubernetes ile mikro hizmette giriş için tekton kalıbının uygulanması, temiz, tutarlı ve yönetilebilir bir giriş boru hattının orta ölçekli kümesleme için merkezileştirilmesi, parçalanmayı azaltın, üniforma formatını azaltır ve sorun gidermeyi gerektirir. ancak, kullanılabilirliğe dikkat edin, lider seçimi ve kaynak ölçeklendirmesi gerekir.Birçok takım için, tekton kalıbı tam bir başlangıç noktası olarak kümeslenerek kümesbütün bir kayıt defterini haklı çıkarmak için yeterince büyük bir başlangıç noktası olarak hizmet eder.
Giriş hacminizi, başarısızlık toleransını ve takım uzmanlığınızı değerlendirme zamanı alın. Tekton Fluentd aggregator ile başlayın, sonra bir DaemonSet tabanlı koleksiyoncuya ihtiyaçlarınızla merkezi bir lavaboyu genişletin.