簡體   English   中英

如何在多個 Kubernetes 容器之間共享一個 jar?

[英]How to share a jar amongst several Kubernetes containers?

我的應用程序是一個基於 Java 的應用程序,我們做了 tomcat dockerized 實現。 我們有四個應用程序並創建了四個容器。 我們有一個用於身份驗證的公共庫,並且在所有容器中,我們已將此 jar 文件移動到/lib文件夾,並且應用程序運行良好。

但是每當 jar 文件發生更改時,我們都需要構建和部署所有容器。 有沒有辦法將 jar 文件共享到 4 個容器,不需要 ys 來構建和部署所有 4 個容器,只需要更新 jar?

這就像將 tomcat lib 文件夾共享到 kubernetes 中的另一個容器,每當 jar 文件發生更改時,它們都會自動復制到所有容器。

這不是標准做法,您不應該這樣做。 此外,它在操作上很棘手。

Docker 映像通常是自包含的,並包含它們的所有依賴項,在您的情況下包括重復的 jar 文件。 在具有正在積極開發軟件的 Kubernetes 集群的上下文中,您應該確保每個圖像都有一個唯一的圖像標簽,可能是時間戳或源代碼控制提交 ID,可能由您的構建系統分配。 然后你可以用新的鏡像標簽更新你的部署; 這會觸發 Kubernetes 拉取新鏡像並重啟容器。

這意味着,如果您看到一個 pod 運行一個標記為 20200228 的映像,那么您就確切地知道其中的軟件,包括共享的 jar,並且您可以在集群外准確地測試該映像。 如果您發現出現問題,甚至可能是在共享 jar 中,您可以將部署標記更改回 20200227,以便在解決問題的同時獲得昨天的構建。

如果您以某種方式手動部署 jar 文件並將它們作為卷安裝到 pod 中,您將失去所有這些:您必須手動重新啟動 pod 以查看新的 jar 文件,如果不手動注入 jar,則無法離線測試圖像文件,如果出現問題,您需要嘗試手動還原多項內容。


就機制而言,您需要某種可以由多個 pod 並發讀取的,並且可以從集群外部寫入或由單個 pod 寫入。 PersistentVolumes的討論具有訪問模式的概念,因此您需要 ReadOnlyMany(和外部可訪問)或 ReadWriteMany 的內容。 根據您可用的環境,您唯一的選擇可能是 NFS 服務器。 這是可能的,但這是一個額外的維護部分,您必須在集群基礎架構之外自行設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM