[英]How to handle recurring short-lived tasks with Kubernetes
我有一個帶有Web服務器(NGINX)和基於React的前端的安裝程序,該前端使用Webpack構建最終的靜態源。
Web服務器具有自己的kubernetes deployment
+ service
。
在Web服務器可以提供靜態html / js / css文件之前,需要先構建前端-但是在那之后, pod
/ container
可以停止。
我的想法是在Web服務器和前端pod
之間共享一個volume
。 前端會將生成的文件寫入volume
,然后網絡服務器可以從那里為它們提供服務。 只要前端源代碼有更新,就需要重新生成文件。
使用kubernetes工具實現此目標的最佳方法是什么? 現在,我正在使用init-container
來構建-但這也導致了webserver pod
的重新啟動,這不是必需的。
這是解決此問題的最佳/唯一解決方案,還是我應該將kubernetes的jobs
用於此類任務?
有多種方法可以做到這一點。 我是這樣想的:
選項1:靜態文件代表構建的源代碼
在這種情況下,您實際上要打包的靜態文件應該打包並內置到您的nginx Web服務器的docker映像中(在html目錄中)。 當您想更新前端時,可以更新所用映像的版本並更新容器。
選項2:靜態文件代表狀態
在這種情況下,您的方法是正確的。 您的“狀態”(如數據庫)存儲在文件夾中。 然后,您運行一個初始化容器/作業以初始化“狀態”,然后您的Web服務器容器正常工作。
我相信選項1會更好的原因有兩個:
可以使用Jobs , Init容器或gitRepo類型的Volume 。
http://kubernetes.io/docs/user-guide/volumes/#gitrepo
在您的問題中尚不清楚,您為什么要更新靜態內容而不必簡單地重新部署/更新Pod 。
由於必須以某種方式在某個地方構建Web服務器Docker映像,因此似乎最好將靜態內容構建到該映像中:部署后就沒有活動部件,不需要卷或存儲。 總體而言,它更簡單。
如果您對Docker構建使用任何類型的自動化工具,都非常容易。 我個人使用Jenkins基於git repo的鈎子構建Docker映像,並且只要代碼更改,就可以簡單地重建和部署該映像。
運行Job或Init容器不會給您帶來什么好處:確保Web服務器保持運行狀態,但是通過滾動更新進行部署很容易,這種部署可以在舊的Pod拆除之前部署新的Pod ,並且您的服務器將始終處於運行狀態也起來
把事情簡單化...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.