‫Service-Updates. Sie haben wahrscheinlich die ganze Zeit davon ausgegangen, dass es eine Möglichkeit gibt, Ihre Dienste
‫zu aktualisieren, obwohl wir uns noch nicht darauf konzentriert haben.
‫Reden wir darüber, denn Updates haben eine Menge zu bieten. Die Aktualisierungsfunktion von Swarm konzentriert sich auf
‫ein fortlaufendes Aktualisierungsmuster für Ihre Replikate. Wenn Sie also einen Dienst mit mehr als einem
‫Replikat haben und dies hoffentlich auch tun, wird er standardmäßig nacheinander durchlaufen und jeden Container
‫aktualisieren, indem er durch die neuen Einstellungen ersetzt wird, die Sie in das Update
‫einfügen Befehl.
‫Viele Leute werden sagen, dass Orchestratoren Ausfallzeiten bei Updates verhindern, aber ich werde nicht sagen,
‫dass dies Ausfallzeiten verhindert.
‫Ich werde sagen, es begrenzt Ausfallzeiten. Weil das Verhindern von Ausfallzeiten in jedem System die Aufgabe des Testens ist.
‫Sie müssen wirklich testen, wie Sie Ihre Updates durchführen und feststellen, ob dies Auswirkungen auf meine Benutzer hat.
‫Hat die Aktualisierung einer Datenbank Auswirkungen auf meine Webanwendung? Das tut es wahrscheinlich.
‫Jede Anwendung, für die Sie einen Service haben, wird aktualisiert und wirkt sich auf die anderen Dinge
‫anders aus.
‫Das ist nicht die Aufgabe eines Orchestrators.
‫Ein Orchestrator kann nicht feststellen, dass es sich bei diesem Protokoll um ein Datenbankprotokoll handelt, und bei diesem handelt es sich um ein REST-Anwendungsprotokoll,
‫das einfach ist.
‫Das werden also unterschiedliche, komplizierte Dinge sein, mit denen Sie sich befassen müssen.
‫Wenn es sich bei Service-Updates nur um eine REST-API oder ein Web-Frontend handelt, das nichts Besonderes wie Web-Sockets oder
‫langes Polling tut, wenn es sich um etwas sehr Einfaches wie diese oder eine statische Website handelt, liegt
‫wahrscheinlich ein einfaches Update vor Es wird kein Problem sein.
‫Aber andere Dienste wie Datenbanken oder persistenter Speicher oder alles, was eine persistente Verbindung erfordert ...
‫Diese werden immer eine Herausforderung sein, egal was Sie aktualisieren möchten.
‫Also früh testen und oft testen.
‫Wie ich schon sagte, wird dies definitiv Container in den meisten Updates ersetzen. Sofern Sie mit dem
‫Service keine Beschriftung oder andere Metadaten
‫aktualisieren, wird jeder Container durch einen völlig neuen ersetzt.
‫Seien Sie einfach darauf vorbereitet. Es gibt viele Möglichkeiten. Tatsächlich gab es
‫beim letzten Zählen mindestens 77 Optionen für den Aktualisierungsbefehl. Aber fast alles, was Sie tun möchten,
‫kann optimiert werden.
‫Bei vielen Optionen im Befehl update handelt es sich tatsächlich um Erstellungsoptionen, an deren Ende
‫lediglich ein -rm und ein -add stehen. Wenn es sich um eine Option handelt, die für mehrere
‫Werte verwendet werden kann, sagen wir einen zu veröffentlichenden Port oder eine Umgebungsvariable, die Sie häufig verwenden können.
‫Richtig?
‫Sie müssen also in der Lage sein, dem Update-Befehl mitzuteilen, welche Sie hinzufügen und welche Sie entfernen.
‫Wir werden die in einer Minute sehen.
‫Dies umfasst auch Rollback- und Integritätsprüfungsoptionen.
‫Sehen Sie sich die Optionen für diese an und prüfen Sie, ob ihre Standardwerte für Ihre Anwendung nicht ideal
‫sind. Testen Sie verschiedene Einstellungen, um festzustellen, ob ein Update für Sie und Ihr System einfacher ist.
‫Sie werden auch sehen, dass wir hier Skalierungs- und Rollback-Optionen haben, die jetzt ihre eigenen Befehle sind.
‫Früher waren dies Optionen, die Sie mit --rollback oder --scale angeben mussten, aber so viele Leute
‫haben diese so häufig verwendet, dass Docker sie jetzt zu erstklassigen Bürgern in der
‫Befehlszeile macht.
‫Sie könnten in Zukunft weitere hinzufügen.
‫Bevor wir zu einigen Beispielen kommen, ist eine Stapelbereitstellung auf demselben Stapel ein Update, wenn Sie Stapel
‫ausführen.
‫Tatsächlich gibt es keine separate Option für Stapelaktualisierungen.
‫Sie führen nur eine Stapelbereitstellung mit derselben Datei durch, die bearbeitet wurde.
‫Dann funktioniert es mit den Dienstbefehlen, den Netzwerken und allen anderen Aktionen. Es wird mit ihnen
‫zusammenarbeiten, um sicherzustellen, dass alle erforderlichen Änderungen übernommen werden.
‫Schauen wir uns einige kurze Beispiele an und dann kommen wir zur Kommandozeile.
‫Dies ist wahrscheinlich das häufigste Beispiel, das Sie verwenden, um das Image eines Dienstes zu
‫ändern.
‫Jedes Mal, wenn Sie Ihre App aktualisieren und ein neues Image erstellen, müssen
‫Sie einen Dienstaktualisierungsbefehl mit dem Image-Namen und anschließend dem Dienstnamen ausführen.
‫In diesem Fall hatte ich vielleicht eine Bewerbung mit dem Tag 1. 2. 0.
‫Und in diesem Fall wende ich jetzt eine 1 an. 2. 1 Bild, und der Dienst wird
‫feststellen, ah ja, das ist ein anderes Bild, als ich in
‫meinem Dienst ausgeführt habe, und wir werden sie gehen und aktualisieren. In diesem nächsten Abschnitt zeigen wir, wie Sie mit einem einzigen Update-Befehl
‫mehrere Dinge gleichzeitig ausführen können.
‫Sie können mit dem Befehl env-add eine Umgebungsvariable hinzufügen und anschließend mit dem Befehl publish -rm
‫einen Port entfernen.
‫Wir könnten auch Umgebungsvariablen hinzufügen und entfernen und Ports mit demselben Aktualisierungsbefehl
‫veröffentlichen, so oft wir möchten. In diesem letzten Beispiel wird gezeigt, wie wir diese
‫neuen Skalierungs- und Rollback-Befehle für mehrere Dienste gleichzeitig verwenden können. Einer der Vorteile ihrer Verwendung gegenüber dem
‫Befehl update besteht darin, dass sie auf mehrere Dienste angewendet werden können.
‫In diesem Fall werde ich tatsächlich die Anzahl der Replikate des Webs und der
‫API-Dienste gleichzeitig ändern.
‫Wie ich vor einiger Zeit sagte, haben Sie in den Swarm-Updates keinen anderen Bereitstellungsbefehl.
‫Es ist genau die gleiche Docker-Stapelbereitstellung, mit der Datei, die Sie bearbeitet haben, und es ist
‫Aufgabe, mit allen anderen Teilen der API zusammenzuarbeiten, um
‫festzustellen, ob Änderungen erforderlich sind, und diese dann mit einem Service-Update bereitzustellen.
‫Gut. Beginnen wir damit, einen Dienst zu erstellen, damit wir ihn mit einigen Aktualisierungsbefehlen bearbeiten können.
‫Docker-Dienst erstellen -p 8088 80 Name Web, und wir werden Nginx verwenden, und wir werden eine Version angeben, wie wir
‫es immer in der Produktion sollten.
‫Es ist schön, jetzt, da wir in der letzten Jahreshälfte 2017 tatsächlich die Option zum Trennen mit unseren Befehlen zum Erstellen und
‫Aktualisieren von Diensten haben, können wir dies tatsächlich synchron in Echtzeit sehen.
‫Dies ist also gut für Update-Befehle, um zu sehen, wie Updates tatsächlich über die Befehlszeile übertragen werden.
‫Gut. Wenn wir jetzt einen Docker-Dienst ausführen, stellen wir
‫fest, dass unser Dienst ausgeführt wird und 1 von 1 Replikaten vorhanden ist.
‫Lassen Sie uns jetzt unseren Service erweitern, damit wir mehr Replikate haben, mit denen wir arbeiten können. Docker-Service-Skala Web =
‫5. Und du hast gerade gesehen, dass einer von denen bereits
‫lief und die anderen 4 anfangen mussten. Bei mir ging es ziemlich schnell, da
‫ich das Image bereits heruntergeladen hatte, aber es kann einige Minuten dauern, bis das Image auf den anderen
‫Knoten heruntergeladen wurde.
‫Gut.
‫Lassen Sie uns ein laufendes Update durchführen, indem Sie das Image dieses Nginx ändern.
‫Sie werden hier sehen, dass ich ein älteres Bild ausgewählt habe.
‫Docker ist es nun egal, wie das Bild tatsächlich aussieht.
‫Es könnte eine völlig andere
‫Anwendung für alles sein, was es interessiert. Es ist nur bekannt, dass ich in diesem Dienst ein anderes Bild verwende.
‫Denken Sie daran, dass es standardmäßig nacheinander hier durchlaufen wird.
‫Es wird zuerst entfernt, ein neues erstellt und dann, wenn dieses gut ist
‫und es gesund aussieht, mit dem nächsten begonnen. Im nächsten Beispiel werden wir den veröffentlichten Port
‫ändern.
‫Sie können einen Port jedoch nicht ändern.
‫Sie müssen sie tatsächlich gleichzeitig hinzufügen und entfernen.
‫In diesem Fall müssen wir ein Docker-Service-Update veröffentlichen, da wir es zuerst mit
‫einem 8088 veröffentlicht haben. Ich muss den Wert nicht angeben. Ich muss nur den Schlüssel angeben. Dann werden
‫wir den neuen 9090 veröffentlichen. Dann ist der Wert, der in diesem Fall 80 ist. Sie werden feststellen, dass
‫derselbe Aktualisierungsvorgang wie zuvor ausgeführt wird.
‫Das letzte Beispiel, über das ich sprechen möchte, ist eine Art Tipp. Weil Sie häufig eine Herausforderung mit etwas haben,
‫das als Neuausgleich bezeichnet wird. Oder wenn Sie die Anzahl der Knoten ändern oder viele Dinge bewegen, wenn Sie viele Container
‫in Ihrem Schwarm haben, stellen Sie möglicherweise fest, dass sie nicht wirklich ausgeglichen sind. Sie haben vielleicht einige
‫Knoten, die ziemlich leicht zu erkennen sind, wie viele Container
‫ausgeführt werden, und andere, die viel enthalten. Wenn sich eine Menge Dinge ändern, bewegt Swarm die Dinge nicht, um das Gleichgewicht
‫in Bezug auf die Anzahl der verwendeten Ressourcen zu halten.
‫Sie können jedoch eine Aktualisierung eines Dienstes erzwingen, ohne Änderungen an diesem Dienst vorzunehmen.
‫Anschließend werden Aufgaben erneut ausgegeben, und in diesem Fall werden die am wenigsten verwendeten Knoten ausgewählt. Dies ist eine Form des Neuausgleichs.
‫Oft in einem kleineren Schwarm, wenn ich etwas Großes bewege oder ein paar Knoten hinzufüge, habe ich plötzlich ein paar
‫leere Server, die nichts tun, und ich muss daran arbeiten.
‫Ich werde also einen oder zwei meiner Dienste in Anspruch nehmen und ein Docker-Dienstupdate durchführen
‫- force, und in diesem Fall werden die Aufgaben durchlaufen und vollständig ersetzt.
‫Natürlich wird der Standard des Zeitplans verwendet, um nach Knoten mit der geringsten Anzahl von Containern und
‫der geringsten Anzahl von verwendeten Ressourcen zu suchen.
‫Das ist eine Art Trick, um eine ungerade Menge an Arbeit an Ihren Knoten zu umgehen.
‫Denken Sie daran, den Dienst, den wir in dieser Vorlesung erstellt haben, zu entfernen, um aufzuräumen.