2015-10-08 8 views
11

Das allgemeine Szenario besteht darin, dass wir einen Cluster von Servern haben und zusätzlich mithilfe von Docker virtuelle Cluster einrichten möchten.So begrenzen Sie den verfügbaren Docker-Dateisystembereich für Container

Dafür haben wir Dockerfiles für verschiedene Dienste (Hadoop, Spark etc.) erstellt.

In Bezug auf den Hadoop-HDFS-Dienst haben wir jedoch die Situation, dass der für die Docker-Container verfügbare Speicherplatz dem verfügbaren Speicherplatz auf dem Server entspricht. Wir möchten den verfügbaren Speicherplatz pro Container begrenzen, damit wir dynamisch einen zusätzlichen Datenknoten mit einer Speichergröße erzeugen können, die zum HDFS-Dateisystem beiträgt.

Wir hatten die Idee Loopback-Dateien zu verwenden, die mit ext4 formatiert sind, und hängen diese an Verzeichnisse an, die wir als Volumes in Docker-Containern verwenden. Dies bedeutet jedoch einen großen Leistungsverlust.

Ich fand eine andere Frage über SO (Limit disk size and bandwidth of a Docker container), aber die Antworten sind fast 1,5 Jahre alt, was - bezüglich der Entwicklungsgeschwindigkeit von Docker - alt ist.

Welcher Weg oder Speicher-Backend würde uns erlauben, zu

  • Limit-Speicher auf einer Pro-Container-Basis
  • Hat in der Nähe von Bare-Metal-Performance
  • Nicht Repartitionierung des Servers erfordern Laufwerke

Antwort

22

Sie können runtime constraints für Speicher und CPU, aber nicht für Speicherplatz angeben.

Die Möglichkeit, Einschränkungen für den Speicherplatz festzulegen, wurde angefordert (issue 12462, issue 3804), ist aber noch nicht implementiert, da dies vom zugrunde liegenden Dateisystemtreiber abhängt.

Diese Funktion wird zu einem bestimmten Zeitpunkt hinzugefügt, aber nicht sofort. Es ist ein bisschen schwieriger, diese Funktionalität jetzt hinzuzufügen, da sich viele Codestücke von einem Ort zum anderen bewegen. Nachdem diese Arbeit erledigt ist, sollte es viel einfacher sein, diese Funktionalität zu implementieren.

Bitte beachten Sie, dass Quota-Unterstützung nicht als Hack zu devicemapper hinzugefügt werden kann, es muss für so viele Speicher-Backends wie möglich implementiert werden, also muss es so implementiert werden, dass es einfach hinzuzufügen Quota-Unterstützung für andere Speicher-Backends.


Update August 2016: wie unten gezeigt, und in issue 3804 comment, PR 24771 und PR 24807 haben dann verschmolzen gesehen. docker run erlauben jetzt Speichertreiber Optionen pro Container

$ docker run -it --storage-opt size=120G fedora /bin/bash 

Diese (Größe) können, um den Behälter rootfs Größe 120G zum Zeitpunkt der Erstellung einzustellen.
Diese Option ist nur für den Device Mapper, Btrfs, Overlay2, windowsfilter und zfs Graph Treiber

+0

Da es nun eine Option, dies zu ermöglichen, was sie, wenn sie voll macht?Ich habe gerade versucht, eine gigantische Datei zu erstellen, und sobald sie voll war, konnte der Container nichts mehr tun (selbst ls) und "docker rm myimg" würde überhaupt nicht funktionieren. – Telokis

+0

@Ninetainedo Seltsam. Welche Version von Docker verwenden Sie, auf welchem ​​Betriebssystem? – VonC

+0

Wenn es Ihnen nichts ausmacht, Github anzuschauen, [hier] (https://github.com/docker/docker/issues/31931) die vollständige Ausgabe, die ich eingereicht habe. – Telokis

Verwandte Themen