2017-03-02 236 views
0

我有一個全功能的Kubernetes集羣,有一個主人和一個工人,運行在CoreOS上。如何將文件導入pod?

一切正常,我的豆莢和服務運行良好。現在我不知道如何在Web服務器的想法進行。

在我走得更遠之前:我目前沒有配置關於我想要解釋的想法。我只是做了很多研究。

使用服務設置窗格(nginx)時。你會得到默認的nginx頁面。之後,您可以使用hostvolume(從主機到容器的卷映射)設置安裝卷。

但讓我們說我想分離每個網站(多個網站用不同的豆莢分開),我怎麼讓我的用戶添加文件到他們的pod/nginx文檔根目錄?在CoreOS節點中使用FTP將刪除Kubernetes方法並增加安全漏洞。

如果有人能幫我解釋一下這個問題,那就太好了。

謝謝你的時間。

回答

1

我假設你想要運行多個nginx服務器。每個nginx服務器的內容由不同的管理員管理(你稱之爲用戶)。

TL; DR:

選項1:每個管理員需要每一個靜態文件更改時間來建立自己的碼頭工人nginx的形象和部署新形象。這就是,如果你認爲這些靜態文件nginx的應用

選項2的源代碼的一部分:使用持久卷的nginx中,init腳本的nginx的圖像應該使用類似S3來將其所有文件與s3同步,然後啓動nginx


在繼續使用kubernetes構建應用程序之前。最重要的是將你的服務分成2個概念類別,並放棄你直接觸摸底層節點的願望:

1)無狀態:這些是由開發人員構建並可以發佈的服務。它們可以停止,啓動,從一個節點移動到另一個節點,它們的文件系統可以在重啓過程中重置,並且它們可以很好地工作。大部分的網絡服務都適合這個類別。

2)有狀態:這些服務無法像上面那樣停止並重新啓動。首先,它們的底層文件系統必須是持久的,並且在服務運行期間保持不變。數據庫,文件服務器和類似的服務都屬於這一類。這些需要特別小心,應該使用k8s persistent-volumes,現在stateful-sets

典型應用:

  • nginx的:建立Nginx的。CONF入搬運工圖像,並將其部署爲無狀態服務
  • 導軌/的NodeJS /蟒服務:構建源代碼到搬運工圖像,與ENV-VARS配置,部署爲無狀態服務
  • 數據庫:安裝一個持久卷,配置env-vars,部署爲有狀態服務。

單獨的網站:

  • 通常情況下,我認爲在K8S部署和K8S服務水平。每個站點可以是一個k8s部署和k8s服務集。然後,您可以有不同的方式來揭露他們(不同的外部DNS/IPS)

應用程序用戶存儲文件:

  • 這是牢牢地掌握在有狀態服務的範疇。使用持久卷掛載到/媒體類型目錄的

開發者修改文件:

  • 說開發人員或管理員需要使用FTP來改變nginx的服務的文件。正確的模式是用新文件構建Docker鏡像,然後使用該Docker鏡像。如果文件太多,並且您不認爲這些文件是nginx的「源代碼」的一部分,那麼請使用類似s3和持久性卷的文件。在你的docker image init腳本中,不要直接啓動nginx。聯繫s3,將所有文件同步到永久捲上,然後啓動nginx。
1

雖然由iamnat列出的選項和推理是正確的,但至少還有一個選項可以添加到列表中。您可以考慮使用ConfigMap對象,在configmap中維護您的文件並將它們裝載到容器中。

一個很好的例子可以在官方文檔中找到 - 檢查Real World Example configuring Redis部分以獲得一些可操作的輸入。