Kubernetler Hazırlık ve Yaşama Probları - En İyi Uygulamalar

Unplash'ta Anten'den “resme bakan kişi”

Kubernet'lerde, baklalar oluşturulabilen ve yönetilebilen en küçük konuşlandırılabilir bilgi işlem birimidir. Bir bölme, paylaşılan depolama / ağ ve kapların nasıl çalıştırılacağına ilişkin bir belirtime sahip bir veya daha fazla konteyner grubudur (Docker, roket vb.).

Hazırlık ve Yaşama Probları, Kubernetes bağlamında Sağlık Kontrollerinde genel olarak adlandırılabilir. Konteyner probları, periyodik olarak çalışan küçük işlemlerdir. Bu probların (Başarı, Başarısız veya Bilinmeyen) sonucu, kabın durumuna ilişkin Kubernetes perspektifini belirler. Onlara dayanarak, Kubernetes esnekliği, yüksek kullanılabilirliği ve daha uzun çalışma süresi sağlamak için her bir kabın nasıl işleneceğine karar verir.

Sağlık kontrolleri herhangi bir dağınık sistem için bir gerekliliktir!

Kubernet'lerin sağlık kontrolü:

Kubernet'ler iki tür sağlık kontrolü sunar: hazırlık ve canlılık ve her ikisinin de kendi amaçları vardır. Bu makale bağlamında seçecektir:

  • /.well-known/live - HTTP canlı probu için
  • /.well-known/ready - HTTP hazır sondası için

Birkaç kelimeyle, HTTP araştırması, Kubernet'lerin /.well-known/live ve /.well-known/ready adreslerinde HTTP Get isteklerini belirli zaman aralıklarında gerçekleştirdiği anlamına gelir. Cevabın durum kodu, kapsülle ne yapılması gerektiğine karar vermek için kullanılır. Durum kodu [200, 300) aralığındaysa, her şey yolunda demektir. Aksi takdirde:

  • canlı probun durum kodu 4xx veya 5xx ise, modül yeniden başlatılır
  • Hazır sonda için durum kodu 4xx veya 5xx ise pod sağlıksız olarak işaretlenir ve güvenilirliği ve çalışma süresini artırmak için artık HTTP trafiği yönlendirilmez.
Konteynırlar herhangi bir destek hizmetinden bağımsızsa, konteynırlar aynı işleyiciye maruz kalan canlılık ve hazırlık kontrollerine sahip olabilir ve aşağıdakiler geçerli değildir.

Metro Systems Romanya - Site Güvenilirlik Ekibi'nden takım arkadaşlarımızla birlikte, Sağlık Kontrolleri için en iyi uygulamaların bir listesini belirledik ve uygulama geliştiricilere bunları takip etmelerini tavsiye ettik. Bu en iyi uygulamalar:

  1. Canlı ve Hazır işleyicilerin bağımsız işlevler olması gerekir!

Daha önce belirtildiği gibi, bir Kubernetes bağlamında dağıtılan her ürün için, “canlı” ve “hazır” için HTTP çağrılarına cevap veren 2 işleyici uygulanmalıdır. Bu problarla ilgili ilk en iyi uygulama, her işleyicinin kendi işlevini yerine getirmesi gerektiğidir.

2. Uygulamanızdan “canlı” / “hazır” mantığını ayırmayın!

Bu iş işleme uygulamaları için geçerlidir. Kubernet'ler için işleme uygulamasının çalışıp çalışmadığını bilmek önemlidir. Canlı / hazır mantığı yeni bir işlemde çözülmüşse, sonuç kesin değildir.

3. “Canlı” işleyicide herhangi bir mantık uygulamayın. Ana iş parçacığı çalışıyorsa durumu 200 ve değilse 5xx döndürmesi gerekir.

Bu prob Kubernet'lere, uygulamanın canlı mı yoksa ölü mü olduğunu bildirir. Karar /.well-known/live için durum kodunu kontrol ederek verilir ve başvuru ölü ilan edilirse, Kubernetes kapsülü yeniden başlatır. Güvenilirlik bakış açısına göre, uygulamanın ana ipliği çalışır durumda ve çalışır durumda değilse ve yanlışsa, canlı proba verilen yanıtın doğru olması gerekir.

Bu bağlamda, “mantık”, birbirine bağlı servisler üzerinde bir tür kontrol uygulamak anlamına gelir.

4. Uygulamanın hazır olma durumu hakkında tam bir cevap sunmak için "hazır" işleyicide mantığı uygulayın.

Hazır sonda, Kubernetes'in kapsülün HTTP trafiğini almaya hazır olup olmadığını bilmesini sağlar. Bir geliştirici olarak, uygulama için tüm arka uç bağımlılıklarınızın kullanılabilirliğini kontrol etmek için bazı mantıkları uygulamak önemlidir. “Hazır” uygulayıcısı uygulandığında, uygulamanız için hazır olanın gerçekten ne anlama geldiğini açıkça bilmek çok önemlidir. Başka bir deyişle, "hazır" işleyicide, uygulamanın almaya hazır olduğunu ve https isteklerini işleme hazır olduğunu belirleyen tüm adımları uygulamak önemlidir. Örneğin, uygulamanın HTTP isteklerini işlemeye hazır olması için bir veritabanına bağlantı kurması gerekiyorsa, veritabanına bağlantının kurulup kullanılmaya hazır olup olmadığını kontrol etmek için hazırlık sondası esastır.

Belirli bir durumu ele alalım: uygulama, ayrı bir iş parçacığında işlem yaparken sıkışıyor ancak ana iş parçacığı iyi çalışıyor. Bir geliştirici olarak, bir pod yeniden başlatmanın sorunu çözeceğini biliyorsunuz ve Kubernet'leri sizin için otomatik olarak yapmaya ikna edebilirsiniz. Yapmanız gereken tek şey, uygulamanın hazır prob üzerinde 5xx ile yanıt verdiğinden emin olmak ve canlı probu Kubernetes aramalarında minimum 5xx yanıtı geri göndermeye zorlamaktır. Bu durumda, Kubernetes öldüğü için podu yeniden başlatır.

5. Hazır işleyicide uygulamanın hazır olma durumunu yeniden kurmaya çalışmayın. Bu sadece hazır hale getirmek için değil, uygulama hazır olup olmadığını kontrol etmek için yapılır.

Hazırlık durumunu yeniden kurmaya çalışan bir mantık bulunmaması tavsiye edilir. Böyle bir mantığa sahip olmak, sistemin bileşenlerinden bazıları için tehlikeli olabilir.

Sonuç:

Canlı ve Hazır problar, Kubernet'lerde dağıtılan uygulamaların kalbi ve ruhudur. Hiper yönetici ile iletişim kurmanın ve durumları ve sorunları hakkında konuşmanın standart yollarıdır. Canlı ve hazır problar, uygulamanın güvenilir ve esnek olmasını sağlamak için bir geliştiricinin ve bir uygulamanın ihtiyaç duyduğu güçlü silahlardır.

Ionut Ilie'ye özel teşekkürler. Bu malzemenin bir kısmı onun araştırmasının ve bilgeliğinin sonucudur.