PuppetConf 2016. Kubernetes für Systemadministratoren. Teil 1

Ich bin ein Systemadministrator, der sich mit Computern befasst, und heute werden wir über Kubernetes sprechen. Ich werde versuchen, mich eingehender mit dem Thema zu befassen, wobei ich überlege, welche Probleme der Systemadministrator mit dieser Anwendung lösen kann, und auch einige Aspekte der Puppet-Operation ansprechen, die mithilfe einer Reihe neuer Abstraktionen für die Anwendung in diese Welt zu passen schienen.
Vor fünf oder sechs Jahren schlugen Luis Andre Barroso und Urs Hoesl im Artikel „Rechenzentrum als Computer“ vor, das Rechenzentrum als einen massiven Computer wahrzunehmen. Es ist notwendig, von der Tatsache zu abstrahieren, dass das Rechenzentrum aus separaten Maschinen besteht, und es als eine logische Einheit zu betrachten. Sobald Sie versuchen, diese Idee in die Praxis umzusetzen, können Sie die Prinzipien des Aufbaus verteilter Systeme und des verteilten Rechnens auf Rechenzentren anwenden.



Um das Rechenzentrum als Computer zu behandeln, benötigen Sie ein Betriebssystem. Es sieht dem auf einem separaten Computer sehr ähnlich, muss jedoch über eine andere Schnittstelle verfügen, da Sie keinen Zugriff auf einen separaten Computer und keinen Zugriff auf den Kernel benötigen. Stellen wir uns das Rechenzentrum also als einen großen Computer vor. Heute werde ich Ihnen sagen, was zu tun ist, wenn Sie anscheinend nicht in der Lage sind, einen Computer mit SSH zu steuern. Sie können sich nicht anmelden, und obwohl einige Leute glauben, dass es ohne dies unmöglich ist, das System zu steuern, werde ich Ihnen sagen, wie viel mit Kubernetes getan werden kann. Zunächst sollten Sie sich Kubernetes als Framework zum Erstellen verteilter Plattformen vorstellen.



Dies bedeutet nicht, dass Sie nach dem Herunterladen von Kubernetes eine Benutzeroberfläche erhalten, die Ihnen alles bietet, was Sie mit dem System tun möchten. Nein, dies ist nur die Grundlage für die Erstellung der Tools, die Sie zum Ausführen Ihrer Infrastruktur benötigen. Ich zeige Ihnen, wie Sie mithilfe der Let's Encrypt Certificate Authority eine Integration erstellen, um den Zertifikatsprozess für meine Anwendung mithilfe von Kubernetes als Framework zu automatisieren.



Viele Leute fragen genau, wofür Kubernetes gut ist. Ich habe viele Jahre mit Puppet Labs zusammengearbeitet und festgestellt, dass dieses Ding auf Computern installiert wurde, um dem System eine API zur Verfügung zu stellen, die es bisher noch nicht gab. Anstelle von Bash, YAML-Skripten und ähnlichen Dingen stellte Puppet einen DSL-Benutzer zur Verfügung, der es ihm ermöglichte, programmgesteuert ohne Shell-Skripte mit den Maschinen zu interagieren. Der Unterschied zwischen Kubernetes besteht darin, dass es sich über dem Niveau von "Eisen" befindet. Konzentrieren wir uns weniger auf die Automatisierung und Abstraktion dieses Systems als vielmehr auf die Beziehungen oder den Vertrag zwischen unserer Infrastruktur und den Anwendungen, die wir von jedem Knoten aus abrufen werden. In Kubernetes weisen wir Maschinen keine Anwendungen zu. Es gibt kein "Knotenmanifest". Der Scheduler betrachtet einzelne Knoten einfach als Rechenzentrumsressourcen.einen großen Computer darstellen.

Fragen: "Läuft Kubernetes auf OpenStack, auf VMware, auf Bare Metal, in der Cloud?" mach keinen Sinn Die richtige Frage lautet: "Kann ich den Kubernetes-Agenten ausführen, um diese Ressourcen abzurufen?" Die Antwort lautet "Ja". Weil der Betrieb dieser Anwendung völlig unabhängig von der von Ihnen gewählten Plattform ist.



Kubernetes ist plattformunabhängig. Kubernetes ist genauso deklarativ wie Puppet. Daher geben Sie an, für welche Anwendung Sie sie verwenden möchten - in diesem Beispiel handelt es sich um Nginx. Dies ist ein Vertrag zwischen Ihnen, dem Entwickler, und Kubernetes, um Container-Images zu erstellen.

Ich verwende gerne die Analogie mit der FedEx-Kurierfirma - Sie können ihnen nicht einen ganzen Wagen ziehen und warten, bis sie alles sortieren und dorthin schicken, wo es sein sollte. Sie haben eine Regel: Pack deine Sachen in eine Kiste. Sobald Sie dies tun, senden sie Ihre Box und können erkennen, wann sie am Ziel ankommt. "Wenn Sie keine Box haben, können Sie nicht mit unserem System arbeiten."

Wenn Sie mit Containern arbeiten, ist es daher sinnlos zu diskutieren, was Sie haben - Python, Java und oder etwas anderes, es spielt keine Rolle - nehmen Sie einfach alle Ihre Abhängigkeiten und legen Sie sie in den Container. Viele Leute sagen über Container, dass sie die Probleme der gesamten Infrastruktur zu lösen scheinen. Das Problem ist jedoch, dass Menschen Container nicht als zwei verschiedene Dinge wahrnehmen, die sie wirklich sind. Das erste ist die Idee eines Verpackungsformats, das zweite ist die Idee einer Container-Laufzeit. Dies sind zwei verschiedene Dinge, die nicht unbedingt dieselben Werkzeuge erfordern.

Welcher der Anwesenden hat die Container erstellt? Und wer baut mit Puppet Container? Das stimmt, dem stimme ich auch nicht zu! Sie können sagen: „Wie so? Du bist auf der Puppenkonferenz, da musst du zustimmen! “ Der Grund, warum ich mit der Idee, Container in Puppet zu bauen, nicht einverstanden bin, ist folgender: Ich weiß nicht, ob wir sie überhaupt brauchen, da die Dinge, die wir zum Erstellen eines Bildes benötigen, sich von den Dingen unterscheiden, die wir zum Starten des Produktprozesses benötigen.

Stellen wir uns vor, Sie erstellen eine Software-Pipeline und sehen sich diese Docker-Datei an. Schließen Sie Ihre Augen vor denen, die diese Dateien noch nie gesehen haben, denn für Sie können sie einschüchternd aussehen. Diese Datei zeigt, wie Sie eine Ruby on Rails-Anwendung erstellen - eine Ruby-Anwendung mit einem Rails-Framework.



Es heißt "FROM ruby ​​2.3.1", was wahrscheinlich das gesamte Betriebssystem in den Container einfügen wird, in diesem Fall das grundlegende Ruby-Image von alpine-linux. Weiß jemand, warum wir Ubuntu- oder Red Hat-Images in diese Container einbetten? Die meisten Menschen wissen nicht, was Abhängigkeiten sind, und verwenden einen zufälligen Ansatz, indem sie einfach das gesamte Betriebssystem in einen Container stopfen, um sicherzustellen, dass sie ihre Abhängigkeiten irgendwo im Inneren haben. Nachdem Sie dieses Ding erstellt haben, müssen Sie es nur einmal ausführen. Hier kommt das Missverständnis her: Wenn dieses Ding nicht funktioniert, ändern Sie die Codezeile, bis es funktioniert. Einfach nachschauen! Sie müssen mit diesen Dateien nicht zu schlau sein. Ihr Ziel ist es, eine Offline-Darstellung Ihrer Anwendung mit allen Abhängigkeiten zu erstellen. Dies ist nur eine Krücke, die wir von Ubuntu als Ausgangspunkt verwenden.

Wenn Sie die Anwendung gerade erstellt und gestartet hätten, würden Sie so etwas wie einen statischen Link verwenden. Keine Abhängigkeiten vom Host, in Ihrem Container hätten Sie nur eine Binärdatei einer einzeiligen Docker-Datei und keine grundlegenden Images. Tatsächlich ist es nur eine Übertragung von Dingen, die uns vertraut sind. Sehen Sie, wie diese Baugruppe aussehen wird.



Ich habe diese Datei zuvor erstellt, aber normalerweise sieht es nach einem Versuch aus, das gesamte Internet aufzubauen. Ich habe ein wenig Angst vor dieser Versammlung, weil ich nicht sicher bin, ob das lokale Internet mit Ruby umgehen kann. Sehen Sie, was passiert ist.



Wie gefällt dir dieses Volumen von 1 Gig? Darüber hinaus kann die Quelldatei, dh Ihre Anwendung selbst, beispielsweise nur 100 kB belegen. Wie haben wir ein ganzes Gigabyte bekommen? Dies liegt daran, dass wir ineffiziente Tools zum Erstellen eigenständiger Anwendungen verwenden. Alle von ihnen sind für die Ausführung auf Computern ausgelegt und verwenden dynamische Bibliotheken, die aus der externen Umgebung geladen wurden.

Jetzt werden wir versuchen, das zu tun, was wir auf einem Mobiltelefon tun - tragbare Versionen von Anwendungen, für deren Nutzung ein Vertrag zwischen Ihnen und der Infrastruktur besteht. Sobald wir einen solchen Vertrag haben, können wir dem System genau sagen, was es tun soll, und es ist ihm egal, was zu tun ist.

Sie haben keine spezielle, speziell erstellte Anwendung. Ich bin auf Unternehmen gestoßen, die sagen: „Wir haben eine spezielle Anwendung!“. Ich sage: "Ratet mal, was es tut: Es startet, bindet an den Port, empfängt Datenverkehr, macht etwas mit den Daten" und sie sind: "Wow, woher weißt du das?" Ich weiß, weil es hier nichts Besonderes gibt!

Also nehmen wir das Beispiel, das wir in den Container gelegt haben, und senden es an den API-Server. Als nächstes müssen wir daraus etwas machen, das auf unserer Maschine funktioniert. Um jedoch Ressourcen vom Computer zu sammeln, müssen wir verschiedene Dinge installieren: eine Container-Laufzeit für die Docker-Datei, einen Agenten, der versteht, wie er mit dem Assistenten kommuniziert, um alles Notwendige auszuführen, und wie die Systemantwort lauten soll, damit die Anwendung funktioniert . Dieser Agent beobachtet einfach - es gibt keine 30-Sekunden-Intervalle, wiederholte Überprüfungen, nichts dergleichen. Er beobachtet einfach und sagt: „Wenn es Arbeit für mich gibt, lassen Sie es mich wissen, und ich werde beginnen und Sie ständig über den Status des Prozesses informieren“, damit Sie wissen, dass es funktioniert.



Sobald wir dies mit dem Auto tun, brauchen wir einen Planer. Wie viele Personen verwenden den Scheduler? Sie müssen alle Ihre Hände heben! Dies entspricht der Antwort auf die Frage: "Wer von Ihnen hat einen Laptop mit mehr als einem Single-Core-Prozessor?" Wenn ich eine Frage zum Planer stelle, heben die meisten ihre Hände nicht.

Wenn Sie Ihren Prozess auf einem Computer starten, sollte etwas auswählen, welcher Prozessor verwendet werden soll. Wer macht das? Das stimmt, der Kern. Jetzt werde ich euch erklären, was ein Planer ist. Der schnellste Weg, dies zu tun, ist Tetris zu spielen. Das erste, was wir diskutieren werden, ist die automatische Bereitstellung.



Wie viele von Ihnen haben die vollautomatische Bereitstellung verwendet? Ich denke, deshalb sind wir alle hier. Also drücke ich den Knopf, die Blöcke fallen von oben herunter und jetzt kannst du ein Bier trinken gehen. Beachten Sie jedoch, was links und rechts passiert: Ihr Prozessor und Ihr Speicher werden zum Papierkorb.



Dies liegt daran, dass die meisten Benutzer nicht mehr als 5% der Computerressourcen verwenden. Sie automatisieren Prozesse, verlieren aber eine Menge Geld. Ich arbeite als Cloud-Anbieter, ich habe riesige Ressourcenreserven, aber es ist einfach schrecklich, wenn Leute auf ähnliche Weise Geld ausgeben.

Wenn Sie den Scheduler verwenden, steuern Sie in Analogie zu Tetris das Spielfeld und jeden Block, indem Sie ihn an die richtige Stelle leiten, dh die Ressourcen der Maschine optimal nutzen. Kubernetes verwendet hierfür einige Algorithmen. Der Hauptalgorithmus heißt Bin Packing - der gleiche „Tetris“ hilft, ihn zu verstehen. Kubernetes erhält eine Arbeitslast in verschiedenen Formen und Größen, und unsere Aufgabe ist es, sie optimal in Maschinen zu verpacken.

Unser Ziel ist es, alle Ressourcen, die im Verlauf der Arbeit verfügbar werden, wiederzuverwenden. Nicht alle Workloads sind gleich, daher ist es schwierig, sie in dieselbe Box zu packen. In Kubernetes gibt es jedoch immer den richtigen Cluster, in dem Sie ihn platzieren und ausführen können, wenn ein „Teil“ der Arbeitslast angezeigt wird (oder der Tetris-Block, wenn wir unsere Analogie fortsetzen). Und wie bei jeder Stapelverarbeitung erhalten wir nach Abschluss der Aufgabe alle zuvor belegten Ressourcen zurück, damit wir sie für zukünftige Aufgaben verwenden können.

Da wir nicht im Spiel, sondern in der realen Welt leben, haben Sie Lösungen entwickelt, die vor vielen Jahren entwickelt wurden. Dann werden Sie Systemadministrator, Arbeitgeber zeigen Ihnen ihre Produktion und Sie stellen fest, dass ihre Bereitstellung nicht gut genug ist.



Sie können Cluster-Manager auf Teilen Ihrer Computer installieren und bestimmte Ressourcen verwalten lassen. In diesem speziellen Fall können Sie Kubernetes verwenden, die die leeren Bereiche Ihres Tetris ausfüllen, wenn Sie vorwärts gehen.
Lassen Sie diejenigen, die in der Branche arbeiten, ihre Hände heben. Ja, das ist ein Klassiker namens Gehalt. Angenommen, Sie haben mehrere Probleme in Ihrem Unternehmen. Das erste ist, dass alles in Java oder sogar in COBOL geschrieben ist - normalerweise ist niemand dazu bereit.

Das zweite Problem, das in Unternehmen häufig auftritt, ist das Oracle DBMS. Dies ist so etwas, das sich auf der Rückseite der Software befindet und sagt: "Versuchen Sie nicht, etwas zu automatisieren!". Wenn Sie die Software automatisieren, steigen Ihre Kosten. Daher keine Automatisierung - wir fördern unser Beratungs-Ökosystem!

In der Regel wird unter solchen Umständen gefragt, ob Kubernetes einfach zur Lösung dieser Probleme verwendet werden kann. Ich antworte: "Nein", denn in einer Situation, die der Niederlage in Tetris ähnelt, hilft Ihnen nichts. Sie müssen etwas anderes tun, nämlich den Scheduler verwenden.
Jetzt, da wir einen Scheduler haben, der Workloads erfolgreich versteht, können Sie einfach alles in Kästchen packen, und der Scheduler beginnt mit seiner Arbeit.



Lassen Sie uns über die Schlüsselentitäten von Kubernetes sprechen. Erstens sind dies Pods Pods, bei denen es sich um eine Sammlung von Behältern handelt. In den meisten Fällen besteht eine Anwendung aus mehr als einer Komponente. Sie können sich eine Anwendung anhängen, die ohne Java-Skripte geschrieben wurde. Möglicherweise möchten Sie jedoch nginx verwenden, um TLS und nur einen Proxy im Hintergrund der Anwendung zu vervollständigen. Anschließend sollten diese Elemente miteinander verbunden werden, da es sich um fest codierte Abhängigkeiten handelt. Eine lose gekoppelte Abhängigkeit ist eine Datenbank, die Sie unabhängig voneinander skalieren.



Das zweite wichtige Element ist der Replication Controller, der die Prozesse im Kubernetes-Cluster verwaltet. Sie können mehrere Instanzen von Herden erstellen und deren Zustand überwachen.

Wenn Sie sagen, dass Sie einen Prozess starten möchten, bedeutet dies, dass er die ganze Zeit irgendwo im Cluster funktioniert.

Das dritte wichtige Element ist der Service, eine Reihe von kollaborativen Herden. Ihre Bereitstellung basiert auf der dynamischen Bestimmung des gewünschten Status - wo die Anwendungen funktionieren sollen, mit welcher IP-Adresse usw. Sie benötigen also eine Art Service.

Das vierte Element sind die Volumes-Repositorys, die als Verzeichnisse angesehen werden können, die für Container im Herd verfügbar sind. Kubernetes verfügt über verschiedene Arten von Volumes, die bestimmen, wie dieser Speicher erstellt wird und was er enthält. Das Konzept der Lautstärke war auch in Docker vorhanden, aber das Problem war, dass der Speicher dort auf einen bestimmten Herd beschränkt war. Sobald Under aufhörte zu existieren, verschwand Volume damit.

Der von Kubernetes erstellte Speicher ist nicht auf einen Container beschränkt. Es unterstützt einen oder alle im Herd bereitgestellten Container. Ein wesentlicher Vorteil von Kubernetes Volume ist die Unterstützung verschiedener Speichertypen, die Pod gleichzeitig verwenden kann.

Schauen wir uns an, was ein Container ist. Dies ist das Bildformat, in dem unsere Anwendung mit allen Abhängigkeiten gepackt ist, und die Hauptkonfiguration der Laufzeitumgebung, die zeigt, wie diese Anwendung funktionieren sollte. Dies sind zwei verschiedene Elemente, obwohl Sie alles in diese Sache packen können, insbesondere das Root-Dateisystem als komprimierte Tarball-Tar-Datei, die viele Konfigurationsdateien für ein bestimmtes System enthält.



Dann können wir die Verteilung durchführen, ein Prozess, der Ihnen allen vertraut ist - RPM oder ein anderes Repository-System wird hier verwendet. Sie nehmen all diese Dinge und legen sie in das Repository. Dieser Prozess ist dem bei Betriebssystempaketen sehr ähnlich, nur für Container, die aus Images erstellt werden.



Mit Pod können Sie alles zusammenstellen, was unsere logische Anwendung benötigt. Eine logische Anwendung ist ein Tool zum Verwalten mehrerer Anwendungen innerhalb desselben Systemprofils. Ein Sub ist ein Ressourcenpaket, das einen oder mehrere Container und Speicher, einen gemeinsamen Namespace und eine IP-Adresse pro Sub enthält. Tresore können zwischen Containern verteilt werden.



Im Allgemeinen ähnelt das Herddesign einer virtuellen Maschine. Es stellt sicher, dass die Anwendung als atomare Einheit gestartet und gestoppt wird. Die nächste Folie zeigt, wie der Replikationscontroller aussieht. Wenn ich diese Deklaration an den Server sende und sage: "Hey, ich möchte, dass eine Replik der Foo-Anwendung funktioniert!", Erstellt der Controller sie aus der Vorlage und sendet sie an den Scheduler, der die Anwendung auf Knoten 1 platziert. Wir geben nicht an auf welcher Maschine es laufen soll, obwohl wir es schaffen können. Erhöhen Sie nun die Anzahl der Replikate auf 3.



Welche Aktionen erwarten Sie vom System, wenn einer der Computer ausfällt? In diesem Fall bringt der Replikationscontroller den aktuellen Status des Systems in den gewünschten Status und verschiebt ihn unter dem Container von der dritten, nicht arbeitenden Maschine zur zweiten.



Sie müssen sich nicht mit diesem Prozess befassen und ihn steuern. Wenn Sie die Arbeit dem Controller anvertrauen, können Sie sicher sein, dass die Anwendung ordnungsgemäß sichergestellt wird, indem Sie ständig Änderungen des aktuellen Zustands der Infrastruktur überwachen und Entscheidungen treffen, die sicherstellen, dass das System funktioniert.

Diese Dinge sind ihrer Zeit voraus - Sie sagen dem System einfach: „Ich möchte, dass diese drei Maschinen funktionieren!“ Und hier endet Ihre Kontrolle. Dieser Ansatz unterscheidet sich stark von Skripten und reiner Automatisierung, wenn Sie wirklich verwalten müssen, was gerade passiert, um die zukünftige Entscheidung zu beeinflussen. Sie können dies alles nicht kodifizieren, ohne eingehende Informationen empfangen zu können, um richtig auf die Situation zu reagieren. Der oben beschriebene Ansatz bietet Ihnen diese Möglichkeit.
Wie stellen Sie sich die Konfiguration vor - das Konzept der Konfigurationsdateien für Dienste? Viele Leute schweigen über dieses Problem, wenn es um Container geht, aber wir brauchen noch eine Konfiguration, es verschwindet nirgendwo!

Kubernetes verwendet auch das Secrets-Konzept, mit dem verschlüsselte Daten zwischen Managern und Nods-Knoten gespeichert und übertragen werden.

Wir lassen Puppet niemals in einem Container laufen, weil es keinen Grund dafür gibt. Sie können Puppet verwenden, um eine Konfigurationsdatei zu generieren, möchten diese jedoch weiterhin in Kubernetis speichern, da Sie sie zur Laufzeit verteilen können. Mal sehen, wie es aussieht.



In diesem Beispiel erstellen wir ein Geheimnis aus einer Datei und speichern es auf dem Kubernetes-API-Server. Sie können sich vorstellen, dass Sie diesen Teil durch etwas wie Puppet ersetzt haben, das die eRB-Vorlage und versteckte Daten verwendet, um den Inhalt des Geheimnisses auszufüllen - es spielt keine Rolle, wer es tut, aber Sie können es trotzdem tun.

Sobald das Geheimnis vorhanden ist, kann es als Link zum Erstellen einer Bereitstellung dienen, in der steht: "Ich möchte dieses Geheimnis verwenden!" In diesem Fall führt Kubernetes Folgendes aus.



Es erstellt einen Pod, entnimmt Daten aus dem Geheimen, legt sie in einem temporären Dateisystem ab und präsentiert sie als Container, genau wie Puppet eine Kopie auf einem Computer erstellt. Dies folgt dem Lebenszyklus der Anwendung, und wenn die Anwendung stirbt, verschwindet die Konfiguration mit ihr. Wenn Sie 10.000 Anwendungsinstanzen benötigen, müssen Sie weniger als 10.000 temporäre Dateisysteme erstellen und in diese einfügen.

Mit Services können Sie alle diese Elemente in einem Cluster ausführen und mit einem anderen Endpunkt synchronisieren. Tatsächlich ist ein Dienst eine Gruppe von Herden, die als ein einziger Herd fungieren. Es enthält eine permanente IP-Adresse und einen Port, bietet eine Integration in DNS, verwendet den Lastenausgleich und wird aktualisiert, wenn sich die Firmware ändert.



Betrachten wir nun die Zusammenarbeit der konzeptionellen Komponenten von Kubernetes. Wir haben Legosteine ​​und Konfigurationen, die miteinander interagieren müssen. Wenn Sie beabsichtigen, eine Datenbank in einem Cluster auszuführen, können Sie dies wirklich auf Kubernetes tun. Viele sagen, dass Sie keine Stateful-Anwendungen in Containern ausführen können, aber das ist völlig falsch.

Wenn Sie darüber nachdenken, wie Hypervisoren funktionieren, können Sie verstehen, dass sie fast dasselbe tun wie Sie: Erstellen Sie eine virtuelle Maschine, der Scheduler verschiebt sie auf den Hypervisor und hängt den Speicher an. Manchmal arbeiten Sie mit lokalem Speicher, der vom Hypervisor stammt, und es gibt keine Gründe, warum Container nicht dasselbe tun könnten.

Das Problem bei Containern besteht jedoch darin, dass die meisten Benutzer nicht daran gewöhnt sind, eine explizite Liste von Dateipfaden zu haben, die sie für die Anwendung bereitstellen müssen. Die meisten Benutzer können Ihnen nicht genau sagen, welche Geräte und Dateien das Data Warehouse benötigt. Sie verpacken alles in Behältern, und als Ergebnis kommt nichts Gutes dabei heraus. Glauben Sie daher nicht, dass Container keine zustandssparenden Anwendungen ausführen können - Sie können dies sehr gut tun.



Auf der Folie sehen Sie ein Beispiel für Ruby-on-Rails. Bevor wir unsere Anwendung verwenden können, müssen wir die Datenbank migrieren. Kommen wir zur Live-Demo des Programms. Um die Bereitstellung durchzuführen, verwende ich MY_SQL, und Sie sehen viele Daten auf dem Bildschirm.



Ich zeige Ihnen das alles, weil Sie als Systemadministrator viele Dinge verstehen müssen. In dieser Bereitstellung verfeinere ich einige Metadaten meiner Anwendung, aber die Hauptsache, die ich grau hervorheben werde: Ich möchte 1 Kopie der MySQL-Anwendung starten und die MySQL-Container-Version 5.6.32 verwenden.



Beachten Sie, dass ich hier ein Geheimnis von Kubernetes als Links auswähle, das ich in diesem Fall als Umgebungsvariablen einfügen werde. Später werde ich Ihnen einen anderen Fall zeigen, wenn wir sie in das Dateisystem einfügen. Daher muss ich in meiner Konfiguration keine Geheimnisse „backen“. Die nächste wichtige Zeile ist der Ressourcenblock.



Sie können Tetris erst spielen, wenn Sie die Größe der Blöcke kennen. Viele Benutzer beginnen mit der Bereitstellung, ohne Ressourcenbeschränkungen für diesen Prozess zu verwenden. Infolgedessen ist der Arbeitsspeicher vollständig verstopft, und Sie "stapeln" den gesamten Server.

22:09 min Wird

sehr bald fortgesetzt ...


Ein bisschen Werbung :)


Vielen Dank für Ihren Aufenthalt bei uns. Gefällt dir unser Artikel? Möchten Sie weitere interessante Materialien sehen? Unterstützen Sie uns, indem Sie eine Bestellung aufgeben oder Ihren Freunden Cloud-basiertes VPS für Entwickler ab 4,99 US-Dollar empfehlen , ein einzigartiges Analogon von Einstiegsservern, das von uns für Sie erfunden wurde: Die ganze Wahrheit über VPS (KVM) E5-2697 v3 (6 Kerne) 10 GB DDR4 480 GB SSD 1 Gbit / s ab 19 $ oder wie teilt man den Server? (Optionen sind mit RAID1 und RAID10, bis zu 24 Kernen und bis zu 40 GB DDR4 verfügbar).

Dell R730xd 2-mal günstiger im Equinix Tier IV-Rechenzentrum in Amsterdam? Nur wir haben 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2,6 GHz 14C 64 GB DDR4 4 x 960 GB SSD 1 Gbit / s 100 TV von 199 US-Dollar in den Niederlanden!Dell R420 - 2x E5-2430 2,2 GHz 6C 128 GB DDR3 2x960 GB SSD 1 Gbit / s 100 TB - ab 99 US-Dollar! Lesen Sie mehr über den Aufbau eines Infrastrukturgebäudes. Klasse C mit Dell R730xd E5-2650 v4-Servern für 9.000 Euro für einen Cent?

All Articles