Zum Hauptinhalt springen
Version: Weekly Build

Virtual Clusters

Teil von Runtimes

Dies ist eine ausführliche Anleitung für Virtual Clusters (Cloud Native Deployments). Für einen Überblick über alle Runtime-Typen und wie man zwischen ihnen wählt, siehe Runtimes-Übersicht.

Mit Virtual Clusters lassen sich Kubernetes-Workloads innerhalb der Codesphere-Infrastruktur ausführen. Jedes Virtual Cluster stellt eine dedizierte Kubernetes-Umgebung für die jeweilige Resource Group bereit und unterstützt Standard-Kubernetes-Workloads und -Tools.

Jedes Virtual Cluster ist isoliert und verfügt über eine eigene Control Plane sowie eigene Ressourcenlimits. Workloads lassen sich unabhängig und sicher von anderen Resource Groups bereitstellen, aktualisieren und entfernen.

Virtual Clusters sind als Managed Services innerhalb von Codesphere implementiert. Jedes Virtual Cluster läuft als verwaltete Kubernetes-Umgebung. Codesphere verwaltet die zugrunde liegende Infrastruktur, während Virtual Clusters die Vorteile der Kubernetes-APIs bieten und native Workloads sowie Abhängigkeiten unterstützen.

hinweis

Diese Funktion richtet sich an fortgeschrittene Nutzer mit Kubernetes-Erfahrung. Wer keinen direkten Zugriff auf Kubernetes-Primitives benötigt, sollte für einfachere Workflows einen anderen Codesphere-Runtime-Typ in Betracht ziehen.

Kompatibilität

Virtual Clusters sind für Kubernetes-native Workloads konzipiert. Kubernetes-Abhängigkeiten können mitgebracht und vertraute Tools wie Helm Charts genutzt werden, um Anwendungen und Dienste direkt in das Codesphere-Ökosystem bereitzustellen.

Virtual Clusters folgen standardmäßig den Kubernetes-Pod Security Standards auf der Stufe restricted. Das bedeutet, dass Workloads privilegierte Zugriffe oder Host-Level-Zugriffsmuster vermeiden und gehärtete Pod- und Container-Sicherheitseinstellungen einhalten müssen. Manche Helm Charts oder Manifeste von Drittanbietern erfordern möglicherweise Konfigurationsänderungen, bevor sie ausgeführt werden können.

Übliche Anpassungen umfassen:

  • Container als Non-Root-Nutzer ausführen
  • Privilegierte Container und Privilege Escalation deaktivieren
  • Host-Namespaces, Host-Pfade und Host-Ports vermeiden
  • Ein explizites Seccomp-Profil setzen, z. B. RuntimeDefault

tipp

Zum Beispiel lässt sich Apache Superset in nur wenigen Schritten aus der Codesphere-IDE oder der eigenen Landscape heraus bereitstellen – direkt im Virtual Cluster:

helm repo add superset https://apache.github.io/superset
helm repo update
kubectl create namespace superset
helm install superset superset/superset --namespace superset

Konnektivität

Virtual Clusters sind eng in die Codesphere-Plattform integriert, wodurch sich Kubernetes-Workloads einfach mit anderen Codesphere-Ressourcen verbinden lassen. Als Teil des Codesphere-Host-Clusters können Virtual Clusters nahtlos mit Landscapes, Managed Services und anderen Ressourcen innerhalb desselben Teams kommunizieren. Diese Integration vereinfacht komplexe Architekturen und ermöglicht leistungsstarke Workflows über die gesamte Cloud-Infrastruktur hinweg.

Konnektivitätsdiagramm, das zeigt, wie Virtual-Cluster-Workloads mit Workspaces, Landscapes und Managed Services kommunizieren.

Entsprechende barrierefreie Textbeschreibung

Zugriff auf Cluster-Ressourcen

Kubernetes-Pods und -Services, die innerhalb eines Virtual Clusters laufen, sind von jedem Workspace innerhalb derselben Resource Group aus erreichbar. Das bedeutet, dass Anwendungen und Dienste direkt aus den Codesphere-Workspaces heraus angesprochen werden können, was Entwicklung und Fehlerbehebung effizienter macht.

info

Um auf einen Service zuzugreifen, der in einem Virtual Cluster läuft, wird Folgendes benötigt:

  1. Der Ressourcenname (z. B. superset)
  2. Der Namespace-Name (z. B. default)
  3. Die Codesphere Resource-Group-ID (z. B. 180312) Mit diesen Informationen lässt sich der Dienst über eine URL im folgenden Format erreichen:
http://[RESOURCE_NAME]-x-[VIRTUAL_NAMESPACE]-x-k8s.rg-[RESOURCE_GROUP_NAME]

Load-Balancer-Ingress zulassen

Standardmäßig sind Pods innerhalb des Virtual Clusters von externen Load Balancern aus nicht erreichbar. Um eingehenden Load-Balancer-Traffic zu einem Pod zuzulassen, wird folgendes Label zum Pod (bzw. dessen Pod-Template) hinzugefügt:

codesphere.com/allow-ingress-traffic: "true"

Ist dieses Label vorhanden, wendet die Plattform eine Netzwerkrichtlinie an, die eingehenden Traffic aus den vom Cluster-Administrator konfigurierten Subnetzen zulässt. Pods ohne dieses Label sind davon nicht betroffen und bleiben von Load-Balancer-Traffic isoliert.

Bei Verwendung von Envoy Gateway im vCluster muss dieses Label zur EnvoyProxy-Ressource hinzugefügt werden, um eingehenden Traffic zu allen vom Envoy Gateway verwalteten Routen zuzulassen:

apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
name: demo-envoyproxy
namespace: demo
spec:
provider:
type: Kubernetes
kubernetes:
envoyDeployment:
pod:
labels:
codesphere.com/allow-ingress-traffic: "true"

hinweis

Dies setzt voraus, dass der Private-Cloud-Administrator die zulässigen Quell-Subnetze über den Helm-Wert global.vcluster.ingressFromSubnets konfiguriert hat. Sind keine Subnetze konfiguriert, wird die Netzwerkrichtlinie nicht erstellt und das Label hat keine Wirkung.

Zugriff aus dem Virtual Cluster

Ein Virtual Cluster kann auch auf andere Codesphere-Ressourcen zugreifen, etwa Landscapes und Managed Services (zum Beispiel managed Postgres) innerhalb derselben Resource Group. Dadurch lassen sich komplexe Multi-Service-Anwendungen erstellen, die sowohl Kubernetes als auch die Lösungen von Codesphere umfassen.

info

Um von einem Virtual Cluster aus auf ein Workspace-Reactive zuzugreifen, wird Folgendes benötigt:

  1. Der Name des Landscape-Reactive-Service
  2. Die ID des Workspace, in dem das Reactive bereitgestellt ist Anschließend lässt sich folgendes URL-Format verwenden:
http://ws-server-[WORKSPACE_ID]-[REACTIVE_NAME].workspaces

Mögliche Anwendungsfälle

  1. Superset als Helm Chart bereitstellen
  2. Grafana bereitstellen und mit einem in Codesphere laufenden Managed-Postgres-Service verbinden
  3. Prometheus bereitstellen und mit in Codesphere laufenden Anwendungen verbinden, um benutzerdefinierte Metriken zu überwachen
  4. Eine Custom Resource Definition und Controller hinzufügen (z. B. JSPolicy)

Cluster-Zugriff

Der primäre Weg, um mit einem Virtual Cluster zu interagieren, ist die kubeconfig-Datei, die direkt in das Workspace-Dateisystem eingebunden wird. Diese Konfigurationsdatei ermöglicht die Nutzung von kubectl- und helm-Befehlen direkt aus dem Workspace-Terminal sowie in den Ausführungsschritten der Landscape.

Die Konfigurationsdatei wird automatisch als ~/.kube/config in das Workspace-Dateisystem eingebunden. kubectl und helm verwenden sie als Standardkonfigurationsdatei, um sich mit dem Virtual Cluster zu verbinden.

tipp

Releases lassen sich in der Prepare- oder Run-Phase einer Landscape automatisieren und versionieren, indem Folgendes ausgeführt wird:

helm upgrade --install my-release my-charts/my-app --version 2.1.0

Auslösen einer Konfigurationsaktualisierung

Die Kubeconfig-Datei wird (erneut) in den Workspace eingebunden, wenn eines der folgenden Ereignisse eintritt:

  1. Die Liste der Workspace-Umgebungsvariablen wird geändert
  2. Der Workspace wird gestartet
  3. Workspace-Ressourcen werden aktualisiert (z. B. Plan-Änderung, Landscape-Synchronisierung)

info

Wir arbeiten daran, die Synchronisierung der Kubeconfig-Datei für Landscapes und lange laufende Workspaces zu verbessern. Bei Problemen mit einer veralteten oder fehlenden Kubeconfig kann es vorerst helfen, eine Umgebungsvariable zu ändern oder den Workspace neu zu starten, um eine erneute Einbindung der Konfigurationsdatei auszulösen.

Abhängigkeiten

Die Binärdateien kubectl und helm sind im Standard-Codesphere-Workspace-Image vorinstalliert. Bei Verwendung eines eigenen Images sollte sichergestellt werden, dass diese Abhängigkeiten vorhanden sind, falls mit dem Virtual Cluster interagiert werden soll.

Verwalten von Clustern

Virtual Clusters stehen in Codesphere als Managed Service zur Verfügung. Der Lebenszyklus der Cluster wird über die Managed-Services-Oberfläche verwaltet, wo Cluster nach Bedarf erstellt, aktualisiert und gelöscht werden können.

Weitere Details finden sich in der Managed-Services-Dokumentation.

Erstellen eines Virtual Clusters

info

Aktuell kann jede Resource Group aufgrund der Namespace-Beschränkungen der Resource Group nur ein Virtual Cluster enthalten. Vor dem Erstellen eines neuen Clusters sollte geprüft werden, ob die Resource Group bereits eines enthält.

Um ein Virtual Cluster zu erstellen, folgen die folgenden Schritte:

  1. Den Tab Managed Services im Codesphere-Workspace öffnen.
  2. Virtual Kubernetes Cluster aus dem Servicekatalog auswählen. Diese Option ermöglicht das Einrichten eines neuen Clusters für das Team.
  3. Einen Namen eingeben und die Ressourcenquote des Virtual Clusters nach Bedarf konfigurieren:
  4. Bestätigen und warten, bis der Cluster bereit ist. Die Bereitstellung kann einen Moment dauern. Virtual Cluster synchronisiert

Ändern des Virtual Clusters

  1. Den Tab Managed Services öffnen.
  2. Auf Settings klicken und den Tab Configuration für den Cluster öffnen.
  3. Auf Edit Configuration klicken und die Ressourcenquote-Werte nach Bedarf anpassen. Bearbeiten der Virtual-Cluster-Konfiguration
  4. Bestätigen und warten, bis die Änderungen wirksam werden. Der Cluster aktualisiert seine Ressourcen entsprechend.

Ressourcenquoten für Virtual Clusters

Virtual Clusters setzen Ressourcengrenzen mithilfe der Kubernetes-Objekte ResourceQuota und LimitRange durch. Diese Einstellungen steuern den maximal verfügbaren Arbeitsspeicher, die CPU, den Storage und den ephemeralen Storage innerhalb des Clusters.

  • Pods müssen Ressourcen-Requests und Limits angeben, um eine faire Nutzung und Planung sicherzustellen
  • Falls ein Pod diese nicht angibt, greift der Standard-LimitRange

hinweis

Die Ressourcenquote des Virtual Clusters begrenzt aktuell die kumulierten Ressourcenlimits über alle Pods hinweg, nicht die tatsächliche Ressourcennutzung. Können Pods nicht eingeplant werden, sollten die einzelnen Pod-Limits gesenkt werden, um in die Quote zu passen.

Der aktuelle LimitRange lautet:

TypRessourceStandard-RequestStandard-Limit
Containermemory128Mi2Gi
Containercpu100m500m
Containerephemeral-storage500Mi6Gi

Fehlerbehebung bei Quotenfehlern

ProblemUrsacheLösung
Pods können aufgrund von Quotenfehlern nicht eingeplant werdenDie Ressourcenquote des Virtual Clusters ist zu klein, oder die kumulierten Pod-Requests und -Limits überschreiten die konfigurierte QuoteDie Virtual-Cluster-Konfiguration unter Managed Services → das jeweilige Virtual ClusterSettingsConfiguration aktualisieren, oder einzelne Pod-Requests und -Limits senken

Löschen eines Virtual Clusters

Wird ein Cluster nicht mehr benötigt:

  1. Den Tab Managed Services öffnen.
  2. Auf Actions klicken und Delete für den zu entfernenden Cluster auswählen. Diese Aktion kann nicht rückgängig gemacht werden.
  3. Bestätigen und warten, bis der Cluster entfernt wurde. Löschen eines Virtual Clusters