PuppetConf 2016. Kubernetes für Systemadministratoren. Teil 2

PuppetConf 2016. Kubernetes für Systemadministratoren. Teil 1

Legen Sie ein Ressourcenlimit fest. Mit einfachen Berechnungen können Sie berechnen, wie viele Kopien der Anwendung Sie ausführen können. Wenn eine Kopie 1 GB RAM benötigt und 10 GB Arbeitsspeicher vorhanden sind, können Sie 10 Kopien ausführen. Dies muss nicht überwacht werden, da ich weiß, dass der Kern des Systems einfach beginnt, den festgelegten Vertrag zu erfüllen. Dieser Vertrag oder die Vereinbarung zwischen Ihnen und dem System ist sehr wichtig, da alle Tools viel besser funktionieren, wenn sie verfügbar sind. So führen wir die Disziplin der Ausführung in das System ein.



Der Scheduler startet dies also nur, wenn jedes der Replikate 1 GB freien Speicher erhält. Wenn nicht genügend Speicher vorhanden ist, wird der Prozess nicht gestartet. Also gebe ich den Befehl kubectl create ein und nach seiner Ausführung wird der MySQL-Container erstellt.



Hier gibt es eine Einschränkung in Bezug auf Stateful-Systeme: Sie haben mehrere Möglichkeiten. Ich habe einen Code hervorgehoben, in dem ich angegeben habe, dass ich die PersistentDisk meines Cloud-Anbieters verwenden möchte.



Dies kann NFS, ISCSI oder ein anderes Protokoll sein, das den Zugriff auf Speichergeräte auf Netzwerkblockebene ermöglicht. Ich mache das, um meinen Speicher von den Maschinen zu trennen. Wenn einer der Computer ausfällt, kann ich den Prozess auf dem anderen Computer mit demselben Datenspeicher neu erstellen. Wenn Sie den Speicher von dem Host bereitstellen, auf dem der Fehler auftritt, verlieren Sie einfach Ihre Daten und müssen alles aus der Sicherung erneut wiederherstellen.

Daher ist es unser Ziel, dass der Speicher schneller läuft, wenn unsere Netzwerke schneller wachsen. Hier geht es nicht um Migration, sondern um die Möglichkeit, den Speicher außerhalb des Computers schnell ein- und auszuschalten. Dies ist durchaus möglich. Mal sehen, wie es mit unserem Herd läuft - er wird noch erstellt, und jetzt möchte ich Dienste dafür erstellen, damit andere Anwendungen unsere finden können.



Sobald ich diesen Dienst erstelle, generiert Kubernetes einen DNS-Eintrag, sodass Sie einfach mysql aufrufen und automatisch erkennen können, dass dieser Container ausgeführt wird. Fahren wir fort und geben Sie den Befehl $ kubectl create –f services / mysql.yaml ein. Wie Sie sehen, wird der Container noch erstellt. Sie können dieses Demo-Video übrigens auf meiner Website ansehen. Sie sehen, wie der Dienst für eine MySQL-Anwendung aussieht - er enthält die Cluster-IP-Adressen, externen IP-Adressen, Portnummern und Netzwerkprotokolle.



Mal sehen, was mit diesem speziellen Container passiert. Wie Sie sehen können, funktioniert es.



Im Moment glaube ich, dass die MySQL-Anwendung wirklich funktioniert. Das nächste, was wir brauchen, ist eine Webanwendung. Lassen Sie uns also eine solche Anwendung namens "Hummer" bereitstellen. Ich habe sie auf GitHub aufgenommen. Dies ist ein Klon von Hacker News. Es ist ein Ruby-on-Rails-Projekt. Ich habe gerade einen Container erstellt, der auf den hier angegebenen Daten und der Grundkonfiguration basiert.



Wenn Sie nicht auf dem neuesten Stand sind: Hacker News macht Sie bei jeder Hacker-Konferenz sehr beliebt. Lesen Sie einfach, was hier geschrieben steht, und Sie können alle gängigen Themen aus der Welt der Computertechnologie diskutieren. Wenn Sie also andere beeindrucken möchten, lesen Sie die Nachrichten dieses Portals.

Also möchte ich einen Klon dieser Sache erstellen und ihn ins Internet stellen, um Geld zu verdienen. Dies ist natürlich kein echtes Geschäftsprojekt, sondern nur eine Demonstration von Möglichkeiten.
Ich stelle derzeit eine Anwendung namens Lobsters bereit. Aus meinem Geheimnis erhalte ich die Datenbank-URL, für die ich den Befehl $ kubectl get Secrets verwende. Secret hat auch einen Benutzernamen und ein Passwort.



Als Nächstes möchte ich einen Container erstellen, der mit meiner Anwendung kommuniziert, für den ich den Befehl $ kubectl create –f deployments / lobsters.yaml verwende. Wie Sie sehen können, wird die Anwendung ausgeführt.



Zusätzlich haben wir eine IP-Adresse. Ich gebe den Befehl $ kubectl get svc ein und verwende den globalen Load Balancer, der auf die Seite mit der externen IP-Adresse 101.198.12.60 verweist.





Wir gehen zum Browser und versuchen, diese Adresse über HTTP einzugeben. Ja, Fehler beim Warten auf Migration! Das ist Ruby-on-Rails, also habe ich so etwas erwartet.



Wir brauchen also eine Datenbankmigration. Wir müssen diesen Prozess einmal ausführen, und das war's. Wir möchten dies jedoch auf die gleiche Weise tun - keine Autorisierung auf dem Server, keine speziellen Server wie Jump Box, wir möchten den Scheduler kontaktieren und sagen: "Hey, führen Sie diese Aufgabe einmal aus und beenden Sie den Prozess nach der Ausführung einfach!". Das heißt, ich möchte nur einen Befehl ausführen und beenden. Um die Stapelverarbeitung mit dem Befehl $ cat jobs / lobsters-db-schema-load.yaml durchzuführen, erstelle ich ein Jobs-Objekt, das ein solches Schema implementiert.



Das Rake-Befehlsflag "db: schema: load" wird direkt an die GitHub-Website gesendet und lautet: "Nehmen Sie das Codebild: kelseyhightower / lobsters: 2.0.0 und führen Sie diesen Befehl einmal aus." Die Zeile restartPolicy: never am Ende des Codes teilt Kubernetis mit, dass er dies nur einmal ausführen und niemals wiederholen soll. Ich beschränke auch die Ressourcen des Prozessors und des Speichers, dh ich gebe die Parameter eines geeigneten Computers an, auf dem dies gestartet und ausgeführt werden kann, wonach die Datenbankübertragung abgeschlossen wird. Also habe ich alle Jobs-Objekte, die auf dem System ausgeführt werden sollen, mit dem Befehl $ kubectl create –f jobs / lobsters-db-schema-load.yaml auf die Schienen gesetzt.
Sie sehen, dass der entsprechende Job erstellt wird. Danach gebe ich den Befehl $ watch kubectl get jobs ein.



Also wurde der Container zur Maschine gezogen, der Scheduler arbeitete, die Rechenaufgabe wurde erstellt. Gehen wir zurück und aktualisieren die Datenbankfehlerseite. Wie Sie sehen, wurde unser Programm jetzt erfolgreich implementiert.



Als nächstes muss ich mich anmelden. Ich benutze den Befehl $ kubectl create –f jobs / lobsters-db-seed.yaml. Sie sehen, dass der Scheduler den Container noch lädt und nach einigen Sekunden die Arbeit abgeschlossen ist. Um die Migration zu starten, verwenden wir dieselbe Codeebene wie zuvor. Ich melde mich auf dieser Seite an und alles, was jetzt getan werden muss, ist, den Inhalt zu erhalten. Inhalt ist notwendig, wenn wir etwas Geld „sammeln“ wollen. So sieht Wachstumshacking aus oder „Wachstum hacken“ - Sie gehen zur Website einer anderen Person, greifen von dort auf den Inhalt zu und veröffentlichen ihn auf Ihrer eigenen Website, die dem Original ähnelt.



Wir brauchen aber nicht nur Inhalte, sondern auch gute Inhalte. Es wäre eine Schande, die Dinge treiben zu lassen, also leihe ich mir manuell einige Neuigkeiten aus. Sie können den Inhalt automatisch kopieren, dies ist jedoch nicht legal. Also wähle ich die Nachrichten aus, kopiere die Linkadresse, setze das "Test" -Tag, aktiviere das Kontrollkästchen "Ich bin der Autor der Geschichte unter dieser URL" und drücke auf die Schaltfläche "Senden". Sehen Sie, wie gut die gestohlenen Nachrichten aussehen!



Jetzt ist es Zeit, die Anwendung zu skalieren. Dazu müssen Sie nur die Definition unserer Aktivitäten ändern. Statt eines Replikats gehen Sie beispielsweise zu 10. Dann führe ich den Befehlsblock erneut aus.



Kubernetes akzeptiert diese Informationen, führt eine Aktion aus und jetzt haben wir 10 Kopien der Lobsters-Anwendung in unserem Herd. Darüber hinaus wird dieser Prozess dank der Arbeit von Services automatisch zum Load Balancer hinzugefügt.



Mal sehen, was im Backend passiert. Dazu verwende ich den Befehl $ kubectl get svc, erhalte einen kurzen Status und frage, ob ich ihn mit dem Befehl $ kubectl description svc beschreiben soll. Kubernetes erkennt automatisch alle unsere Endpunkte und platziert sie hinter einem Load Balancer.



Gleichzeitig wird alles, was nutzlos ist, gelöscht und alles, was benötigt wird, automatisch hinzugefügt. Wir müssen dieses Ding nicht immer wieder neu erstellen, alles ist vollständig in die Plattform integriert.
Die nächste wichtige Frage ist, wie aktualisiert und wie Protokolle abgerufen werden. Wenn Sie sich erinnern, habe ich Ihnen Ihren SSH-Zugriff entzogen, sodass Sie die Protokolle mithilfe von Log Stash oder interner Google Cloud-Protokollierung zentralisieren müssen. Wenn Sie jedoch nur Ad-hoc-Protokolle anzeigen möchten, denken Sie daran, dass Sie keinen Zugriff auf die Computer haben. Sie können die API jedoch verwenden, um Protokolle mithilfe von Containernamen zu erfassen. Geben Sie dazu den Befehl $ kubectl logs lobsters-240734871-03rmn –f ein, wobei 03rmn der Name einer bestimmten Kopie der Anwendung lobsters-240734871 im Container ist. So können Sie das Protokoll jedes Containers mit einem Replikat anzeigen, um bei Bedarf eine Fehlerbehebung durchzuführen.



Lassen Sie uns unseren Inhalt mit dem Befehl $ kubectl get pods anzeigen. Wie Sie sehen, funktioniert alles. Als nächstes müssen Sie einen Vermarkter einstellen. Er schaut auf diese Seite und sagt: "Mach was du willst, aber entferne diese weißen Flecken von der Seite!".



Alles, was Sie dazu tun müssen, ist, zusätzlich zu dem bereits erstellten einen neuen Container zu erstellen und das CSS an das anzupassen, was wir fördern möchten. Ich möchte Sie daran erinnern, dass es sich nicht um Knoten handelt. Knoten sind für uns nicht wichtig, da das System selbst genau das bietet, was wir wollen.

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