Zum Hauptinhalt springen
Version: Weekly Build

Managed Containers

Teil von Runtimes

Dies ist eine ausführliche Anleitung für Managed Containers. Für einen Überblick über alle Runtime-Typen und wie man zwischen ihnen wählt, siehe Runtimes Overview. 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-Funktionen der Plattform zu nutzen. Dieser Runtime-Typ nutzt die gleiche zugrunde liegende Infrastruktur wie Codesphere Reactives, erlaubt aber die Definition eigener Images und das Vorbacken von Abhängigkeiten über OCI-Images.

Überblick​

Managed Containers schlagen eine Brücke zwischen der Einfachheit von Codesphere Reactives und der Flexibilität eigener Container-Images:

FunktionCodesphere ReactivesManaged Containers
Basis-ImageGeteiltes 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 NixIm OCI-Image vorgebacken
OS-DistributionUbuntu oder von Organisationsadmin festgelegtBeliebig (Alpine, Debian usw.)
Image RegistryNicht zutreffendDocker Hub, ECR, private Registries
OrchestrierungVollständige PlattformfunktionenVollständige Plattformfunktionen
DateisystemzugriffAnpassbares, gemeinsames NetzwerkdateisystemAnpassbares, gemeinsames Netzwerkdateisystem
Off-when-unusedJaJa
Skalierung & LastverteilungJaJa
PlattformintegrationEingebautZur Laufzeit

Architektur​

Managed Containers nutzen dieselbe Orchestrierungsplattform wie Reactives, der wesentliche Unterschied liegt in der Quelle des Container-Images:

Managed Container Architektur

Entsprechende barrierefreie Textbeschreibung

Wesentliche Komponenten​

1. Eigenes Container-Image​

  • Definition eines eigenen Basis-Images über ein Dockerfile
  • Abruf von Docker Hub, ECR, GCR oder privaten Registries
  • Vorbacken aller Systemabhängigkeiten und Pakete
  • Vollständige Kontrolle über OS-Distribution und Version

2. Plattformorchestrierung​

  • 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 Netzwerkdateisystem​

  • Identischer Dateisystemzugriff wie bei Reactives
  • Mounten beliebiger Dateien oder Verzeichnisse an beliebigen Zielpfaden im Container
  • Standard-Mount unter /home/user/app für persistenten Speicher
  • Gleiche Best Practices gelten (Schreiben in das App-Verzeichnis, gleichzeitige Schreibzugriffe vermeiden)

4. Image Pull & Start​

  • Container-Images werden beim ersten Start aus der Registry geladen
  • Nachfolgende Starts können gecachte Images verwenden (abhängig vom Cluster-Zustand)
  • Startzeit typischerweise im Sekundenbereich statt Millisekunden wie bei Reactives
  • Abwägung zugunsten vollständiger Image-Anpassung

Kompatibilitätshinweise​

PID-1-Verhalten

Codesphere startet in jedem Managed Container einen Agent als PID 1, um Plattformfunktionen bereitzustellen. Der durch das 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. Sollte dies bei einem Image der Fall sein, ist es nicht mit Managed Containers kompatibel, es sei denn, seine dokumentierte Konfiguration unterstützt das Ausführen der Anwendung als Kindprozess.

Wann Managed Containers verwenden​

Managed Containers eignen sich ideal für:

  • Bestehende OCI-Images/Dockerfiles – Wiederverwendung bestehender Container-Definitionen
  • Spezifische Basis-OS-Anforderungen – Alpine, Debian, benutzerdefinierte Distributionen
  • Komplexe Abhängigkeiten – Pakete auf Systemebene, 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
  • schnellere Startzeiten entscheidend sind
  • 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 Netzwerkdateisystem unter /home/user/app
Off-when-unusedAutomatische Ressourcenfreigabe bei Inaktivität
SkalierungHorizontal (Replicas) und vertikal (Plans)
LastverteilungAutomatisch über Replicas hinweg
Health-MonitoringKonfigurierbare Health-Checks und Auto-Restart
Privates NetworkingSichere interne Service-Kommunikation
Secret-ManagementVault-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 abzurufen. Codesphere unterstützt zwei Wege, diese bereitzustellen: Container Registries auf Resource-Group-Ebene (empfohlen) und Workspace-Secrets (veraltet, aber weiterhin unterstützt).

Container Registries auf Resource-Group-Ebene​

Resource Group Admins können Registry-Zugangsdaten einmalig auf Ebene der Resource Group konfigurieren, anstatt Secrets pro Workspace zu verwalten. Codesphere gleicht das baseImage eines Managed Containers mit den konfigurierten Registries ab und verwendet die Zugangsdaten beim Deployment automatisch.

  1. Öffne die Resource Group und gehe dann zu Settings > Container Registries.
  2. Klicke auf Configure Container Registry.
  3. Vergib einen Namen für die Registry und lege Container Registry Address, Username und Password/Access Token fest.

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

Seite „Container Registries" in den Resource-Group-Einstellungen mit konfigurierten Registries samt Name, Adresse, Benutzername und Erstellungsdatum.

Funktionsverfügbarkeit

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

Workspace-Secrets (veraltet)​

Veraltet

Diese Methode ist veraltet und wird durch Container Registries auf Resource-Group-Ebene oben ersetzt. Sie wird weiterhin für bestehende Konfigurationen unterstützt, neue Konfigurationen sollten jedoch den Resource-Group-Ansatz verwenden. Sind sowohl Registries auf Resource-Group- als auch auf Workspace-Ebene konfiguriert, hat die Registry der Resource Group Vorrang.

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

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

Die Schlüsselnamen sind exakt und groß-/kleinschreibungssensitiv. Beide müssen vorhanden sein.

Speichere sie im Workspace-Vault genau wie jedes andere Secret. Siehe Secret Management für Hinweise zum dauerhaften Speichern von Workspace-Secrets.

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

Funktionsverfügbarkeit

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

Konfiguration & Lebenszyklus​

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