2017-09-02 55 views
1

我正在開發使用Spring服務和OpenShift部署它。目前,我正在使用Spring Actuator健康端點作爲Kubernetes的生存和準備探測。Kubernetes - 活性與準備探頭實現

不過,我會打電話添加到另一個服務於一體的致動器的健康終點,它看起來對我來說,在這種情況下,我需要實現新的活躍度探頭爲我服務。如果我不這樣做,那麼第二項服務中的失敗將導致活性探測失敗失敗,並且Kubernetes將在沒有任何實際需求的情況下重新啓動我的服務。

那是正確的,對於活躍度探頭,實現一些簡單的REST控制器,它總是返回HTTP狀態200?如果有效,該服務總能被視爲活着?還是有更好的方法來做到這一點?

+0

你是什麼意思與「我將在執行機構的健康端點的呼叫添加到另一個服務」?每個健康端點只應提供有關*本身*的信息,而不是其他服務。 – user3151902

+0

情況是,如果第一個依賴的第二個服務不起作用,那麼第一個服務也不起作用。 – dplesa

+0

這不是Kubernetes的意圖。正如我所說的,健康/活力探針應*只*檢查特定服務。我同意這麼隨意的答案,總是返回200可能掩蓋真正的錯誤與服務。 – user3151902

回答

3

活躍度探頭

僅包括您認爲這些檢查,如果失敗,將得到與吊艙重啓治癒。有一個總是返回一個HTTP 200的新端點沒有任何問題,它將作爲活動探測端點;前提是您擁有獨立的監控,並且已爲您的首個服務所依賴的其他服務提供警報。簡單的http 200 liveness有什麼用處?那麼,讓我們考慮這些例子。

  1. 如果你的應用程序是一個基於非反應性線程的應用程序(基於servlet的應用程序 - 如應用在Tomcat上運行 - 這是春天開機1.X的默認選項),在的情況下,重載它可能變得沒有反應,並且一個重新啓動將會有幫助。

  2. 如果你配置的內存沒有,而你開始你的應用程序;在重載的情況下,應用程序可能會超出吊艙分配的內存,並且應用程序可能無響應,然後吊艙重新啓動將有所幫助。

準備探頭

有兩個方面給它。

1)讓我們假設您的第二個服務和第一個服務(您的健康狀況檢查所在的位置)啓用的身份驗證必須正確配置,才能與第二個服務進行身份驗證。我們只需要說,在隨後的部署中,你搞砸了你應該從configmap或secret讀取的authheader變量名。你正在進行滾動更新。如果您的第二個服務的http200也包含在運行狀況檢查中,那麼這將防止部署的錯誤版本上線;您的舊版本將繼續運行,因爲您的新版本將永遠不會通過健康檢查。我們甚至可能不需要爲認證而煩惱,我們只需說第二個服務的URL在第一個服務中是硬編碼的,並且在第一個服務的後續版本中搞砸了這個URL。在您的健康狀況檢查此附加檢查將阻止車版本無法上架

2)在另一方面,讓我們假設你的第一個服務具有許多其他功能和第二個服務是下來了幾個小時將不會影響第一項服務提供的任何重要功能。那麼,您當然需要從第一個服務的運行狀況檢查中排除第二個服務的活躍度。

無論哪種方式,您需要設置正確的警報和監視兩種服務。這將有助於確定人類何時應該進行干預。

我會做什麼(忽略其他不相關的細節),

readinessProbe: 
    httpGet: 
    path: </Actuator-healthcheck-endpoint> 
    port: 8080 
    initialDelaySeconds: 120 
    timeoutSeconds: 5 
livenessProbe: 
    httpGet: 
    path: </my-custom-endpoint-which-always-returns200> 
    port: 8080 
    initialDelaySeconds: 130 
    timeoutSeconds: 10 
    failureThreshold: 10 
+0

是的,我完全理解這些情況。然而,我主要關心的是活躍性探測,如果可以將其作爲簡單的REST控制器來實現,它將始終返回HTTP狀態200. – dplesa

+0

@dplesa ..道歉!我更新了我的答案。 –