我正在尋找一種模式,允許在Kubernetes中的同一個窗格上運行的兩個容器之間共享卷。如何模仿Kubernetes中的'--volumes-from'
我的用例是: 我有一個在Docker容器中運行的Ruby on Rails應用程序。 Docker鏡像在/app/<app-name>/public
目錄中包含靜態資產,我需要從同一個窗格中運行的nginx容器中訪問這些資源。
在 '香草' 泊塢窗,我會用--volumes-from
標誌來共享此目錄:
docker run --name app -v /app/<app-dir>/public <app-image>
docker run --volumes-from app nginx
讀這篇文檔後:https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/volumes.md 我想這(只推薦相關條目):
spec:
containers:
- image: <app-image>
name: <app-name>
volumeMounts:
- mountPath: /app/<app-name>/public
name: assets
- image: nginx
name: nginx
volumeMounts:
- mountPath: /var/www/html
name: assets
readOnly: true
volumes:
- name: assets
hostPath:
path: /tmp/assets
但是:
- 即使
/tmp/assets
節點上存在,它是空的 /app/<app-name>/public
應用程序容器裏面也是空的
作爲一種解決辦法,我要去嘗試填充共享目錄時,應用程序容器向上(簡單cp /app/<app-name>/public/*
到共享目錄),但我真的不喜歡這個想法。
問題:如何模仿--volumes-from
在Kubernetes,或者如果沒有直接對應的,哪能從一個容器共享文件到其他在同一吊艙運行?
apiVersion: v1beta3
Client Version: version.Info{Major:"0", Minor:"17", GitVersion:"v0.17.0", GitCommit:"82f8bdac06ddfacf493a9ed0fedc85f5ea62ebd5", GitTreeState:"clean"}
Server Version: version.Info{Major:"0", Minor:"17", GitVersion:"v0.17.0", GitCommit:"82f8bdac06ddfacf493a9ed0fedc85f5ea62ebd5", GitTreeState:"clean"}
@aronchick的答案很有價值,但您的回答最適合我的用例,所以我接受它,謝謝。 – cthulhu
我在這裏看到一些問題:1.當兩個Pod在同一個節點上運行時會發生什麼? 2.滾動更新會發生什麼?當兩個不同的pod版本在同一個節點上運行時,它們會覆蓋每個其他源。 – Alex
@Alex我只是用hostDir爲例,你可以使用emptyDIr,那麼就不會有覆蓋問題。看我發佈的要點。 – harryz