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 · 08.06.2025 · ⏳ 3 Minuten

Neue Wege im KI-Management: Die Gateway API Inference Extension

Moderne generative KI- und große Sprachmodelle (LLMs) stellen Kubernetes vor einzigartige Herausforderungen im Datenverkehrsmanagement. Im Gegensatz zu typischen kurzlebigen, zustandslosen Webanfragen …

Lesen →

Neue Wege im KI-Management: Die Gateway API Inference Extension
ayedo Redaktion · 06.06.2025 · ⏳ 2 Minuten

Wie Sie sicherstellen, dass Ihr Sidecar-Container zuerst startet

Einführung in die Verwaltung von Sidecar-Containern in Kubernetes In der Welt von Kubernetes sind Sidecar-Container nützliche Helfer, die Funktionen erweitern oder zusätzliche Aufgaben für die …

Lesen →

Wie Sie sicherstellen, dass Ihr Sidecar-Container zuerst startet
ayedo Redaktion · 05.06.2025 · ⏳ 2 Minuten

Gateway API v1.3.0: Neue Funktionen für flexibles Request Mirroring und mehr!

Wir freuen uns, die allgemeine Verfügbarkeit der Gateway API v1.3.0 bekanntzugeben! Diese Version wurde am 24. April 2025 veröffentlicht und bringt spannende neue Funktionen mit sich. Was ändert sich …

Lesen →

Gateway API v1.3.0: Neue Funktionen für flexibles Request Mirroring und mehr!
Katrin Peter · 03.06.2025 · ⏳ 2 Minuten

Die vergessene Schwachstelle in euren CI/CD-Pipelines: Die Registry

Die vergessene Schwachstelle in euren CI/CD-Pipelines: Die Registry Jeder redet über Build-Pipelines, Deployment-Automatisierung, GitOps, Blue/Green-Rollouts, Canary Releases. Alles sauber …

Lesen →

Die vergessene Schwachstelle in euren CI/CD-Pipelines: Die Registry
Katrin Peter · 03.06.2025 · ⏳ 2 Minuten

Application Performance sollte messbar sein — jederzeit, in Echtzeit

Wer Anwendungen produktiv betreibt, braucht keine schönen Dashboards, sondern harte Daten. Performance-Probleme entstehen nie dann, wenn Zeit für Debugging ist. Sie kommen genau dann, wenn Systeme …

Lesen →

Application Performance sollte messbar sein — jederzeit, in Echtzeit

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.