W Kubernetesie są trzy rodzaje próbkowania: liveness (czy żyjesz? Jak nie to restart według ustalonej polityki restartPolicy), readiness (czy jesteś gotowy na obsługę ruchu? Jak nie to nie będę do ciebie kierować ruchu) i startup (czy wystartowałeś), które mają swoje konfigurowalne parametry. Takie próbkowanie można zrealizować na trzy sposoby: przez zapytanie HTTP, sprawdzenie połączenia TCP lub uruchomienie odpowiednio zdefiniowanej komendy wewnątrz kontenera.
Chciałem was zapytać jak rozróżniać i czy rozróżniać *liveness *i *readiness *dla serwisów, które komunikują się tylko i wyłącznie przy pomocy kolejek? Załóżmy, że taki serwis ma dwie repliki i wystawia endpoint /health po HTTP i będziemy go odpytywać w ramach próbkowania. Czy dla takiego serwisu, gdzie obsługiwany ruch nie jest rozdzielany przez LB (a dalej chcemy robić rolling deployment), jest jakiś powód aby rozróżniać liveness od readiness? Czy jest sens definiować wtedy jednocześnie i liveness i readiness, jeśli niezdefiniowane domyślnie przyjmują wartość Success? Dla readiness preferowalibyście sprawdzenia typu smart (zanim uznam cię za gotowego na obsługę ruchu to sprawdzę czy masz połączenie z kolejką lub z innymi zależnościami) czy typu dumb (sprawdzę tylko czy jako aplikacja odpowiadasz, czyli w sumie zrobię to samo co przy sprawdzeniu liveness)?
Jeśli odpowiedź: "to zależy", to od czego?
Podobnie dla serwisów, które wystawiają API tylko HTTP? Sprawdzacie przed ogłoszeniem, że jesteście gotowi na obsługę ruchu poprzez sprawdzenie połączenie do bazy danych albo tego czy możecie nawiązać połączenie z innym serwisem, z którym gadacie?
Jak konfigurujecie te próbki w waszych serwisach, które rozwijacie?