8. Kubernetes Management

8.1. Einleitung

Kubernetes hat sich als De-facto-Standard für die Orchestrierung von Containern etabliert und ermöglicht die Automatisierung der Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen in großem Maßstab.

Unser Kubernetes-Service im neuen Cloud Services portal bietet Ihnen eine leistungsstarke und verwaltete Kubernetes-Umgebung. Das bedeutet, wir kümmern uns um die komplexe Einrichtung, Wartung und das Management der Kubernetes Control Plane (Master Nodes), sodass Sie sich voll und ganz auf die Entwicklung und den Betrieb Ihrer Anwendungen konzentrieren können.

Dieser Service ist nahtlos in unser Portal integriert und nutzt die robuste Infrastruktur von OpenStack und Gardener für die Bereitstellung der Worker Nodes. Profitieren Sie zudem von der einfachen Integration mit weiteren Portal-Services wie unserem S3-kompatiblen Objektspeicher und dem zentralen Backup-Service.

Der Service richtet sich an Entwickler, DevOps-Teams und Systemadministratoren, die eine skalierbare, zuverlässige und einfach zu verwaltende Plattform für ihre containerisierten Workloads suchen.

Diese Dokumentation führt Sie durch alle notwendigen Schritte: von den Voraussetzungen über die Erstellung und Konfiguration Ihres ersten Clusters bis hin zur täglichen Verwaltung und Skalierung. Wir erklären die spezifischen Funktionen und Optionen, die Ihnen in unserem Cloudportal zur Verfügung stehen.

8.2. Vorraussetzung

Diese Vorrausetzungen sind nötig um ein Kubernetes-Cluster im Cloud Servies Portal zu erstellen.

  • Ein gültiger Account im Cloud Services Portal.
  • Notwendige Berechtigungen/Rollen im Portal, um Kubernetes-Cluster erstellen zu können.
  • Genügend Quota (vCPU/vRAM/Storage) für die Erstellung
  • eventuell lokale Tools (kubectl, k9s …)

8.3. Erste Schritte

Overview

Wir bieten ihnen hier zwei Möglichkeiten an, ihr Kubernetes-Cluster in unserem Cloud Services Portal anzulegen:

  • Als neues Projekt
  • in ein bestehendes Projekt

8.4. Einen Cluster erstellen

Um ein Cluster zu erstellen wird zwingend ein Projekt benötigt, dass über genügend Quota verfügt. Die Schritt für Schritt Anleitung bezieht sich darauf, dass der Wizard ein eigenständiges Projekt anlegt. Bei einem schon vorhanden Projekt fällt natürlich die Auswahl des Projektnames und Grösse weg.

8.4.1. Schritt für Schritt

Setup Cluster

Grundsätzlich ist der Wizard sehr einfach zu benutzen und relativ klar mit den Formularfeldern um ein Cluster anzulegen.

  • Clustername -> Darf nicht länger als 10 Zeichen lang sein.
  • Purpose
    • testing -> Kein Monitoring , kein HA der Kubernetes Controller-Componenten.
    • production -> Monitoring sowie HA der Controller-Componenten.
  • Image -> Hier kann die gewünschte Worker-Image version definiert werden. Ein späterers Wechseln dieser wird nicht unterstützt.
  • Kube-Version -> Hier kann die benötigte Kubernetes-Version definiert werden. Diese Kann im Nachhinein nur höher, also geupgraded werden aber nicht runter, also gedowngraded werden.
  • Flavor -> Hier werden die möglich Openstack-Flavor für die Workernodes definiert.
  • Zones -> Hier wird die Verteilung der Worker-Nodes auf unsere verschieden AZ definiert.
  • Worker Anzahl -> Hier können die Min und die Max Zahl an Worker. Unser Service erkennt eventuell Lastspitzen und schaltet ensprechend mehr Worker/Resourcen für das Cluster frei.

Bemerkung

Bitte beachten sie, dass dieser Prozess je nach nach Anzahl der Worker bis zu 10 Minunten in anspruch nehmen kann.

Sobald das Cluster erstellt wurde taucht es in der Liste auf:

Cluster Healthy

8.5. Auf Cluster Zugreifen

Wenn das Kubernetes-Cluster erstellt wurde und im Status healty ist, können sie sich sowohl eine admin-Konfig als auch eine viewer-Konfig erstellen lassen.

Pfeil auf Download-Kibeconfig Kube-admin-Forumular

Warnung

Bitte beachten sie, dass diese Zugänge aus Sicherheitsgründen nur 24h gültig sind, unabhängig der anzahl der Tage im Feld!

8.5.1. Kubernetes Konfig mit Kubectl nutzen

Nach dem Download erhalten sie ein YAML-File das wie folgt aussieht:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ1akNDQWs2Z0F3SUJBZ0lRSlRoRUhBWjlrMzJMZDlnQWg5bFhGREFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TlRBME1UUXhNRFExTVRsYUZ3MHpOVEEwTVRReE1EUTJNVGxhTUEweApDekFKQmdOVkJBTVRBbU5oTUlJQm9qQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FZOEFNSUlCaWdLQ0FZRUE0aEU1CmpQUHZFNDFiUnNuUHV5a0J2WkthR3ovTWJKa3Ewb0liQzlVVlVYTW1EV0hqeWpjeHdLK0haZ2NSNG1VY0VseXQKVVk1dSt1UGF1SlpFQjk3a3hCRTY0U2h4WFdDK0VReDJzNHZBdFhjVkxadFdyTGJ4cjNrVnY4ZjUxY280SWpoOApJOGZmVk51cDVvbmpia0ZqWTQwQjg2c0gzeUg3OUoyWVEyWC9zUTZrajhDVEVxUFRRZGcvNGZ3Ymh5WUpRQVpqCjQwbHZWTTVCcndPVm1KMDEzZkkyNVlmME15dDJuUjRlMGo2TVlVZEhxclFScjh2bStXc1BzbHN0M1YzdE02YWcKQ0p3NU40VXlrSDZRUVNRcmdLS0ZmNmMrbVJNT0VIWS9WZGVack5SWWtIQmVZY2x0OVIxTkMzK3hjK2ZaM3ZyeAp5ZVFsS3NzV0x1Ly8yTElVWVlCbE5FWDhadzhuRW9Id3Q5OEZkQTN4ZHRHdXJkcGJ6MHFNZVVRK1VtblZPWTRLCldpTlR6WHkvVlpLVFFmWkFER1dJdVZxUFAxVnh0Z2I5d2tscjhRd28xVFljV25aMFRML3JLa3gvemNYK1pGbW8KbXVseUg2eTl6ZnZpdFBkWWdLT0c5MVl0Q2grM1F2bmlxbEFIUy9BZjRYL2F4Z2dsbWYwZURUaXVXMFhwQWdNQgpBQUdqUWpCQU1BNEdBMVVkRHdFQi93UUVBd0lCcGpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCU3hIYm9seTV4NFJXbS9aeW1ibENndllrL3d4ekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBWUVBS0FIL0RBRlUKZ0Jibm5zV3JRVWppMVYxajVWNW5TWHM3K2JCT2MxSVdqT3VjSDVhc3Y3OGlHaC9WV21pblFwS0ZPNTAwWFREMgp3T29ubVN1dE9sLzFpa0E1M29Mb25TdU9JWG5vdXYzVFc2SUo1WExsT3k4QU1FY0FrQy9KN2NrdS9CZUJ1QTMvClJ2eU51U1RpN2p5S1l4WnhXZDRzYnNESkZ1Qi9ycFBhSmtEcTZYRTFCTWJOeUd2UTduZDJucXhINDBCaWtiZ2MKOEpuTjFRb2N3b25WSFR2YWtkZGtUa1E2emcraDlMcUJBdy9UR0pvdmJRM1o1bFJJUDBqdGFXVnVrNlovK3k2RApIZWdDZkMraWlOOTVpalVrY25nMkZMVE9wSm5BdHloRnNtUlFKSjM3cGZhcWxrMXNPeHoyUUIxaGpMOHRveHNTCmJwbkZURW5tclQwc29uQjhUZXgzSzlrT2FrcGVuQXZ3cG1OQXhCd2RodHpyRFdUSnAzUmx4S2F0NENLR2U0R0kKVjFrSEVkczN6RjFJK0VjOW5obXVxcEViNEdXbzNsVTJMVllwSnBscnd3QnhFbHU1TzN4b0IxM1hTME96TittTgpmdWpNemZNakkzazBpODd5cVFlRm5kcVQ4ZjJhVFFieVovYWNLdVNGTDRzV0xQTWtmTDFoQWVBOAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://api.kc-6iizv1z.ew5cmpb.gardener.ewcs.ch
  name: garden-8586188f435346b4af787015734ef963--kc-6iizv1z-external
  • Der Name entspricht dem des Cluster-Namen + Rolle

8.5.2. Auf ihrem Client

Diese Yaml-Datei können sie nun entweder nach /home/[user]/.kube/config kopieren

Oder einen Export für dieses defenieren der das YAML referenziert:

export KUBECONFIG=/tmp/kubeconfig-kv-6iiuvlz-admin.yml

8.5.3. Beispiel

Nun können sie einfach mit Kommandozeilen-Tool kubectl das Cluster abfragen:

root@kube-trial:~/# kubectl get nodes
NAME                                                       STATUS   ROLES    AGE   VERSION
shoot--ew5cmpb--kc-6iizv1z-default-worker-z1-5c69c-mpnzr   Ready    <none>   84m   v1.31.3

In diesem Fall hat das Cluster nur eine Worker-Node.

8.6. Cluster bearbeiten

Über das Dropdown-Feld gelangen sie in das Update-Forumlar:

Cluster-Update

Hier stehen ihnen folgende möglichkeiten zu Verfügung:

  • Update der Kubernetes Version
  • Update des Purpose von Testing auf Production

Bemerkung

Je nach Vorgeschichte kann es passieren, dass sie schon auf Status Production sind. Bitte beachten sie, dass nicht mehr zurück zum Status testing kommen, da dies aus technischen Gründen nicht möglich ist.

Gleich verhält es sich zur Kubernetes-Version des Cluster, falls sie schon die neueste Version ausgewählt haben, wird ihnen hier auch keine neuere Angeboten. Wir werden hier stets versuchen ihnen die neuesten Version von Kubernetes bereitzustellen.

Warnung

Bitte beachten sie, dass Änderungen an Purpose oder an Version eine grössere Cluster-Operation nach sich zieht und dementsprechend Zeit benötigt.

8.7. Worker Nodes

Ihre Worker lassen sich über das Dropdown Worker-Groups managen.

worker-group
  • bestehende Worker-Groups lassen sich nur in der Anzahl bearbeiten
  • falls sie eine Aufteilung über mehrere AZs haben wollen, müssen sie eine neue Worker-Group anlegen und die alte gegenfalls löschen.

8.7.1. Neue Worker-Group erstellen

Der Button Create worker group öffnet für Sie folgendes Formular in dem Sie sich eine neue Worker-Group definieren können.

worker-group-form
  • Hier lassen sie ähnlich dem initialen Formular zusätzliche Worker-Groups für ihr Kubernetes-Cluster definieren.

Bemerkung

Auch hier muss auf die Quota des Projekts geachtet werden, da diese nicht überschritten werden können und dies im Zweifel zu einem Fehler bei erstellen der Worker-Nodes führt. Bitte beachten sie hier das Notifications-Tab

8.7.2. Worker Groups in Kubectl

root@kube-trial:~/.kube# kubectl get nodes
NAME                                                       STATUS   ROLES    AGE    VERSION
shoot--ew5cmpb--kc-6iizv1z-default-worker-z1-5c69c-mpnzr   Ready    <none>   127m   v1.31.3
shoot--ew5cmpb--kc-6iizv1z-test-z1-5cc9c-wb2zf             Ready    <none>   2m2s   v1.31.3
  • Die Worker-Groups werden anhander der Namen unterschieden.

8.7.3. Worker-Group löschen

Die vorhanden Worker Groups lassen sie bis eine Group löschen, so dass das Cluster funktionsfähig bleibt.

Warnung

Je nach Deployment und Definition der worker-node affinity, kann es passieren, dass sich eine ihre Worker-Groups nicht löschen lassen, da sonst die intigrität ihres Deployment nicht gewährleistet ist.

Das löschen der Groups wird über den Button Delete it eingeleitet.

Bemerkung

Bitte beachten sie, dass dieser Prozess auch Zeit benötigt, da die Nodes „gedrained“ werden und Pods verschoben werden müssen.

8.8. Cluster löschen

Das Löschen gestaltet sich ähnlich einfach wie bei den Worker-Groups, über das Dropdown auf der Cluster-Management-Seite lässt sich das komplette Cluster löschen.

Vorraussetzungen um ein Cluster zu löschen:

Warnung

Cluster auf den noch Deployments laufen, lassen sich nicht löschen !!!