‫Gut.
‫Wo immer Sie Ihren Docker ausführen, können wir für unsere eigenen Testzwecke einen einzelnen Knoten-Schwarm
‫erstellen.
‫Anhand der Art und Weise, wie ich feststellen kann, ob Swarm aktiviert ist oder nicht, kann ich einfach eine Docker-Information erstellen, und Sie werden feststellen, dass Swarm
‫inaktiv ist.
‫Wir wissen also, dass Swarm hier nicht aktiviert wurde. Auch hier aktiviert Docker standardmäßig
‫keine der Swarm-Funktionen.
‫Ich kann ein Docker-Schwarm-Init zum Initialisieren ausführen. Das hat ungefähr eine halbe Sekunde gedauert und wir sind fertig.
‫Was wir jetzt haben, ist ein einzelner Knotenschwarm mit all den Merkmalen und Funktionen, die wir
‫sofort erhalten.
‫Das war also wahrscheinlich die kürzeste Demo dieses gesamten Kurses.
‫Ich meine, was ist gerade passiert? Wir haben einen Befehl und Magie eingegeben. War eigentlich keine Magie.
‫Es war eine Menge sehr schneller und effizienter Dinge in der Go-Programmierung von Docker, aber im Grunde genommen
‫erledigt
‫es eine ganze Reihe von PKI- und Sicherheits-Dingen. Es erstellt ein Stammzertifikat für den Schwarm, mit
‫dem Vertrauens- und Signaturzertifikate für alle Knoten und alle Manager erstellt werden. Es wird ein spezielles Zertifikat für diesen ersten
‫Manager-Knoten erstellt, da es sich um einen Manager im Vergleich zu einem Worker handelt.
‫Dann werden diese Token erstellt, die wir tatsächlich auf anderen Knoten verwenden können, um diesem Schwarm beizutreten.
‫Dann eine Reihe anderer Dinge im Hintergrund, bei denen die Swarm-API aktiviert und eine sogenannte Raft Consensus-Datenbank
‫erstellt wird, über die wir später in einem Produktionsteil des Kurses sprechen werden.
‫Wie Sie wissen, ist Raft ein Protokoll, das die Konsistenz über mehrere Knoten hinweg gewährleistet. Es eignet sich ideal für die
‫Verwendung in der Cloud, in der wir nicht garantieren können, dass für einen bestimmten Moment eines zur
‫Verfügung steht.
‫Es erstellt diese Datenbank auf der Festplatte. Es speichert die Konfiguration des Schwarms
‫und des ersten Managers und verschlüsselt sie tatsächlich.
‫Vorausgesetzt, Sie haben Version 1. 13 oder neuer. Dann wartet es auf andere Knoten, bevor
‫es beginnt, die Datenbank auf diese zu replizieren.
‫Auch hier wird der gesamte Datenverkehr, der anfällt, wenn wir andere Knoten erstellen, verschlüsselt.
‫Eine der Schlüsselkomponenten von Swarm, die es als erstes
‫herausbrachte, war, dass wir kein zusätzliches Schlüsselwertspeichersystem oder eine Datenbankarchitektur brauchten, um das Back-End-Konfigurationsmanagement
‫unseres Schwarms zu bilden.
‫Wenn Sie selbst jahrelang oder jahrzehntelang in der Branche tätig waren, gibt es dieses Konzept in der
‫Regel für die Konfigurationsdatenbank. Dabei handelt es sich um dieses separate Datenbanksystem, das Sie normalerweise redundant machen müssen, um alle
‫Informationen zu Ihrem Orchestrierungs- und Automatisierungssystem zu speichern. Swarm hat das direkt in
‫Docker direkt in den Daemon eingebaut und erledigt es für uns.
‫Wir müssen nie wirklich etwas tun. Es gibt keine Passwörter, über die Sie sich Sorgen machen müssen. Es gibt keine speziellen
‫Dienste zum Starten oder ähnliches.
‫Also zurück zur Kommandozeile.
‫Sie werden hier feststellen, dass es sich um ... Wenn ich dem Schwarm einen Arbeiter hinzufügen
‫möchte, muss ich diesen nur wirklich ausschneiden und auf den anderen Servern einfügen, die ich hinzufügen würde.
‫Später werden wir tatsächlich einen Schwarm mit mehreren Knoten erstellen, aber im Moment werden wir dies
‫nur auf einem einzelnen Knoten belassen. Schauen wir uns ein paar der Befehle an, die dabei herauskommen.
‫Das erste, was wir tun können, ist Docker Node ls. In diesem Fall sehen wir nur den einen Manager-Knoten, den wir
‫erstellt haben.
‫Sie werden bemerken, dass es sich um einen Anführer handelt und es immer nur einen Anführer unter allen Managern geben kann.
‫Da wir nur einen haben, ist es offensichtlich der Anführer. Wir können in der Hilfe
‫nachsehen, welche anderen Optionen wir hier haben. Wirklich, die Nodes-Befehle, die verwendet werden, um Ihre Server in den Schwarm
‫und aus dem Schwarm zu bringen, oder um sie von Arbeitern zu Managern zu befördern oder sie von Managern zurück zu Arbeitern zu degradieren.
‫Wenn Sie den Befehl dockers swarm ein wenig zurücknehmen, werden wir feststellen, dass es sich tatsächlich um einen sehr engen
‫Befehlsumfang handelt.
‫Es ist wirklich nur zu initialisieren, entweder beitreten oder verlassen.
‫Der neue Unlock-Befehl, über den wir in einem späteren Vortrag sprechen können.
‫Konzentrieren wir uns vorerst auf den aufregenden neuen Docker-Dienstbefehl.
‫Auch hier ersetzt der Dienst in einem Schwarm den Docker-Lauf.
‫Ich weiß es nicht genau, aber ich glaube wirklich, dass sich dies auf die
‫Idee konzentrierte, dass wir die vorhandenen Docker-Run-Funktionen nicht aufheben wollten, sondern Docker-Run immer von Grund auf als eine
‫einzige Host-Lösung erstellt wurde.
‫Die ganze Idee war, sich auf lokale Container auf dem System zu konzentrieren, mit dem es kommuniziert. Wenn wir dagegen von
‫einem Cluster sprechen, interessieren uns einzelne Knoten weniger.
‫Wir nennen sie wahrscheinlich nicht. Wir behandeln sie wie Rinder, wenn Sie
‫jemals von Haustieren gehört haben, die nur eine Zahl sind.
‫Wir gehen nicht wirklich einzeln zu jedem Knoten und starten einen individuellen Container.
‫Wir werfen dem Schwarm wirklich nur Anforderungen in Form von Diensten zu, und dann wird orchestriert, wie er all das auslegen
‫muss, auf welchen Knoten sie sein müssen, und wir wissen nur,
‫dass es unseren Rücken hat. Docker-Service erstellen ist, wie
‫wir es einige neue Aufträge geben. Lassen Sie uns etwas ganz Einfaches tun.
‫Lassen Sie uns einfach das alpine Image starten. Dann müssen wir das Alpenbild nur mit Ping
‫auf 8 stellen. 8. 8. 8, der eigentlich ein Google DNS-Server ist, aber wir möchten
‫ihm wirklich nur etwas zu tun geben, während wir untersuchen, was passiert.
‫Dann sehen Sie, wie Docker ausgeführt wird und eine ID zurückspuckt, nur dass dies nicht die Container-ID ist. Das ist eigentlich die
‫Service-ID.
‫Sie werden sehen, dass wir jetzt einen Dienst aufgelistet haben. Genau wie bei unserem Docker-Befehl run, da wir ihn
‫nicht benannt
‫haben, gab er ihm einen zufälligen Namen. Wir können sehen, dass es tatsächlich bereits gesponnen ist.
‫Der eine von einem. Wenn Sie sich Dienstleistungen ansehen, sehen Sie diese Nummer
‫immer mit einem / in der Mitte. Das entspricht der Anzahl der Läufer auf der linken Seite.
‫Und rechts sehen Sie, wie viele Sie für die Ausführung angegeben haben.
‫Das Ziel des Orchestrators ist es, dass diese Zahlen übereinstimmen, unabhängig davon, was erforderlich ist.
‫Aber das zeigt uns nicht wirklich den wirklichen Container.
‫Dies zeigt uns nur eine Liste unserer Dienstleistungen, damit wir uns ein wenig weiter vertiefen können.
‫Wir führen einen Docker-Dienst ps durch und geben ihm dann den Namen oder die ID des Dienstes. Daraufhin werden uns
‫die Aufgaben oder Container für diesen Dienst angezeigt. Sie werden sehen, dass es dem Befehl ls des Docker-Containers
‫ähnlich ist, aber es hat jetzt tatsächlich diese Knotenkomponente, da wir bei Szenarien mit mehreren Servern möglicherweise wissen
‫müssen, auf welchem Server er tatsächlich ausgeführt wird. Sie werden feststellen, dass es dem
‫Dienst tatsächlich den Namen eines Inkrements des Dienstnamens gegeben hat.
‫Wenn wir zum Befehl docker container ls zurückkehren, funktioniert das immer noch.
‫In diesem Fall fügt die Orchestrierung von Swarm den Namen und den tatsächlich ausgeführten
‫Bildern einige Informationen hinzu. Wir werden später auch einige dieser subtilen Unterschiede behandeln.
‫Lassen Sie uns diesen Service erst einmal in Anspruch nehmen und ihn vergrößern. Dafür verwenden wir das Docker-Service-Update und dann den Namen unseres
‫Services oder die ID. In diesem Fall werde ich die ID durchführen. Und ich möchte ein Attribut über den
‫Dienst ändern.
‫In diesem Fall möchte ich die Anzahl der Replikate ändern.
‫Wenn wir also wieder einen Docker-Service durchführen, sehen wir jetzt drei von drei. Wenn wir einen Docker-Dienst ps ausführen, sehen wir
‫jetzt tatsächlich drei Aufgaben. Sie werden feststellen, dass zwei vor wenigen Sekunden erstellt wurden.
‫Wenn wir schnell genug wären und etwas bereitstellen, das groß genug wäre, könnten wir den Dienst tatsächlich ausführen und sehen,
‫dass er uns null von drei anzeigt. Einer von Drei.
‫Es wird sich tatsächlich erhöhen, wenn die Dinge beginnen. Es ist einfach so, dass Alpine in Bezug auf sein Image
‫bereits auf dieser Maschine war und es nicht sehr lange dauerte, bis ein Ping-Befehl gestartet wurde.
‫So schnell konnten wir einfach nicht sein.
‫Das Interessante an diesem Update-Befehl ist, dass Sie sich den Unterschied zwischen dem Docker-Befehl run, den
‫Sie möglicherweise auf einem einzelnen Entwickler- oder Testserver oder auf Ihrem lokalen Computer verwenden, und den produktiven
‫Bedenken vorstellen können, immer so viel wie möglich zur
‫Verfügung zu haben.
‫Das ist eines der Designziele von Swarm. Dieser Befehl, den wir noch
‫nicht verwendet haben, ist der Docker-Aktualisierungsbefehl. Dies war ein Befehl für die Docker-Ausführungscontainer, mit dem wir
‫bestimmte Variablen in unserem Ausführungscontainer aktualisieren konnten, ohne ihn beenden und neu starten zu müssen.
‫Fast alle dieser Optionen beziehen sich auf die Begrenzung und Steuerung der Ressourcennutzung für diesen Container.
‫Weil dies eines der typischen Dinge ist, die Sie sehen, wenn Sie eine
‫Langzeitanwendung ausführen, müssen Sie deren Ressourcen ändern, möglicherweise weil die Datenbanken größer geworden sind und mehr RAM benötigen.
‫Oder Sie haben einen außer Kontrolle geratenen Prozess, der zu viel CPU verbraucht und den Sie einschränken müssen.
‫Wenn wir beim Befehl docker service update helfen, werden Sie feststellen, dass wir viel mehr Optionen haben.
‫Denn das Ziel eines Swarm-Dienstes besteht darin, Container zu ersetzen und Änderungen im Dienst zu aktualisieren, ohne
‫dass das Ganze heruntergefahren werden muss.
‫Wenn Sie einen Service mit drei Containern hatten, könnten Sie technisch einen nach dem anderen außer Betrieb nehmen, um eine Änderung vorzunehmen und eine Art fortlaufendes Update
‫durchzuführen. Dies ist das blaugrüne Muster, über das wir gesprochen haben. Aus diesem Grund sehen wir hier viel mehr
‫Optionen, da wir diese Optionen ändern können, die möglicherweise einen Neustart des Containers erfordern. Der Schwarm
‫stellt jedoch auf intelligente Weise sicher, dass die Art und Weise, wie wir sie aktualisieren, ein Muster aufweist,
‫das eine konsistente Verfügbarkeit gewährleistet.
‫Kehren Sie also schnell zu unserer Docker-Container-Liste zurück. Sie werden bemerken, dass wir jetzt diese drei
‫haben, und was ist, wenn ich reingehe und wie ein Schurke einen Docker-Container rm mache und einen dieser Container
‫spezifiziere und ihn zwinge ... Nehmen wir an, ich habe den ersten besiegt und ihn einfach rausgenommen.
‫Gut.
‫Jetzt mache ich einen Docker-Dienst und Sie sehen, wie es zwei von drei zeigt?
‫Da ich hinter dem Rücken von Swarm reingegangen bin und tatsächlich einen laufenden Container mitgenommen
‫habe, wird dies erkannt und innerhalb von Sekunden ein neuer gestartet, der den ausgefallenen
‫ersetzt.
‫Wenn ich also einen Docker-Dienst auf Frosty durchgeführt habe, werden Sie feststellen, dass der Verlauf der ersten Aufgabe hier in der Liste tatsächlich darin
‫besteht, dass eine fehlgeschlagen ist und vor 24 Sekunden eine neue Aufgabe gestartet wurde.
‫Dies ist eine der Aufgaben eines Container-Orchestrierungssystems, um sicherzustellen, dass die von Ihnen angegebenen
‫Dienste immer ausgeführt werden. Wenn sie fehlschlagen,
‫wird der Fehler behoben. Was ist anders als Docker Run, oder? docker run würde
‫niemals einen Container neu erstellen.
‫Wenn wir also einen dieser Docker-Dienstbefehle ausführen, sprechen wir nicht direkt mit einer
‫Aktion wie dem Erstellen eines Containers.
‫Wir erzählen gerade einem Orchestrierungssystem, hey, setzen Sie diesen Job in Ihre Warteschlange.
‫Wenn Sie dazu kommen, führen Sie bitte die Aktionen für den Schwarm aus, den ich hier gefragt habe. Das ist ein großer
‫Unterschied.
‫Es ist subtil in der Befehlszeile, aber es ist ein großer Unterschied, weil es Rollback-Möglichkeiten gibt.
‫Es gibt eine Schadensminderung und eine Menge Intelligenz.
‫In diesem Fall müsste ich den Dienst entfernen, wenn ich
‫tatsächlich alle diese Container entfernen wollte. Ich müsste den Docker-Service erledigen.
‫Und dann der Frost.
‫Wenn wir einen Docker-Service durchführen, sehen wir nichts. Wenn wir einen
‫Docker-Container erstellen, sehen wir drei Container.
‫Oh und los geht's.
‫Das zeigt genau dort, wie die Automatisierung im Backend abläuft.
‫Wir konnten schnell nachweisen, dass wir den Dienst gelöscht haben, aber das Orchestrierungssystem hat nicht alle Prozesse
‫zur Bereinigung des Dienstes und der dahinter stehenden Aufgabe durchlaufen. Diese Konzepte sollten ziemlich einfach zu verstehen sein,
‫da sie die Docker-Laufkonzepte, die wir zuvor in diesem Kurs hatten, wirklich
‫erweitern.
‫Als nächstes bauen wir einen Multi-Node-Schwarm und skalieren unsere Container.