Festplatten über NFS auf einem CoreOS-Cluster freigeben?

Festplatten über NFS auf einem CoreOS-Cluster freigeben?

Ist es für einen CoreOS-Cluster möglich, Festplattenspeicher zu teilen, z. B. mithilfe von NFS? Wenn ja, wie würde man dabei vorgehen? (z. B. in dem Szenario, in dem ein Knoten viel Festplattenspeicher hat). Dies wäre beispielsweise nützlich, um zu vermeiden, dass jeder Knoten seine eigene Bibliothek mit Docker-Images herunterladen und speichern muss, oder um Speicherplatz im Home-Verzeichnis zwischen Knoten zu teilen.

Da wir in CoreOS keine zusätzliche Software direkt installieren können, stelle ich mir vor, dass man einen Container schreiben müsste, nur um NFS zu installieren (z. B. nfs-kernel-serverauf einem Ubuntu-basierten Container).

Ich habe keine Ahnung, ob das möglich ist, aber ich hoffe, dass es eine etablierte Methode gibt, um Speicherplatz in einem CoreOS-Cluster gemeinsam zu nutzen (schließlich scheint das eine gängige Erwartung an einen Cluster zu sein, und vielleicht ist mein unten stehender Vorschlag komplizierter als nötig). Nur um etwas Stoff für Feedback zu liefern, hier ist, was ich mir bisher überlege:

Die Bereitstellung der Host-Seite von NFS scheint eine sinnvolle Docker-Aufgabe zu sein, ich stelle mir beispielsweise ein Docker-File wie das folgende vor:

FROM ubuntu:14.04
ENV CLIENT_IP 11.111.111.111          
RUN apt-get update && apt-get install -y nfs-kernel-server supervisor
RUN mkdir /var/nfs && chown nobody:nogroup /var/nfs
RUN echo "/home       ${CLIENT_IP}(rw,sync,no_root_squash,no_subtree_check)" >> /etc/exports
RUN echo "/var/nfs    ${CLIENT_IP}(rw,sync,no_subtree_check)" >> /etc/exports
RUN exportfs -a
CMD service nfs-kernel-server start

Wo CLIENT_IPwurde entsprechend ausgefüllt (und vielleicht müssen wir CMD durch einen Aufruf von supervisordoder Ähnliches ersetzen, um dies dauerhaft zu machen, aber Sie verstehen, was ich meine)

Wie können wir also Volumes beim Ausführen dieses Containers angemessen verknüpfen? Welches Volume würden wir vom CoreOS-Host aus verknüpfen? Oder muss ich etwas hinzufügen, --net="host"um den Client verfügbar zu machen?

docker run -v /home:/home nfs-server

Mir ist überhaupt nicht klar, wie wir die Client-Seite der Dinge implementieren könnten, da wir wieder einen Container benötigen würden, um bereitzustellen nfs-common, und irgendwie herausfinden müssten, wie andere Container diese Ressource dann gemeinsam nutzen könnten (vielleicht eine geeignete Verwendung von --volumes-from?). Ich würde gerne eine Übersicht darüber sehen, wie man dabei vorgeht oder warum es nicht möglich ist und ob es bessere Alternativen für diesen Anwendungsfall gibt. Danke!

Antwort1

Sie sollten in der Lage sein, ein NFS-Volume auf dem CoreOS-Host zu mounten. Wenn keine Userland-Tools zum Exportieren eines Dateisystems aus CoreOS vorhanden sind, können Sie den vom toolboxBefehl bereitgestellten Fedora-Toolbox-Container verwenden.

Antwort2

Sie müssen rpc-mountddie nfsdSystemd-Dienste starten und Ihre NFS-Exporte in /etc/exportseiner Datei definieren.

Beispiel von cloud-config.yml:

coreos:
  units:
    - name: rpc-mountd.service
      command: start
      enable: true
    - name: nfsd.service
      command: start
      enable: truestrong text
write_files:
  - path: /etc/exports
    permissions: '0644'
    # Change /network-raid with the dir you want to export over nfs
    content: /network-raid/ 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash,fsid=0)

Ich habe dieses Setup mit CoreOS am LaufenVersion 723.3.0.

Weitere Informationen zur gemeinsamen Nutzung von Festplatten über NFS unter CentOS finden Sie unter den folgenden Links:

verwandte Informationen