GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Warum sollte ich mich um Kubernetes, Docker und Container-Orchestrierung kümmern?

Eine Person bei der Arbeit unterhielt sich mit mir, kommentierte meine letzten Blog-Beiträge zu den im Aufbau befindlichen Raspberry Pi Kubernetes-Clustern und fragte sich:„Warum sollte ich mich für Kubernetes oder Docker oder irgendetwas davon interessieren?“

Gute Frage, und ich finde es selbst heraus. Es gibt viele Ressourcen da draußen, aber keine, die meine Sprache spricht, also hier sind meine Gedanken und wie ich sie erkläre.

"Hey, ich habe diese tolle neue Blog-App!"

"Fabelhaft, gib mir!"

"Sicher, stellen Sie zuerst sicher, dass Sie diese Version von Windows/Linux, diese Version von .NET/Python/Node und diese Voraussetzungen haben."

"Moment mal, lass mich dich nächste Woche anrufen, wenn das erledigt ist."

So wurde jahrelang Software gebaut. Lassen Sie es uns jetzt bereitstellen.

"Hier ist der Code/die DLLs/Anwendung gezippt."

"Lemme FTP/SFTP/Ziehen Sie dies von einem Explorer-Fenster in ein anderes."

"Ist diese Version dieser Datei so eingestellt?"

"Warte, was?"

"Stellen Sie sicher, dass system/boss/dll/nounjs Version 4.5.4.1 ist, sie haben es gepatcht."

"Ok, Imma shush* in die Produktion."

Wieder waren wir alle dort. Wir schreiben das Jahr 2018 und es gibt mehr Leute, die das tun, als Sie zugeben möchten.

Geben Sie virtuelle Maschinen ein! Viel besser, oder? Hier ist ein USB-Stick mit einer Datei, die ALLES enthält, was Sie brauchen. Erledigt.

"Vergiss das, benutze das. Es ist besser als ein Computer, es ist eine virtuelle Maschine. Aber sei dir bewusst, es weiß nicht, dass es virtuell ist, also respektiere die Lüge."

"Okay, schick es mir per E-Mail."

"Nun, es sind 32 Gigs. Lassen Sie mich es UPSen."

Ihre App ist nur 100 MB groß und diese VM hat Dutzende von Gigs. Warum braucht eine 150-Pfund-Person einen 6000-Pfund-Hummer? Isolation, schätze ich.

„Die App wird komplexer, aber sie ist cool. Es gibt jetzt vier VMs. Eine für die DB, eine für Redis und eine Frontend-VM, und der Warenkorb bekommt eine. Es sind Microservices!“

"Ich liebe es."

"Hier ist ein 2-TB-Laufwerk."

Schön, dass wir es aufbrechen, aber nicht so schön, dass wir aufgebläht werden. Jetzt müssen wir apt upgrade/windows update auf all diesen Dingen ausführen und sie warten. Warum einen Hummer fahren, wenn ich einen Lyft bekommen kann?

"Ok, ich habe sie alle auf dieser bulligen Maschine unter meinem Schreibtisch zum Laufen gebracht."

"Cool, wir wechseln in die Cloud."

"Seufz. Ich muss all diese Verbindungszeichenfolgen aktualisieren und mit dem Hochladen von VMs beginnen."

"Das wird großartig. Es ist wie eine Maschine unter Ihrem Schreibtisch, außer dass Ihr Schreibtisch in der Cloud ist."

"Was ist die Wolke?"

"Es ist ein Serverraum, den Sie nicht sehen können. Im Grunde sind es die Computer unter Ihrem Schreibtisch. Aber unsichtbar."

Die meisten VM-Infrastrukturen sind ziemlich schlampig. Es sind hartcodierte IP-Adressen, es sind schlecht benannte VMs, die in denselben Subnetzen leben, dann verschieben wir sie in die Cloud (Lift and Shift!), aber dann sind sie immer noch chaotisch, aber sie sind in der Cloud™, richtig?

„Weißt du, all diese VMs sind schwer. Ich muss eine Menge Dinge verwalten und verschieben, die NICHT die App sind. Container sind der Weg. Definiere einfach die Basisanforderung der App und teile alles andere.“

„Ich habe davon gehört. Ich kann „docker run hello-world“ eingeben und auf jedem Computer wird das Hello-World-Image (basierend auf Ubuntu) von einem zentralen Hub geladen und größtenteils isoliert ausgeführt. Garantiert zu arbeiten und zu laufen, auch wenn die Zeit vergeht."

„Schön, denn immer mehr Teile unserer App befinden sich in .NET Core unter Linux, aber es gibt auch etwas Python und Knoten.“

"Ja, und alles wird einfach ausgeführt, da die Voraussetzungen klar im Container aufgeführt sind ... und die Voraussetzungen tatsächlich Verweise auf andere Container-Images sind."

"Es sind Container bis ganz nach unten."

Jetzt können die DB, Redis, das Frontend und der Warenkorbaufruf in einigen einfachen Textdateien definiert werden. Anstatt dass Ihr Host-Betriebssystem (der Hauptcomputer ... das Metall) eine Reihe von Gastbetriebssystemen (buchstäblich Kopien!) lädt und dann alle Apps und Voraussetzungen lädt, teilen Sie Betriebssysteme und gegebenenfalls die Binärdateien und Bibliotheken .

"OK, jetzt haben wir eine Reihe von Containern, die in Docker laufen, aber manchmal stürzen sie ab oder stoppen."

"Erneut ausführen?"

"Es ist mehr als das, wir brauchen manchmal 3 Warenkorb-Container und manchmal brauchen wir 2 oder mehr DB-Container. Außerdem ändern sich manchmal ihre IPs."

"Also brauchen wir etwas, um sie am Laufen zu halten, sie zu skalieren oder automatisch zu skalieren sowie Netzwerke und Benennung/DNS zu verwalten."

Geben Sie einen Container-Orchestrator ein. Es gibt Docker Swarm, Mesos/Marathon, Azure Service Fabric und andere, aber für diesen Beitrag verwenden wir Kubernetes.

"Also führt Kubernetes meine Container aus, hält sie am Laufen und hilft bei der Verwaltung des Netzwerks?"

„Ja und nein. Teile von Kubernetes – oder k8s, wie coole Leute wie ich sagen, die es seit fast 3 Stunden verwenden – sind Teil der Master-Komponenten, wie etcd für die Schlüsselwertspeicherung und der kube-scheduler für die Auswahl auf welchem ​​Knoten soll ein "Pod" ausgeführt werden (ein Pod ist cooler zu sagen als ein Container, aber manchmal ist ein Pod mehr als ein Container. Trotzdem sehr cool.)

"Ich muss ein Glossar erstellen."

"Darn tootin' you will."

Kubernetes hat im Grunde alles Pluggable. Gefällt Ihnen das Netzwerk-Setup nicht? Es gibt buchstäblich über ein Dutzend Optionen. Möchten Sie bessere Diagramme und Grafiken? Die ganze Welt der Optionen.

So wie man Dockerfile erklären kann deklarieren, was zum Ausführen einer App erforderlich ist, beschreibt eine Kubernetes-YAML-Datei nicht nur die Container, sondern auch die erforderlichen Ports, die Anzahl der Replikate von jedem (denken Sie an eine Webfarm), Namen, Umgebungsvariablen und mehr. Hier ist eine Datei, die ein Front-End, ein Back-End und einen Load Balancer zeigt. Alles ist da, Verbindungszeichenfolgen werden zu internen DNS-Lookups, jeder Dienst hat einen Load Balancer (wenn Sie möchten) und Sie können manuell oder automatisch skalieren.

"Okay, warum sollte es mich interessieren?"

„Einige Gründe. In der Vergangenheit musste ich Ihnen zur Installation unserer App ein Word-Dokument und ein Wochenende geben. Jetzt geben Sie kubectl apply theapp.yaml ein und es läuft in weniger als einer Minute."

"Ich berechne immer noch das Wochenende."

Einfach gesagt, wir stehen am Beginn einer neuen Phase von DevOps. Eine, die programmatisch, elastisch und deklarativ ist. Es ist konsistent und klar und modular.

Ich empfehle Ihnen, Julia Evans „Reasons Kubernetes is cool“ zu lesen und sich darüber zu informieren, wie man einen Kubernetes-Cluster (und die Verwaltungs-VMS sind kostenlos) in Azure erstellt.

* Ich versuche, Psst zu einer Sache zu machen. Wir packen Es Es Eaytch nicht in Maschinen! Wir hauen ab! Es wird irgendwo zwischen shush und shoosh ausgesprochen. Stellen Sie sicher, dass Sie ein kleines Petit Jeté einwerfen, wenn Sie es sagen.

* Bild verwendet unter CC

Sponsor: Entfesseln Sie ein schnelleres Python Steigern Sie die Leistung Ihrer Anwendungen auf zukünftigen Intel® Plattformen mit der Intel® Distribution für Python. Verfügbar für Windows, Linux und macOS. Holen Sie sich jetzt die Intel® Distribution für Python*!


Docker
  1. Howto:Was ist Git und Github? Wie verwende ich es und warum sollte es mich interessieren?

  2. Was ist containerd und in welcher Beziehung steht es zu Docker und Kubernetes?

  3. Was sind Docker-Volumes und wie verwenden Sie sie?

  4. Warum Deis und was ist das?

  5. So erhalten Sie Informationen zu einem Container in Docker

So aktualisieren Sie das Docker-Image und den Container auf die neueste Version

Wie man SSH in einen Docker-Container einfügt und Befehle ausführt

Nutzen Sie die Container-Orchestrierung in diesem Docker Swarm-Tutorial

So stellen Sie einen Docker-MongoDB-Container bereit und verwalten ihn

So kopieren Sie Dateien zwischen Host und Docker-Container

21 grundlegende Befehle, die jeder Docker-Benutzer kennen sollte