2017-06-21 36 views
0

我有一個簡單的Kubernetes部署。它由一個單獨的未複製的容器組成。沒有暴露容器的服務。該容器有一個運行狀況檢查,檢查它是否正確配置,並可以與其外部依賴進行通信。我使用kubectl apply更新部署。如何驗證Kubernetes部署的更新是否成功?

在更新部署之後,我想檢查新版本是否已完全推出並正在通過其運行狀況檢查。我無法解決如何配置我的部署來實現這一目標。

我嘗試過活性和準備就緒探測器,部署策略和就緒/進度部署屬性的各種組合。我試着檢查部署的狀態,其吊艙和轉出命令。一切都無濟於事。

我的印象是我應該查看部署條件以瞭解狀態,但我無法找到有關這些條件是什麼或如何使其生效的明確文檔。

回答

1

您還沒有提到您的部署策略。但是我在k8s部署中看到的一個普遍問題是,如果應用程序無法啓動,它將無限重啓。因此,在檢測到部署失敗狀態後,您可能必須明確地指定kubectl delete deploy/******。 (探針也有failureThreshold,但我還沒有嘗試)。

案例重新創建

您可以使用progressDeadlineSecondsreadinessProbe組合。假設您的應用程序需要60秒才能啓動/啓動。你需要配置progressDeadlineSeconds 60秒多一點,只是在更安全的一面。現在,運行kubectl apply -f my-deploy.yaml後,運行kubectl rollout status deploy/my-deployment命令。對我來說,它看起來像這樣:

12:03:37 kubectl apply -f deploy.yaml 
12:03:38 deployment "my-deployment" configured 
12:04:18 kubectl rollout status deploy/my-deployment 
12:04:18 Waiting for rollout to finish: 0 of 1 updated replicas are available (minimum required: 1)... 
12:04:44 deployment "my-deployment" successfully rolled out 

一旦執行rollout命令,kubectl將保持等到它有一些答案。此外,它返回一個適當的退出代碼echo $? - 您可以通過編程方式檢查並刪除部署。

案例rollingUpdate

如果你有多個副本,那麼上面提到的技巧應該工作。 如果您只有一個副本,請使用maxUnavailable: 0maxSurge: 1以及上述配置。

+0

「kubectl部署狀態deploy/my-deployment」將檢查最新部署。是否可以選擇剛剛觸發的部署? – yogiginger

+0

@Amrit Bera獲得展示狀態退出代碼似乎不是一個可擴展的解決方案,因爲它只會在成功部署最新部署並完全移除舊部署時纔會成功推出。因此,很難獲得正確的超時值這個。你有什麼更好的解決方案?我現在面臨這個問題。 –

相關問題