Kubernetes

Kubernetes ReplicaSet-Tutorial

Kubernetes ReplicaSet-Tutorial
Kubernetes wird oft als diese riesige Sammlung miteinander verbundener Konzepte wie Knoten und Pods , Dienste, Bereitstellungen usw. angesehen, die oft schwer zu entwirren sind. Lassen Sie uns in diesem Beitrag langsam eine Schlüsselabstraktion entwirren, die ReplicaSet ist. Wir beginnen mit der Erstellung eines kleinen .yaml-Datei für einen Kubernetes-Pod, der über ein Label verfügt, und erstellen Sie dann ein ReplicaSet, das sicherstellt, dass immer eine bestimmte Anzahl von Pods mit demselben Label im Cluster ausgeführt wird . Das haben die Projektautoren eigentlich beabsichtigt, als sie Kubernetes entworfen haben. So lass uns anfangen.

Voraussetzungen

Als erstes benötigen Sie Zugriff auf einen Kubernetes-Cluster. Sie können eine mit Minikube erstellen oder Docker für Windows oder Docker für Mac verwenden, die beide jetzt mit einer Einzelknoten-Kubernetes-Distribution geliefert werden, die Sie in den Docker-Einstellungen aktivieren können.

Sie müssen auch über Vorkenntnisse in Kubernetes verfügen. Hier ist ein wirklich guter Ausgangspunkt.

Pods erstellen

Normalerweise erstellen wir Pods mit einer yaml-Datei, die angibt, welches Container-Image verwendet werden soll, welche Ports verfügbar gemacht werden usw. Hier ist eine einfache Datei zum Erstellen eines Nginx-Pods.

apiVersion: v1
Art: Pod
Metadaten:
Name:  nginx-1
Etikette:
App: Webserver
spezifikation:
Behälter:
- Name: nginx
Bild: nginx:1.7.9
Häfen:
- ContainerPort: 80

Speichern Sie es unter dem Namen nginx-pod.yaml in einem Verzeichnis und führen Sie dann aus demselben Verzeichnis den Befehl aus:

$ kubectl create -f ./nginx-pod.yaml
## Überprüfen Sie, ob der Pod erstellt wurde, indem Sie Folgendes ausführen:
$ kubectl Pods erhalten

Sie werden feststellen, dass ein einzelner Pod namens "nginx-1" läuft und läuft. Aber du kannst diesen einzelnen Pod nicht skalieren. Laufen kubectl erstellen wird Ihnen wieder einen Fehler geben, da der Name nginx-1 kann nicht wiederverwendet werden.

Kubernetes hat die Möglichkeit gegeben, Pods für höhere Abstraktionen zu erstellen, wie zum Beispiel Bereitstellungen und Replikatsets. Welche Pods aus einer bestimmten Pod-Vorlage erstellen, die angeben, welche Bilder verwendet werden sollen, welche Ports in jedem der neuen Pods verfügbar gemacht werden usw., aber nichts Besonderes über einen einzelnen Pod. ReplicaSet (und Deployments) erstellen dann neue Pods und geben jedem neuen Pod einen eindeutigen Namen sowie ein nicht eindeutiges Label, das dem ReplicaSet hilft, den Überblick über die Pods zu behalten, die aus einer bestimmten Vorlage erstellt wurden.

ReplicaSet stellt sicher, dass zu jedem Zeitpunkt eine bestimmte Anzahl von Pods eines bestimmten Etiketts immer in Betrieb sind. Wenn beispielsweise ein Knoten ausfällt, ist es die Aufgabe von ReplicaSet, weitere Pods auf anderen Knoten zu erstellen, um den Verlust zu kompensieren. Um eine Replicaset-YAML-Datei zu schreiben, würden wir dem Muster ähnlich wie beim Schreiben eines Pods folgen. Es wird eine API-Version (Apps/v1), einen Typ (ReplicaSet) und einen Namen in den Metadaten. Das Replikat selbst kann Labels haben, aber wir werden die Dinge vorerst einfach halten und ihm einfach einen eindeutigen Namen geben my-replicaset.

Wir müssen dann umziehen von Metadaten Abschnitt zum Fleisch der Materie spez. Hier geben wir die gewünschte Anzahl von Replikationen unter dem Abschnitt an Repliken. Dann geben wir diesem ReplicaSet a Wähler was verwendet werden würde, um ein Label zu finden, sagen wir, App zu einem Wert, sagen wir, Webserver, unter den aktuell laufenden Pods. Wenn weniger dieser Pods vorhanden sind, werden Pods gemäß der angegebenen Vorlage erstellt und diesen neuen Pods dasselbe Label hinzugefügt. Wenn mehr Pods als erforderlich vorhanden sind, werden einige gelöscht.

Das Angeben einer Vorlage, die als Grundlage für die Erstellung neuer Pods dienen würde, ist der aufwendigste Schritt. Diese Vorlage hat keinen Namen, da das Replikatset für jeden neu erstellten Pod einen neuen Namen erstellt. Das wird jedoch Labels haben, und Sie können feststellen, dass das gleiche Label App=Webserver die die Vorlage hat, wird über die Wähler Parameter in der Replicaset-Spezifikation.

apiVersion: apps/v1
Art: ReplicaSet
Metadaten:
Name: my-replicaset
 
spezifikation:
Repliken: 3
Wähler:
matchLabels:
App: Webserver
Vorlage:
Metadaten:
Etiketten:
App: Webserver
spezifikation:
Behälter:
- Name: nginx
Bild: nginx:1.7.9
Häfen:
- ContainerPort: 80

Speichern Sie diese Datei als nginx-replicaset.yaml und erstellen Sie das Replikatset mit dem Befehl:

$ kubectl create -f nginx-replicaset.yaml

Weil wir zuvor einen Pod mit demselben Label erstellt haben App=Webserver, das Replikat würde nur zwei weitere Pods erstellen. Sie können alle Pods mit dem Befehl auflisten:

$ kubectl Pods erhalten
NAME                  BEREIT     STATUS    NEUSTARTEN   ALTER
my-replicaset-nmvt9   1/1       Wird ausgeführt   0          9s
my-replicaset-xf9mx   1/1       Wird ausgeführt   0          9s
nginx-1               1/1       Läuft   0          28s

Jedem der Pods ist ein eindeutiger Name zugeordnet. Wie der allererste Pod, den wir erstellt haben, hatte einen Namen nginx-1. Sie können versuchen, diesen mit dem Befehl zu löschen:

$ kubectl Pod nginx-1 löschen
$ kubectl Pods erhalten
 
NAME                  BEREIT     STATUS    Neustarts   ALTER
my-replicaset-nmvt9   1/1       Wird ausgeführt   0          1 m
my-replicaset-pkn4q   1/1       Wird ausgeführt   0          22s
my-replicaset-xf9mx   1/1       Wird ausgeführt   0          1 m

Sie werden feststellen, dass der Controller ReplicaSet fast augenblicklich einen neuen Pod erstellt hat, um den von uns gelöschten zu ersetzen. So wird sichergestellt, dass die Anzahl der laufenden Pods mit Label App=Webserver ist immer 3, wie in unserem Replikat-Manifest oben angegeben specified.

Dank Labels und Selektoren erhalten Sie viel Kontrolle. Sie können die Pods mithilfe von nodeSelectors weiter auf mehrere Nodes verteilen, die verwendet werden, um eine bestimmte Anzahl von Pods auf bestimmten Nodes zuzuweisen.

Was Replikate nicht zulassen, sind Updates. Wenn eine neuere Version Ihrer App, sagen wir, nginx:1.8 kommt, müssen Sie dieses Replicaset löschen und ein neues mit dem im Yaml-Manifest des Replicasets erwähnten Image erstellen. Hier kommt das Konzept der Bereitstellungen zum Tragen. Es beinhaltet die Idee von Replikatsätzen und erweitert, indem es zusätzliche Unterstützung für die Aktualisierung Ihrer Apps bietet. Nachdem Sie sich nun mit Replikatsätzen vertraut gemacht haben, ist es möglicherweise eine gute Idee, sich Kubernetes-Bereitstellungen anzusehen.

Verweise

  1. Pods erstellen
  2. ReplicaSets erstellen
So entwickeln Sie ein Spiel unter Linux
Vor einem Jahrzehnt hätten nicht viele Linux-Benutzer vorhergesagt, dass ihr Lieblingsbetriebssystem eines Tages eine beliebte Spieleplattform für kom...
Open-Source-Ports kommerzieller Spiele-Engines
Kostenlose, quelloffene und plattformübergreifende Spiel-Engine-Nachbildungen können verwendet werden, um sowohl alte als auch einige der relativ neue...
Beste Befehlszeilenspiele für Linux
Die Befehlszeile ist nicht nur Ihr größter Verbündeter bei der Verwendung von Linux – sie kann auch eine Quelle der Unterhaltung sein, da Sie damit vi...