In diesem Projekt wollte ich Kubernetes-Konzepte wie Init-Container und Sidecar-Container anwenden, aber ich wollte nicht einfach einem Tutorial folgen.
Mein Ziel war es, etwas Unvergessliches zu schaffen.
Nach einigem Brainstorming präsentiere ich Ihnen die Get Me App!
Die Get Me App wurde entwickelt, um Inhalte aus verschiedenen GitHub-Repositories dynamisch abzurufen und anzuzeigen. Die Anwendung wird in einem Kubernetes-Pod ausgeführt und besteht aus zwei Hauptkomponenten:
Nginx-Container: Dieser dient als Hauptanwendung und hostet den dynamisch abgerufenen Inhalt. Es ist leichtgewichtig und effizient und eignet sich daher ideal für die Bereitstellung statischer Webseiten.
Sidecar-Container: Dieser läuft neben dem primären Nginx-Container. Es ist dafür verantwortlich, den Inhalt alle 5 Sekunden zu aktualisieren, indem es den neuesten HTML-Code von einer zufällig ausgewählten GitHub-Seite abruft. Dadurch wird sichergestellt, dass die von Nginx bereitgestellten Inhalte immer auf dem neuesten Stand sind.
Init Container: Dies initialisiert die Umgebung, bevor die Hauptcontainer starten. Es prüft die Verfügbarkeit des Get Me App Service, indem es seinen DNS-Eintrag auflöst. Dieser Schritt stellt sicher, dass die Anwendung bereit ist, mit dem Dienst zu interagieren, sobald er ausgeführt wird. Lesen Sie hier mehr (ich musste)
Der Nginx-Container stellt dann die aktualisierte HTML-Webseite bereit und macht sie über einen Browser über einen NodePort-Dienst zugänglich.
Bevor wir beginnen, stellen Sie sicher, dass Sie über eine Konfigurationsdatei zum Erstellen des Kubernetes-Clusters verfügen. Ausführliche Anweisungen zum Einrichten Ihres Kind-Clusters finden Sie in der Kind-Schnellstartanleitung.
Erstellen Sie eine Datei mit dem Namen config.yml mit dem folgenden Inhalt, um Ihren Kind-Cluster zu definieren:
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 name: cka-cluster nodes: - role: control-plane extraPortMappings: - containerPort: 30001 # Change this to match the NodePort hostPort: 30001 listenAddress: "0.0.0.0" protocol: tcp - role: worker - role: worker
Führen Sie den folgenden Befehl aus, um den Cluster zu erstellen:
kind create cluster --name kind-cka-cluster --config config.yml
Verwenden Sie den folgenden Befehl, um den Kontext auf den neuen Cluster festzulegen:
kubectl config use-context kind-kind-cka-cluster
Richten Sie zunächst die Verzeichnis- und Dateistruktur für das Projekt ein.
mkdir get-me-app cd get-me-app nano get-me-app.yml
In der Datei get-me-app.yml definieren wir einen Kubernetes-Pod, der den Nginx-Container, einen Sidecar-Container für die Inhaltsaktualisierung und einen Init-Container für den ersten Datenabruf enthält.
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 name: cka-cluster nodes: - role: control-plane extraPortMappings: - containerPort: 30001 # Change this to match the NodePort hostPort: 30001 listenAddress: "0.0.0.0" protocol: tcp - role: worker - role: worker
nginx-Container: Dies ist der primäre Container, der Inhalte auf Port 80 bereitstellt. Der volumeMount stellt das Verzeichnis /usr/share/nginx/html im Arbeitsverzeichnis-Volume des Pods zur Verfügung.
Sidecar-Container (Content-Refresher): Dieser Container führt eine While-True-Schleife aus und lädt alle 5 Sekunden die neueste Version der Webseite herunter. Dadurch wird sichergestellt, dass der Inhalt im Workdir-Volume auf dem neuesten Stand bleibt.
Init-Container (init-myservice): Dieser wartet darauf, dass der Get-Me-App-Service verfügbar wird, indem er kontinuierlich eine DNS-Suche durchführt. Es wird während der Initialisierung nur einmal ausgeführt und nach Abschluss nicht neu gestartet.
Volumes: Das Workdir-Volume (ein Typ emptyDir) wird von den Containern gemeinsam genutzt, sodass der Init-Container, Sidecar und Nginx auf denselben Inhalt zugreifen und ihn bereitstellen können.
Um die App über einen Browser auf Ihrem lokalen Computer zugänglich zu machen, konfigurieren Sie einen NodePort-Dienst, um den Port 80 des Pods freizugeben.
Fügen Sie diese Dienstdefinition in get-me-app-service.yml hinzu:
kind create cluster --name kind-cka-cluster --config config.yml
Stellen Sie das Setup bereit mit:
kubectl config use-context kind-kind-cka-cluster
Sie können darauf zugreifen, indem Sie http://localhost:30001 in Ihrem Browser aufrufen. Sie sollten dann die Github-Seite aufrufen. Aktualisieren Sie die Seite nach 5 Sekunden und Sie sollten eine andere Github-Seite sehen.
Dieses Projekt hat mir geholfen zu verstehen, wie Init-Container gemeinsam genutzte Ressourcen initialisieren können und wie Sidecar-Container diese Ressourcen für die Hauptanwendung auf dem neuesten Stand halten. Es ist eine spannende Möglichkeit, mit der Echtzeit-Datenverarbeitung in Kubernetes zu experimentieren und etwas darüber zu lernen.
Hier ist der formatierte Inhalt für den von Ihnen bereitgestellten Abschnitt:
Endnotizen: Bitte denken Sie daran, dass dieses Projekt nicht Teil der Video-Tutorials ist. Ich wollte etwas Eigenes aufbauen und dabei die Konzepte aus dem Tutorial als allgemeine Anleitung verwenden.
Das obige ist der detaillierte Inhalt vonCKA Full Course Day Multi Container Pod Kubernetes – Sidecar vs. Init Container. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!