Die Geheimnisse des Container Runtime Interface: Streaming leicht gemacht!

Entdecken Sie, wie das Container Runtime Interface die Interaktion mit Containern revolutioniert und welche Vorteile die neuen RPCs bieten.

Meta: ayedo Redaktion · 04.05.2024 · ⏳ 3 Minuten · Alle Blogs →

Das Kubernetes Container Runtime Interface (CRI) ist die zentrale Verbindung zwischen dem kubelet und der Container Runtime. Diese Runtimes müssen einen gRPC-Server bereitstellen, der eine von Kubernetes definierte Protocol Buffer-Schnittstelle erfüllt. Diese API-Definition entwickelt sich im Laufe der Zeit weiter, wenn beispielsweise neue Funktionen hinzugefügt oder Felder veraltet werden.

In diesem Blogbeitrag möchte ich die Funktionalität und die Geschichte von drei außergewöhnlichen Remote Procedure Calls (RPCs) beleuchten, die in ihrer Funktionsweise wirklich herausragend sind: Exec, Attach und PortForward.

Exec kann verwendet werden, um bestimmte Befehle innerhalb des Containers auszuführen und die Ausgabe an einen Client wie kubectl oder crictl zu streamen. Es ermöglicht auch die Interaktion mit diesem Prozess über die Standard-Eingabe (stdin), beispielsweise wenn Benutzer eine neue Shell-Instanz innerhalb einer bestehenden Arbeitslast ausführen möchten.

Attach streamt die Ausgabe des aktuell laufenden Prozesses über Standard I/O vom Container an den Client und ermöglicht ebenfalls die Interaktion mit ihnen. Dies ist besonders nützlich, wenn Benutzer sehen möchten, was im Container vor sich geht, und mit dem Prozess interagieren möchten.

PortForward kann genutzt werden, um einen Port vom Host zum Container weiterzuleiten, um mit ihm über Drittanbieter-Netzwerktools zu interagieren. So kann er die Kubernetes-Services für eine bestimmte Arbeitslast umgehen und mit ihrer Netzwerkschnittstelle interagieren.

Was ist so besonders an ihnen?

Alle RPCs des CRI verwenden entweder die gRPC unary calls zur Kommunikation oder die Funktion des Server-Seiten-Streaming (nur GetContainerEvents momentan). Das bedeutet, dass hauptsächlich alle RPCs eine einzelne Client-Anfrage abrufen und eine einzelne Server-Antwort zurückgeben müssen. Das gilt auch für Exec, Attach und PortForward, deren Protokolldefinition wie folgt aussieht:

protobuf // Exec prepares a streaming endpoint to execute a command in the container. rpc Exec(ExecRequest) returns (ExecResponse) {}

protobuf // Attach prepares a streaming endpoint to attach to a running container. rpc Attach(AttachRequest) returns (AttachResponse) {}

protobuf // PortForward prepares a streaming endpoint to forward ports from a PodSandbox. rpc PortForward(PortForwardRequest) returns (PortForwardResponse) {}

Die Anfragen enthalten alles, was erforderlich ist, damit der Server die Arbeit ausführen kann, beispielsweise die ContainerId oder den Befehl (Cmd), der im Fall von Exec ausgeführt werden soll. Interessanterweise enthalten alle ihre Antworten nur eine url:

protobuf message ExecResponse { // Fully qualified URL of the exec streaming server. string url = 1; }

protobuf message AttachResponse { // Fully qualified URL of the attach streaming server. string url = 1; }

protobuf message PortForwardResponse { // Fully qualified URL of the port-forward streaming server. string url = 1; }

Warum ist das so implementiert? Nun, das ursprüngliche Entwurfsdokument für diese RPCs stammt sogar aus einer Zeit vor den Kubernetes Enhancements Proposals (KEPs) und wurde ursprünglich bereits 2016 skizziert. Der kubelet hatte eine native Implementierung für Exec, Attach und PortForward, bevor die Initiative zur Einführung dieser Funktionalitäten ins Leben gerufen wurde.

Bei ayedo sind wir stolz darauf, als Kubernetes-Partner an der Spitze dieser Entwicklungen zu stehen und unseren Kunden dabei zu helfen, das volle Potenzial von Kubernetes auszuschöpfen.


Quelle: Kubernetes Blog

ayedo Alien Kubernetes Hat

Hosten Sie Ihre Apps bei ayedo

Profitieren Sie von skalierbarem App Hosting in Kubernetes, hochverfügbarem Ingress Loadbalancing und erstklassigem Support durch unser Plattform Team. Mit der ayedo Cloud können Sie sich wieder auf das konzentrieren, was Sie am besten können: Software entwickeln.

Jetzt ausprobieren →

Ähnliche Inhalte

Alle Blogs →



ayedo Redaktion · 06.07.2025 · ⏳ 2 Minuten

Herausforderungen und Lösungen: So meistern Sie Geräteausfälle in Kubernetes-Pods

Kubernetes ist der De-facto-Standard für die Container-Orchestrierung, aber wenn es um den Umgang mit spezialisierter Hardware wie GPUs und anderen Beschleunigern geht, wird es kompliziert. In diesem …

Lesen →

Herausforderungen und Lösungen: So meistern Sie Geräteausfälle in Kubernetes-Pods
Katrin Peter · 03.07.2025 · ⏳ 2 Minuten

Produkt-Update bei Loopback:

Lesen →

Produkt-Update bei Loopback:
Katrin Peter · 03.07.2025 · ⏳ 3 Minuten

Kubernetes als Schlüsseltechnologie für die OZG-Umsetzung im Saarland

Lesen →

Kubernetes als Schlüsseltechnologie für die OZG-Umsetzung im Saarland
ayedo Redaktion · 28.06.2025 · ⏳ 3 Minuten

Kompatibilität von Container-Images: Ein Schlüssel zur Zuverlässigkeit in Cloud-Umgebungen

In Branchen, in denen Systeme äußerst zuverlässig laufen müssen und strenge Leistungsanforderungen bestehen, wie beispielsweise in der Telekommunikation, Hochleistungs- oder KI-Computing, benötigen …

Lesen →

Kompatibilität von Container-Images: Ein Schlüssel zur Zuverlässigkeit in Cloud-Umgebungen
Katrin Peter · 17.06.2025 · ⏳ 3 Minuten

Kubernetes kann Freiheit - wenn man es richtig macht.

Lesen →

Kubernetes kann Freiheit - wenn man es richtig macht.

Interessiert an weiteren Inhalten? Hier gehts zu allen Blogs →


Noch Fragen? Melden Sie sich!

Unsere DevOps-Experten antworten in der Regel innerhalb einer Stunde.

Zu Gen-Z für E-Mail? Einfach mal Discord versuchen. Unter +49 800 000 3706 können Sie unter Angabe Ihrer Kontaktdaten auch einen Rückruf vereinbaren. Bitte beachten Sie, dass es keine Möglichkeit gibt, uns telefonisch direkt zu erreichen. Bitte gar nicht erst versuchen. Sollten Sie dennoch Interesse an synchroner Verfügbarkeit via Telefon haben, empfehlen wir Ihnen unseren Priority Support.