2016-11-22 53 views
0

我有一個網絡服務器(NGINX)和使用的WebPack生成最終靜態源反應爲基礎的前端的設置。如何處理重複短暫的任務,Kubernetes

網絡服務器有自己的kubernetes deployment + service

在Web服務器可以提供靜態html/js/css文件之前,需要先構建前端 - 但在此之後,pod/container可以停止。

我的想法是共享網絡服務器和前端pod之間的volume。前端將生成的文件寫入volume,網絡服務器可以從那裏爲它們提供服務。每當前端源代碼更新時,都需要重新生成文件。

什麼來完成,使用kubernetes工具的最佳方式? 現在,我使用的是init-container建設 - 但是這會導致Web服務器pod的重啓,以及,這不會是neccessary。

這是最好的/唯一的解決這個問題,或者我應該使用kubernetes' jobs這類任務的?

回答

1

有多種方法可以做到這一點。以下是我想一想:

選項1:靜態文件代表建源代碼

在這種情況下,要服務於靜態文件實際上應包裝和建成的碼頭工人形象你的nginx web服務器(在html目錄下說)。當你想更新你的前端時,你更新使用的圖像版本並更新窗格。

選項2:靜態文件代表國家

在這種情況下,你的做法是正確的。你的「狀態」(如數據庫)存儲在一個文件夾中。然後運行一個init容器/作業來初始化'state',然後你的webserver pod工作正常。

我相信選擇1至2個原因是更好:

  1. 您可以水平通過增加莢果數副本平凡擴展您的網絡服務器。在選項2中,您實際上正在處理狀態,因此當您想要將更多節點添加到基礎k8s羣集時(您必須將文件/文件夾從一個卷/文件夾複製到另一個)時,就會出現問題。
  2. 靜態文件實際上是您的應用程序的源代碼。這些不是上傳的媒體文件或類似的。在這種情況下,使它們成爲你的碼頭圖像的一部分是絕對有意義的。否則,它會挫敗集裝箱和部署的優勢。
+0

對於選項2:init-container或job?什麼是更好的工具?每當源代碼發生變化時,我可以創建一份作業嗎? – pkyeck

+0

init-container僅在您第一次創建部署時有用。既然你想保持一個靜態的服務器運行,那麼修改特定音量的作業就更好了。 – iamnat

1

喬布斯初始化容器,或者一個gitRepo卷會爲你工作。

http://kubernetes.io/docs/user-guide/volumes/#gitrepo

爲什麼你想不只是重新部署到更新的靜態內容/更新波德這不是你的問題清楚。

由於某處,不知何故,你必須建立Web服務器多克爾圖像,似乎打造的靜態內容到圖像:無運動部件一旦部署,無需卷或存儲。總的來說它更簡單。

如果你使用任何類型的自動化工具對碼頭工人建立,這很容易。 我個人使用詹金斯建立基於從git倉庫鉤多克爾圖像,並且該圖像被簡單地重建和部署每當代碼更改。

運行工作初始化容器不會獲得你多少:確保Web服務器保持運行,但它是那麼容易有部署與滾動更新,這將之前部署新波德舊的一個被拆掉,你的服務器也會一直啓動。

保持簡單...

+0

我不想每次重建web服務器容器的靜態內容的變化,因爲服務器還進行代理其他請求如API – pkyeck

+0

K8s試圖緩解頻繁的更新風格部署。您可以向靜態服務器發出0宕機時間類型部署。所以舊服務器和新服務器將共存。然後舊的服務器將被退役。只要您的信息,你應該閱讀:http://kubernetes.io/docs/user-guide/deployments/#updating-a-deployment – iamnat