1

我想知道如何在部署中的Pod中實現一個同位置輔助容器,該部署不提供服務而是工作/批處理工作負載?Kubernetes是否提供了一個共置作業容器?

我的問題的背景是,我想部署一個可擴展的服務,每個實例啓動後需要配置。該配置通過HTTP POST完成到其本地共置服務實例。爲此我已經實現了一個輔助容器,以便從託管功能中受益。所以輔助容器總是知道哪個實例需要配置。

問題是,該restartPolicy需要在波德水平被定義。我正在尋找類似於服務的重新啓動策略always以及配置作業的其他重新啓動策略onFailure

我知道k8s爲這些工作負載提供了Job資源。但是有沒有辦法將這些工作合併到豆莢?

此外,我偶然發現了所謂的init容器,它可能是通過註釋來定義的。但是這些都有缺點,k8s確保實際的Pod只在init容器運行後啓動。所以對於我的情況來說,這似乎不合適。

回答

0

據我所知,你需要你的服務運行來配置它。

你的解決方案是可行的,你可以設置restartPolicy: always你只需要一種方法來告訴你一關,它已經運行配置容器。您可以創建卷並將其附加到您的配置容器中,在其上創建一個文件以標記配置成功,並從您的過程中檢查該文件。初始化後,您可以在循環中輸入睡眠。缺點是一些資源也會被該容器佔用。

或者你可以添加一個額外的過程在同一容器中,並做配置(可能與上面的衛兵,以避免兩次配置中提到的文件)。所以寫這樣一個簡單的shell腳本並運行它,而不是你的主要過程:

#!/bin/sh 

(
    [ -f /mnt/guard-vol/stamp ] && exit 0 
    /opt/my-config-process parameters && touch /mnt/guard-vol/stamp 
) & 

exec /opt/my-main-process "[email protected]" 

或者你可以實現一個單獨的吊艙查詢kubernetes API與標籤configured=false服務的豆莢。配置它並使用API​​刪除標籤。您還應該修改服務以選擇configured=true吊艙。

+0

非常歡迎。 –

+0

作爲網站上的新用戶,您可能會發現http://meta.stackexchange.com/questions/686/accepting-answer-without-upvoting有用 - 而不是需求或任何內容。 –

+0

感謝您花時間回答我的問題。 我的解決方法到目前爲止與您的建議相似。一次性工作通過cron運行,並在本地運行時標記。所以它的問題就解決了。 我對這種解決方案的問題是,從用戶角度來看,語義已經發生了變化。可能成功或可能沒有成功完成的單容器現在是一種始終運行的服務。所以用戶需要更多地瞭解實現細節以評估狀態,而不是僅僅檢查'kubectl get/describe pod ...' –

相關問題