Zum Hauptinhalt springen
Version: Weekly Build

Virtual Clusters

Teil von Runtimes

Dies ist eine detaillierte 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.

Virtual Clusters ermöglichen es, Kubernetes-Workloads innerhalb der Codesphere-Infrastruktur auszuführen. Jeder Virtual Cluster stellt eine dedizierte Kubernetes-Umgebung für die Resource Group bereit und unterstützt Standard-Kubernetes-Workloads und -Tools.

Jeder Virtual Cluster ist isoliert und verfügt über eine eigene Control Plane sowie eigene Ressourcenlimits. Workloads können unabhängig und sicher von anderen Resource Groups bereitgestellt, aktualisiert und entfernt werden.

Virtual Clusters sind als Managed Services innerhalb von Codesphere implementiert. Jeder 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 Erfahrung in Kubernetes. Wenn kein direkter Zugriff auf Kubernetes-Primitive benötigt wird, empfiehlt sich die Verwendung anderer Codesphere Runtimes für einfachere Workflows.

Kompatibilität

Virtual Clusters sind darauf ausgelegt, maximale Flexibilität beim Bereitstellen benutzerdefinierter Workloads zu bieten. Eigene Kubernetes-Abhängigkeiten können mitgebracht werden, und vertraute Tools wie Helm Charts lassen sich nutzen, um Anwendungen und Dienste mit minimalem Aufwand direkt im Codesphere-Ökosystem bereitzustellen.

tipp

Beispielsweise lässt sich Apache Superset in wenigen Schritten aus der Codesphere IDE oder der Landscape heraus direkt im Virtual Cluster bereitstellen:

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.

Zugehörige barrierefreie Textbeschreibung

Zugriff auf Cluster-Ressourcen

Kubernetes-Pods und -Dienste, die innerhalb des 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 im Virtual Cluster laufenden Dienst zuzugreifen, 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, füge dem Pod (oder dessen Pod-Template) das folgende Label hinzu:

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

Wenn dieses Label vorhanden ist, wendet die Plattform eine Network Policy an, die eingehenden Traffic aus den vom Cluster-Administrator konfigurierten Subnetzen erlaubt. Pods ohne dieses Label sind davon nicht betroffen und bleiben von Load-Balancer-Traffic isoliert.

Wenn Envoy Gateway im vCluster verwendet wird, muss dieses Label der 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. Wenn keine Subnetze konfiguriert sind, wird die Network Policy nicht erstellt und das Label hat keine Wirkung.

Zugriff aus dem Virtual Cluster

Der Virtual Cluster kann auch auf andere Codesphere-Ressourcen zugreifen, wie z. B. Landscapes und Managed Services (etwa Managed Postgres) innerhalb derselben Resource Group. Dies erleichtert den Aufbau komplexer Multi-Service-Anwendungen, 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-Dienstes
  2. Die ID des Workspace, in dem das Reactive bereitgestellt ist Anschließend kann folgendes URL-Format verwendet werden:
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-Dienst verbinden
  3. Prometheus bereitstellen und mit Anwendungen in Codesphere verbinden, um benutzerdefinierte Metriken zu überwachen
  4. Eine Custom Resource Definition und Controller hinzufügen (z. B. JSPolicy)

Cluster-Zugriff

Der primäre Weg, mit dem Virtual Cluster zu interagieren, ist die kubeconfig-Datei, die direkt in das Workspace-Dateisystem eingebunden wird. Diese Konfigurationsdatei ermöglicht die Verwendung von kubectl- und helm-Befehlen direkt im 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 für die Verbindung zum Virtual Cluster.

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 wird geändert, Landscape wird synchronisiert)

info

Wir arbeiten daran, die Synchronisierung der Kubeconfig-Datei für Landscapes und langlaufende Workspaces zu verbessern. Wenn zurzeit Probleme mit einer veralteten oder fehlenden Kubeconfig auftreten, versuche, 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 benutzerdefinierten Images sollte sichergestellt werden, dass diese Abhängigkeiten vorhanden sind, falls mit dem Virtual Cluster interagiert werden soll.

Verwalten von Clustern

Virtual Clusters sind als Managed Service in Codesphere verfügbar. Der Lebenszyklus der Cluster wird über die Managed Services-Oberfläche verwaltet, in der 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

Derzeit kann jede Resource Group aufgrund der Namespace-Beschränkungen der Resource Group nur einen Virtual Cluster haben. Bevor ein neuer Cluster erstellt wird, prüfe, ob die Resource Group bereits einen enthält.

Um einen Virtual Cluster zu erstellen, folge diesen Schritten:

  1. Gehe zum Tab Managed Services im Codesphere-Workspace.
  2. Wähle Virtual Kubernetes Cluster aus dem Servicekatalog. Mit dieser Option lässt sich ein neuer Cluster für das Team einrichten.
  3. Gib einen Namen ein und konfiguriere die Ressourcenkontingente des Virtual Clusters nach Bedarf:
  4. Bestätige und warte, bis der Cluster einsatzbereit ist. Die Bereitstellung kann einen Moment dauern. Virtual Cluster synchronisiert

Ändern des Virtual Clusters

  1. Gehe zum Tab Managed Services.
  2. Klicke auf Settings und öffne den Tab Configuration für den Cluster.
  3. Klicke auf Edit Configuration und passe die Werte des Ressourcenkontingents nach Bedarf an. Virtual Cluster Konfiguration bearbeiten
  4. Bestätige und warte, bis die Änderungen wirksam werden. Der Cluster aktualisiert seine Ressourcen entsprechend.

Ressourcenkontingente des 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 Speicher und den ephemeralen Speicher innerhalb des Clusters.

  • Pods müssen Ressourcen-Requests und Limits angeben, um eine faire Nutzung und Planung sicherzustellen
  • Wenn ein Pod diese nicht angibt, wird die Standard-LimitRange angewendet

hinweis

Das Ressourcenkontingent des Virtual Clusters begrenzt derzeit die kumulierten Ressourcenlimits über alle Pods hinweg, nicht die tatsächliche Ressourcennutzung. Wenn Pods nicht geplant werden können, versuche, die Limits einzelner Pods zu senken, damit sie in das Kontingent passen.

Die aktuelle LimitRange lautet:

TypRessourceStandard-RequestStandard-Limit
Containermemory128Mi2Gi
Containercpu100m500m
Containerephemeral-storage500Mi6Gi

Fehlerbehebung bei Kontingentfehlern

ProblemUrsacheLösung
Pods können aufgrund von Kontingentfehlern nicht geplant werdenDas Ressourcenkontingent des Virtual Clusters ist zu klein, oder die kumulierten Pod-Requests und -Limits überschreiten das konfigurierte KontingentAktualisiere die Virtual Cluster-Konfiguration unter Managed Services → dein Virtual ClusterSettingsConfiguration, oder senke die Requests und Limits einzelner Pods

Löschen eines Virtual Clusters

Wenn ein Cluster nicht mehr benötigt wird:

  1. Gehe zum Tab Managed Services.
  2. Klicke auf Actions und wähle Delete für den zu entfernenden Cluster. Diese Aktion kann nicht rückgängig gemacht werden.
  3. Bestätige und warte, bis der Cluster entfernt wurde. Virtual Cluster Löschung