Implementieren Sie den On-Demand-Docker-Container-Start

10

Situation: viele schwere Docker-Container, die regelmäßig für eine Weile getroffen werden, bleiben dann für längere Zeit unbenutzt.

Wunsch: Starten Sie die Container auf Nachfrage (wie systemd startet Dinge durch Socket-Aktivierung) und stoppen Sie sie nach Leerlauf für einen bestimmten Zeitraum. Keine sichtbare Ausfallzeit für den Endbenutzer.

Optionen:

  • Kubernetes verfügt über Ressourcen-Controller, die Repliken skalieren können. Ich denke, es wäre möglich, die Anzahl der Replikate auf 0 zu belassen und sie bei Bedarf auf 1 zu setzen, aber wie kann man das erreichen? Im Benutzerhandbuch wird angegeben, dass ein automatischer Skalierungssteuerungsagent
  • Ich sehe keine Lösung in Docker Swarm, korrigiere mich, wenn ich falsch liege.
  • Verwenden Sie einen benutzerdefinierten HTTP-Server in der gewählten Sprache, der Zugriff auf den Andock-Daemon hat. Vor dem Routing zum richtigen Ort würde es nach der Existenz des Containers suchen und sicherstellen, dass es läuft. Nachteil - keine allgemeine Lösung, muss nicht ein Container sein oder Zugriff auf den Daemon haben.
  • Verwenden Sie systemd wie beschrieben hier . Dieselben Nachteile wie oben, d. H. Nicht allgemein, und man muss sich selbst mit Netzwerkaufgaben befassen (wie zum Beispiel die IP des erzeugten Containers finden und in die Server / Proxy-Konfiguration einspeisen).

Irgendwelche Ideen geschätzt!

    
xificurC 02.04.2016, 22:28
quelle

2 Antworten

2

Sie können die integrierte Horizonal Pod Autoscaling (HPA) von Kubernetes zum Skalieren verwenden von 1 Instanz jedes Containers bis zu so vielen, die benötigt werden, um die Last zu bewältigen, aber es gibt keine integrierte Funktionalität für die 0-zu-1-Skalierung beim Empfang einer Anfrage, und mir ist keine allgemein verwendete Lösung bekannt.

    
Alex Robinson 02.04.2016 22:53
quelle
0
  1. Sie können systemd verwenden, um Ihre Andock-Container zu verwalten. Siehe Ссылка

  2. Vor einiger Zeit habe ich mit einem Ops-Typ für pantheon.io darüber gesprochen, wie sie so etwas mit Docker machen. Ich denke, es wäre gewesen, bevor Kubernetes überhaupt herauskam. Pantheon drupal Hosting. So wie die Dinge eingerichtet sind, wird jeder Server, den sie für Clients ausführen, containerisiert, aber wie Sie beschreiben, verschwindet der Container, wenn er nicht benötigt wird. Die einzige Ressource, die dann außer dem Plattenspeicher reserviert ist, ist eine Socket-Nummer auf dem Host.

    Sie haben einen ziemlich einfachen Daemon, der die Sockets aller inaktiven Server abhört. Wenn der Daemon eine Anforderung empfängt, hört er nicht mehr auf eingehende Verbindungen auf diesem Socket zu, startet den erforderlichen Container und gibt diese Anforderung an den neuen Container weiter. Nachfolgende Verbindungen gehen direkt in den Container, bis sie für einen bestimmten Zeitraum inaktiv sind und der Listener-Daemon den Port erneut übernimmt. Das ist ungefähr so ​​detailliert wie ich weiß, was sie getan haben, aber Sie bekommen die Idee.

  3. Ich kann mir vorstellen, dass etwas wie der von Pantheon implementierte Daemon dazu verwendet werden kann, Befehle an Kubernetes zu senden und nicht direkt an den Docker-Daemon. Vielleicht könnte ein systembasierter Ansatz zum dynamischen Starten von Containern auch mit Kubernetes kommunizieren, wenn dies erforderlich ist. In beiden Fällen können Sie Pods und nicht nur Container starten.

mc0e 29.01.2017 04:06
quelle

Tags und Links