Wie man "Volumen" von Kubernetes nachahmt
Ich bin auf der Suche nach einem Muster, das ermöglicht das teilen von volumes zwischen zwei Behältern auf dem gleichen pod Kubernetes.
Mein use-case ist:
Ich habe eine Ruby on Rails-Anwendung läuft innerhalb eines docker-container.
Die docker-image enthält statischen Elemente in /app/<app-name>/public
Verzeichnis, und ich muss Zugriff auf diese assets aus dem nginx-container nebenher laufen in der gleichen pod.
In 'vanilla' Andockfenster ich würde verwendet haben --volumes-from
flag für die Freigabe dieses Verzeichnis:
docker run --name app -v /app/<app-dir>/public <app-image>
docker run --volumes-from app nginx
Nach der Lektüre dieses doc: https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/volumes.md
Ich habe versucht, diese (nur die relevanten Einträge angezeigt):
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
Aber:
- Obwohl
/tmp/assets
auf dem Knoten vorhanden ist, ist es leer /app/<app-name>/public
innerhalb der app-container ist auch leer
Als workaround werde ich versuchen, füllen Sie das freigegebene Verzeichnis, wenn der application-container ist (einfach cp /app/<app-name>/public/*
auf freigegebene Ordner), aber ich mag wirklich diese Idee.
Frage:wie zu imitieren --volumes-from
im Kubernetes, oder wenn es keine direkte Entsprechung, wie kann ich Dateien von einem Behälter in einen anderen Betrieb in der gleichen pod ?
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"}
InformationsquelleAutor der Frage cthulhu | 2015-05-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
[update-2016-8] In die Letzte Kubernetes Version, die Sie verwenden können, ein sehr nettes feature namens
init-container
zu ersetzen, diepostStart
Teil in meiner Antwort unten, die machen sicher, dass der container bestellen.HINWEIS: initContainer ist immer noch ein beta-Funktion so die Arbeit version dieses yaml ist eigentlich wie: http://kubernetes.io/docs/user-guide/production-pods/#handling-initializationbitte beachten Sie die
pod.beta.kubernetes.io/init-containers
Teil.---ursprüngliche Antwort beginnen---
Tatsächlich, Sie können. Sie benötigen container life-cycle-handler zu Steuern, welche Dateien/Verzeichnisse, die Sie freigeben möchten mit anderen Containern. Wie:
Bitte überprüfen Sie meine Kernaussage für mehr details:
https://gist.github.com/resouer/378bcdaef1d9601ed6aa
Und natürlich können Sie emptyDir. So, Krieg container kann seinen /Probe.Krieg-to-peer-container, ohne Durcheinander peer /app Verzeichnis.
Wenn wir das tolerieren kann /app außer Kraft gesetzt wurde, wird es viel einfacher:
InformationsquelleAutor der Antwort harryz
Die Antwort ist - für heute - Sie können es nicht. Hier ein paar Diskussions-threads aus dem Kubernetes Fragen:
Allerdings darf ich vorschlagen, dass Sie ein Alternatives design, das besser laufen könnte?
Sie könnte so etwas wie
gitRepo
Volumen würde es zu kopieren, um eine
emptyDir
am point-of-going-live, und würde bedeuten, die Sie nicht haben, um den Inhalt zu verschieben, um beialles, nur download direkt auf das freigegebene Verzeichnis.
gebaut, ist es wahrscheinlich am besten, um Sie kopieren zu dem Zeitpunkt, mit
das Andockfenster "KOPIEREN".
emptyDir
Lautstärke, die ist entworfen für genau das, was Sie suchen (abzüglich der Mangel habend, um es zu kopieren).NFS[1] - volumes könnte auch dein problem lösen, aber möglicherweise zu Komplex sein.
Darüber hinaus würde ich empfehlen, dass diese beiden Dienste gibt es in verschiedenen "pods", so können Sie die Größe jeweils separat. Sie können erstellen Sie ein service-Endpunkt für die Kommunikation zwischen Ihnen, wenn Sie benötigen.
[1] https://github.com/GoogleCloudPlatform/kubernetes/blob/master/examples/nfs/nfs-web-pod.yaml
InformationsquelleAutor der Antwort aronchick
Weiteres update von der Zukunft:
Gibt es jetzt eine FlexVol-plugin für Docker Bände: https://github.com/dims/docker-flexvol
In der Zeit des Schreibens, FlexVol ist immer noch eine alpha-Funktion, also caveat emptor.
InformationsquelleAutor der Antwort coderanger