Spring Boot 2.3將包括對Kubernetes liveness&readiness Probe的本地支持,擴展了2.2的“運行狀況組”支持,允許開發人員選擇運行狀況指標的子集,並將其分組為單個相關的運行狀況。
Kubernetes的活性Liveness和就緒性probes探針
在Kubernetes中,活性和就緒性Kubernetes概念代表了應用程序狀態的各個方面。
應用程序的活動狀態指示內部狀態是否有效。如果活性Liveness被破壞,則意味着應用程序本身處於故障狀態,無法恢復。在這種情況下,最好的做法是重新啟動應用程序實例。例如,如果本地緩存已損壞且無法修復,則依賴本地緩存的應用程序應失敗其活動狀態。
就緒狀態告知應用程序是否已准備好接受客戶端請求。如果就緒狀態尚未就緒,則Kubernetes不應將流量路由到該實例。如果應用程序太忙於處理任務隊列,則它可以將自己聲明為忙碌,直到可以再次管理其負載為止。
活性和就緒性將成為Spring Boot的核心概念
這些活動性和就緒性概念不僅適用於Kubernetes,而且無論部署平台如何,它們通常都非常有用。我們將介紹LivenessState和ReadinessState,它們是這些概念的不可變表示形式。您可以隨時從中獲取它們ApplicationAvailabilityProvider:
// Available as a component in the application context
ApplicationAvailabilityProvider availabilityProvider;
LivenessState livenessState = availabilityProvider.getLivenessState();
ReadinessState readinessState = availabilityProvider.getReadinessState()
您需要進行檢查以了解應用程序狀態不完整的僅輪詢模型。只有應用程序知道其生命周期(啟動,關閉),或者可以提供有關運行時錯誤的上下文(在處理任務時以中斷狀態結束)。Spring Boot應用程序上下文在應用程序的生命周期中本地發布這些事件;您的應用程序代碼也應該對此有所幫助。
這就是為什么我們選擇使用Spring Application Event模型來更改可用性狀態並監聽更新的原因:
/**
-
Component that checks that the local cache is in a valid state.
*/
@Component
public class LocalCacheVerifier {private final ApplicationEventPublisher eventPublisher;
public LocalCacheVerifier(ApplicationEventPublisher eventPublisher) {
this.eventPublisher = eventPublisher;
}public void checkLocalCache() {
try {
//...
}
catch (CacheCompletelyBroken ex) {
this.eventPublisher.publishEvent(LivenessStateChangedEvent.broken(ex));
}
}
}
組件還可以通過@EventListener(或通過實現ApplicationListener)偵聽那些事件。請查閱參考文檔以獲取更多信息。
該支持直接隨spring-boot模塊一起提供,並且為所有Spring Boot應用程序激活。這使它可用於所有類型的應用程序(Web,批處理等),並允許您實現不一定與HTTP綁定的探針。
使用Spring Boot Actuator公開Kubernetes探針
您可能會對一個非常常見的用例感興趣:在Kubernetes上部署Web應用程序並配置HTTP探針。將Spring Boot Actuator依賴項添加到您的應用程序是唯一的要求!Actuator將使用運行狀況支持來配置“ 活動性”和“就緒” HTTP探針Rest端點:"/actuator/health";"/actuator/health/liveness"和"/actuator/health/readiness"。
原文:
https://spring.io/blog/2020/03/25/liveness-and-readiness-probes-with-spring-boot
