Zum Hauptinhalt springen
Version: Weekly Build

Managed Containers

Teil von Runtimes

Dies ist ein detaillierter Leitfaden für Managed Containers. Für einen Überblick über alle Runtime-Typen und wie man zwischen ihnen wählt, siehe Runtimes Übersicht. Um die Unterschiede zwischen Reactives und Managed Containers zu verstehen, siehe auch Codesphere Reactives.

Managed Containers ermöglichen es, eigene OCI-Images in Codesphere einzubringen und dabei die Orchestrierungs-, Netzwerk- und Monitoring-Fähigkeiten der Plattform zu nutzen. Dieser Runtime-Typ verwendet dieselbe zugrunde liegende Infrastruktur wie Codesphere Reactives, erlaubt jedoch die Definition eigener Images und das Vorabbacken von Abhängigkeiten über OCI-Images.

Überblick

Managed Containers schließen die Lücke zwischen der Einfachheit von Codesphere Reactives und der Flexibilität eigener Container-Images:

FunktionCodesphere ReactivesManaged Containers
Basis-ImageGemeinsames Codesphere-Ubuntu (anpassbar für Private Cloud)Eigenes OCI-Image
StartzeitMillisekundenSekunden (abhängig von Image-Größe)
AbhängigkeitenLokal (npm-Pakete, Python-Pakete usw.) oder NixVorab in OCI-Image gebacken
Betriebssystem-DistributionUbuntu oder vom Organisationsadmin festgelegtBeliebig (Alpine, Debian usw.)
Image-RegistryNicht zutreffendDocker Hub, ECR, private Registries
OrchestrierungVollständige PlattformfunktionenVollständige Plattformfunktionen
DateisystemzugriffAnpassbares gemeinsames Netzwerk-DateisystemAnpassbares gemeinsames Netzwerk-Dateisystem
Off-when-unusedJaJa
Skalierung & LastverteilungJaJa
PlattformintegrationIntegriertZur Laufzeit

Architektur

Managed Containers nutzen dieselbe Orchestrierungsplattform wie Reactives, mit dem entscheidenden Unterschied bei der Quelle des Container-Images:

Managed Container Architektur

Entsprechende barrierefreie Textbeschreibung

Wesentliche Komponenten

1. Eigenes Container-Image

  • Definiere ein eigenes Basis-Image über ein Dockerfile
  • Ziehe Images von Docker Hub, ECR, GCR oder privaten Registries
  • Backe alle Systemabhängigkeiten und Pakete vorab
  • Vollständige Kontrolle über Betriebssystem-Distribution und -Version

2. Plattform-Orchestrierung

  • Dieselbe Kubernetes-basierte Orchestrierung wie bei Reactives
  • Health-Monitoring, Lastverteilung und Auto-Scaling
  • Off-when-unused-Funktionen für Ressourceneffizienz
  • Codesphere-Agent zur Laufzeit integriert für Plattformfunktionen

3. Gemeinsames Netzwerk-Dateisystem

  • Identischer Dateisystemzugriff wie bei Reactives
  • Beliebige Datei oder Verzeichnis kann an beliebiges Ziel im Container gemountet werden
  • Standard-Mount unter /home/user/app für persistente Speicherung
  • Dieselben Best Practices gelten (Schreiben in das App-Verzeichnis, gleichzeitige Schreibvorgänge vermeiden)

4. Image-Pull & Start

  • Container-Images werden beim ersten Start aus der Registry gezogen
  • Nachfolgende Starts können zwischengespeicherte Images verwenden (abhängig vom Cluster-Zustand)
  • Startzeit typischerweise im Sekundenbereich statt Millisekunden wie bei Reactives
  • Kompromiss für vollständige Image-Anpassung

Kompatibilitätsüberlegungen

PID-1-Verhalten

Codesphere startet in jedem Managed Container einen Agenten als PID 1, um Plattformfunktionen bereitzustellen. Der vom Image konfigurierte Befehl läuft daher als Kindprozess und nicht als PID 1.

Die meisten Images sind nicht darauf angewiesen, dass ihre Anwendung PID 1 ist. Falls ein Image dies doch voraussetzt, ist es nicht mit Managed Containers kompatibel, sofern die dokumentierte Konfiguration nicht die Ausführung der Anwendung als Kindprozess unterstützt.

Wann Managed Containers verwendet werden sollten

Managed Containers sind ideal für:

  • Vorhandene OCI-Images/Dockerfiles – Wiederverwendung bestehender Container-Definitionen
  • Spezifische Anforderungen an das Basis-Betriebssystem – Alpine, Debian, benutzerdefinierte Distributionen
  • Komplexe Abhängigkeiten – Systemebene-Pakete, die am besten über ein Dockerfile verwaltet werden
  • Open-Source-Projekte – Bereits containerisierte Anwendungen
  • Registry-basierte Workflows – CI/CD, das Images in Registries pusht

Ziehe stattdessen Codesphere Reactives in Betracht, wenn:

  • kein spezifisches Basis-Image benötigt wird
  • eine schnellere Startzeit entscheidend ist
  • die Installation von Abhängigkeiten zur Laufzeit über Nix bevorzugt wird
  • ein neues Greenfield-Projekt gestartet wird

Gemeinsamkeiten mit Codesphere Reactives

Beide Runtime-Typen teilen sich dieselben zugrunde liegenden Plattformfunktionen:

FunktionBeide Runtimes
DateisystemzugriffGemeinsames Netzwerk-Dateisystem unter /home/user/app
Off-when-unusedAutomatische Ressourcenfreigabe während Inaktivitätsphasen
SkalierungHorizontal (Replicas) und vertikal (Plans)
LastverteilungAutomatisch über den Landscape Router
Health-MonitoringKonfigurierbare Health-Checks und automatischer Neustart
Private VernetzungSichere interne Service-Kommunikation
Secret-VerwaltungVault-Integration für sensible Daten
MonitoringLogs, Metriken und Request-Tracing
PlattformintegrationCodesphere-Agent für Plattformfunktionen

Verwendung einer privaten Registry

Ein Managed Container startet von einem benutzerdefinierten Basis-Image (baseImage). Liegt dieses Image in einer privaten Registry, benötigt die Landscape Zugangsdaten, um es zu ziehen. Codesphere unterstützt zwei Wege, diese bereitzustellen: teambasierte Container-Registries (empfohlen) und Workspace-Secrets (veraltet, aber weiterhin unterstützt).

Teambasierte Container-Registries

Team-Admins können Registry-Zugangsdaten einmalig auf Team-Ebene konfigurieren, anstatt Secrets für jeden Workspace einzeln zu verwalten. Codesphere gleicht das baseImage eines Managed Containers mit den konfigurierten Registries ab und verwendet die Zugangsdaten beim Deployment automatisch.

  1. Öffne dein Team und wechsle zu Settings > Container Registries.
  2. Klicke auf Configure Container Registry.
  3. Gib der Registry einen Namen und lege die Container Registry Address, den Username und das Password/Access Token fest.

Die Registry-Adresse kann so breit oder so eng gefasst werden, wie benötigt; für ein gegebenes baseImage wird der spezifischste passende Eintrag verwendet.

Team-Settings-Seite Container Registries mit einer Liste konfigurierter Registries samt Name, Adresse, Benutzername und Erstellungsdatum.

Funktionsverfügbarkeit

Teambasierte Container-Registries erfordern, dass für die Installation sowohl das Feature-Flag team-container-registries als auch cimg-private-registry aktiviert sind. Ist eines der beiden deaktiviert, ist die Seite Container Registries nicht verfügbar. Siehe Feature Flags für die Konfiguration von Flags.

Workspace-Secrets (veraltet)

Veraltet

Diese Methode ist veraltet und wird durch die oben beschriebenen teambasierten Container-Registries ersetzt. Sie bleibt für bestehende Setups unterstützt, neue Konfigurationen sollten jedoch den teambasierten Ansatz verwenden. Sind sowohl teambasierte als auch workspacebasierte Registries konfiguriert, hat die teambasierte Registry Vorrang.

Die Zugangsdaten werden als zwei Workspace-Secrets bereitgestellt. Codesphere liest sie beim Deployment und verwendet sie, um das Image zu ziehen.

SchlüsselWert
REGISTRY_USERNAMERegistry-Benutzername
REGISTRY_PASSWORDRegistry-Passwort oder Access Token

Die Schlüsselnamen sind exakt und case-sensitiv. Beide müssen vorhanden sein.

Speichere sie im Workspace-Vault genauso wie jedes andere Secret. Siehe Secret Management für das Persistieren von Workspace-Secrets.

Beim nächsten Redeploy wird das Image bei Bedarf mit diesen Zugangsdaten gezogen.

Funktionsverfügbarkeit

Zugangsdaten für private Registries werden nur gelesen, wenn für die Installation sowohl das Feature-Flag secret-management als auch cimg-private-registry aktiviert sind. Ist eines der beiden deaktiviert, wird das Image ohne Zugangsdaten gezogen, und ein privates Image kann nicht heruntergeladen werden. Siehe Feature Flags für die Konfiguration von Flags.

Konfiguration & Lifecycle

Managed Containers werden über die Datei ci.yml im Repository konfiguriert. Umfassende Anleitungen zur Konfiguration und Verwaltung von Managed Containers finden sich hier: