4.2. Kubernetes-Clusters verwalten¶
Self-Service-Benutzer können verwendungsbereite Kubernetes-Cluster mit persistentem Storage zur Verwaltung von containerisierter Applikationen bereitstellen.
Ein Kubernetes-Cluster beinhaltet folgende Komponenten:
Komponente | Name und Version |
---|---|
Zugrunde liegendes Betriebssystem | Fedora 29 Atomic Host |
Container-Runtime | Docker 1.13.1 |
Netzwerk-Plugin | Flannel mit VXLAN |
Die Voraussetzungen für die Erstellung eines Kubernetes-Clusters sind:
- Die Kubernetes-as-a-Service-Komponente. Sie kann zusammen mit dem Compute-Cluster bereitgestellt werden oder zu einem späteren Zeitpunkt (siehe die Abschnitte ‚Creating the Compute Cluster‘ oder ‚Managing Add-On Services‘).
- Ein Netzwerk, welches die Kubernetes Master- und die Kubernetes Worker-Knoten miteinander verbindet. Es kann entweder ein freigegebenes physisches Netzwerk oder ein virtuelles Netzwerk sein, das über einen virtuellen Router mit einem physischen Netzwerk verknüpft ist. Für das virtuelle Netzwerk muss ein Gateway und ein DNS-Server spezifiziert werden.
- Ein SSH-Schlüssel, der sowohl auf dem Master- als auch auf dem Worker-Knoten installiert wird.
- Genug Ressourcen für alle Kubernetes-Knoten, unter Berücksichtigung ihrer Varianten (Flavors).
Wichtig
Es ist außerdem notwendig, dass sich das Netzwerk, in dem Sie einen Kubernetes-Cluster erstellen, nicht mit diesen Standardnetzwerken überschneidet:
- 10.100.0.0/24 — für Netzwerke auf Pod-Ebene verwendet
- 10.254.0.0/16 — für die Zuweisung von Kubernetes-Cluster-IP-Adressen verwendet
Wenn Sie einen Kubernetes-Cluster erstellen wollen, müssen Sie in der Anzeige Kubernetes-Cluster auf der rechten Seite auf Erstellen klicken. Daraufhin wird ein Fenster geöffnet, in dem Sie Ihre Cluster-Parameter festlegen können:
Wählen Sie im Bereich Cluster eine Kubernetes-Version, geben Sie einen Cluster-Namen ein und wählen Sie einen SSH-Schlüssel.
Wählen Sie im Bereich Netzwerk einen virtuellen Router aus, der in den oben genannten Voraussetzungen aufgeführt wurde. Wir empfehlen außerdem, dass Sie das Kontrollkästchen Eine Floating-IP-Adresse verwenden aktivieren. Dann werden den Kubernetes-Knoten öffentliche IP-Adressen zugewiesen, was der Zugang auf die Knoten erleichtert.
Wählen Sie im Bereich Master-Knoten eine Variante aus und bestimmen Sie dann, ob Hochverfügbarkeit (HV) für den Master-Knoten aktiviert werden soll (oder nicht). Wenn Sie die Hochverfügbarkeit aktivieren, werden drei Master-Knoten-Instanzen erstellt. Diese werden im Aktiv/Aktiv-Modus arbeiten
Wählen Sie im Bereich Container-Volume eine Storage-Richtlinie und geben Sie dann die Größe für die Volumes auf den Master- und Worker-Knoten ein.
Legen Sie im Bereich Workers die Anzahl von Workers fest, die erstellt werden sollen, und wählen Sie dann eine Variante (Flavor) für jeden Worker aus.
Klicken Sie abschließend auf Erstellen.
Die Erstellung des Kubernetes-Clusters wird gestartet. Die Master- und Worker-Knoten werden auf der Anzeige Virtuelle Maschinen aufgeführt, während deren Volumes auf der Anzeige Volumes erscheinen.
Wenn der Cluster fertig ist, klicken Sie auf Kubernetes-Zugriff um Anweisungen zu erhalten, wie Sie auf das Dashboard zugreifen können.
Wenn Sie einen Kubernetes-Cluster löschen wollen, müssen Sie diesen in der Anzeige Kubernetes-Cluster auswählen und dann auf den Befehl Löschen klicken. Die Master- und Worker-VMs werden gemeinsam mit deren Volumes gelöscht.
4.2.1. Persistente Volumes für Kubernetes-Pods verwenden¶
Kubernetes ermöglicht es, Compute-Volumes als persistenten Storage für Pods zu verwenden. Persistente Volumes (PV) existieren unabhängig von Pods. Ein solches Volume bleibt auch dann weiter bestehen, wenn der Pod gelöscht wurde, in dem das PV gemountet wurde. Dieses PV kann auch in anderen Pods gemountet werden, um auf die darauf gespeicherten Daten zugreifen zu können. Sie können PVs dynamisch bereitstellen, ohne diese manuell erstellen zu müssen – oder statisch, indem Sie Volumes verwenden, die im Compute-Cluster vorhanden sind.
4.2.1.1. Storage-Klassen erstellen¶
Storage-Klassen werden in Acronis Cyber Infrastructure zu Compute-Storage-Richtlinien zugeordnet, die im Admin-Panel definiert werden. Die Erstellung einer Storage-Klasse ist für alle Storage-Aktionen in einem Kubernetes-Cluster erforderlich.
Um eine Storage-Klasse zu erstellen, müssen Sie im (englischsprachigen) Kubernetes Dashboard zuerst auf + Create klicken und dann eine YAML-Datei spezifizieren, die dieses Objekt definiert. Beispiel:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: mysc
provisioner: csi-cinderplugin
parameters:
type: default
Dieses Manifest beschreibt die Storage-Klasse mysc
mit der Storage-Richtlinie default
. Die Storage-Richtlinie muss im Compute-Cluster vorhanden und in den Storage-Quotas für das aktuelle Projekt spezifiziert sein.
4.2.1.2. Persistente Volumes dynamisch bereitstellen¶
Persistente Volumes können dynamisch über sogenannte PVCs (Persistent Volume Claims, Ansprüche auf ein persistentes Volume) bereitgestellt werden. Ein PVC fordert ein persistentes Volume (PV) mit einer bestimmten Storage-Klasse (bei Azure auch „Speicherklasse“ genannt), einem bestimmten Zugriffsmodus und einer bestimmten Größe an. Wenn es ein passendes PV in dem Cluster gibt, wird es an den Anspruch gebunden. Wenn es keine geeigneten PVs gibt, diese aber bereitgestellt werden können, wird ein neues Volume erstellt und an den Anspruch gebunden. Kubernetes verwendet einen PVC, um das PV abzurufen, welches den Anspruch unterstützt, und mountet das PV dann in dem Pod.
Wichtig
Ein Pod und der Anspruch auf das persistente Volume müssen im gleichen Namespace existieren.
Sie können ein PV folgendermaßen dynamisch für einen Pod bereitstellen:
Greifen Sie über das Dashboard auf den Kubernetes-Cluster zu. Klicken Sie auf Kubernetes-Zugriff, um Anweisungen zu erhalten.
Erstellen Sie im Kubernetes Dashboard eine Storage-Klasse, wie es im Abschnitt ‚Storage-Klassen erstellen‘ beschrieben ist.
Erstellen Sie einen PVC (Anspruch auf ein persistentes Volume). Klicken Sie dafür auf + Create und spezifizieren Sie folgende YAML-Datei:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: mysc
Dieses Manifest spezifiziert den PVC (Anspruch auf das persistente Volume)
mypvc
, der von der Storage-Klassemysc
ein Volume mit mindestens 10 GiB anfordert, welches dann von einem einzelnen Knoten im ‚Lese/Schreib‘-Modus gemountet werden kann.Die Erstellung des PVC löst die dynamische Bereitstellung eines persistenten Volumes aus, welches die Anforderungen des PVCs erfüllt. Kubernetes bindet dieses dann an den Anspruch.
Erstellen Sie einen Pod und spezifizieren Sie den PVC für dessen Volume. Klicken Sie dafür auf + Create und geben Sie folgenden YAML-Datei ein:
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx imagePullPolicy: IfNotPresent name: nginx ports: - containerPort: 80 protocol: TCP volumeMounts: - mountPath: /var/lib/www/html name: mydisk volumes: - name: mydisk persistentVolumeClaim: claimName: mypvc readOnly: false
Diese Konfigurationsdatei beschreibt den Pod
nginx
, der den PVCmypvc
verwendet. Das an den Anspruch gebundene persistente Volume wird unter der Adresse/var/lib/www/html
im Containernginx
verfügbar sein.
4.2.1.3. Persistente Volumes statisch bereitstellen¶
Sie können vorhandene Compute-Volumes auch über eine statische Bereitstellung von persistenten Volumes in Pods mounten. Gehen Sie folgendermaßen vor, um ein Compute-Volume zu mounten:
Rufen Sie im Self-Service-Panel die ID des gewünschten Volumes ab.
Greifen Sie über das Dashboard auf den Kubernetes-Cluster zu. Klicken Sie auf Kubernetes-Zugriff, um Anweisungen zu erhalten.
Erstellen Sie im Kubernetes Dashboard eine Storage-Klasse, wie es im Abschnitt ‚Storage-Klassen erstellen‘ beschrieben ist.
Erstellen Sie ein persistentes Volume. Klicken Sie dafür auf + Create und spezifizieren Sie folgende YAML-Datei:
apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: csi-cinderplugin name: mypv spec: accessModes: - ReadWriteOnce capacity: storage: 10Gi csi: driver: cinder.csi.openstack.org fsType: ext4 volumeHandle: c5850e42-4f9d-42b5-9bee-8809dedae424 persistentVolumeReclaimPolicy: Delete storageClassName: mysc
Dieses Manifest spezifiziert das persistente Volume
mypv
aus der Storage-Klassemysc
, das 10 GiB Speicherplatz hat und einen Zugriffsmodus verwendet, der es ermöglicht, dass das Volume von einem einzelnen Knoten im ‚Lese/Schreib‘-Modus gemountet werden kann. Das persistente Volumemypv
verwendet das Compute-Volume mit der IDc5850e42-4f9d-42b5-9bee-8809dedae424
als Backing Storage (auch Hintergrundspeicher oder unterstützender Speicher genannt).Erstellen Sie einen PVC (Anspruch auf ein persistentes Volume). Bevor Sie den PVC definieren, stellen Sie sicher, dass das PV erstellt wurde und den Status ‚Verfügbar‘ (‚Available‘) hat. Das vorhandene PV muss die Anforderungen des PVCs hinsichtlich Speichergröße, Zugriffsmodus und Storage-Klasse erfüllen. Klicken Sie auf + Create und spezifizieren Sie folgende YAML-Datei:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: mysc
Sobald der PVC
mypvc
erstellt wurde, wird das Volumemypv
an diesen gebunden.Erstellen Sie einen Pod und spezifizieren Sie den PVC für dessen Volume. Verwenden Sie das Beispiel aus Schritt drei im Abschnitt ‚Persistente Volumes dynamisch bereitstellen‘.
Im Self-Service-Panel wird das Compute-Volume in der virtuellen Maschine gemountet, die den Kubernetes-Pod ausführt.
4.2.2. Externe Load Balancer in Kubernetes erstellen¶
Sie können in Kubernetes einen Service mit einem externen Load Balancer erstellen, der es ermöglicht, aus öffentlichen Netzwerken auf den Service zuzugreifen. Der Load Balancer erhält eine öffentlich zugängliche IP-Adresse und leitet eingehende Anfragen an den richtigen Port auf den Kubernetes-Cluster-Knoten weiter.
Gehen Sie folgendermaßen vor, um einen Service mit einem externen Load Balancer zu erstellen.
Greifen Sie über das Dashboard auf den Kubernetes-Cluster zu. Klicken Sie auf Kubernetes-Zugriff, um Anweisungen zu erhalten.
Erstellen Sie auf dem Kubernetes Dashboard eine Bereitstellung und einen Service mit dem Typ
LoadBalancer
. Klicken Sie dafür auf + Create (das Kubernetes Dashboard ist normalerweise auf Englisch) und spezifizieren Sie eine YAML-Datei, die diese Objekte definiert. Beispiel:Wenn Sie den Kubernetes-Cluster in einem freigegebenen physischen Netzwerk bereitgestellt haben, spezifizieren Sie folgendes Manifest:
apiVersion: apps/v1beta1 kind: Deployment metadata: name: nginx spec: replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 --- kind: Service apiVersion: v1 metadata: name: load-balancer annotations: service.beta.kubernetes.io/openstack-internal-load-balancer: "true" spec: selector: app: nginx type: LoadBalancer ports: - port: 80 targetPort: 80 protocol: TCP
Das obere Manifest beschreibt die Bereitstellung (Deployment)
nginx
mit einem Replikatsatz von zwei Pods und dem Serviceload-balancer
mit dem TypLoadBalancer
. Die für den Service verwendete Anmerkung weist darauf hin, dass der Load Balancer intern sein wird.Sobald der Load Balancer erstellt wurde, wird ihm eine IP-Adresse aus dem freigegebenen physischen Netzwerk zugewiesen. Anschließend ist er über diesen externen Endpunkt verfügbar.
Wenn Sie den Kubernetes-Cluster in einem virtuellen Netzwerk bereitgestellt haben, welches über einen virtuellen Router mit einem physischen Netzwerk verknüpft ist, können Sie die obere YAML-Datei ohne den Abschnitt
annotations
(Anmerkungen) für den Serviceload-balancer
verwenden. Der erstellte Load Balancer wird eine Floating-IP-Adresse aus dem physischen Netz erhalten und ist dann über diesen externen Endpunkt verfügbar.
Der Load Balancer wird außerdem im Self-Service-Panel angezeigt, wo Sie dessen Performance und Zustand überwachen können. Beispiel:
