K3s-Erste-Schritte-Handbuch - Detailliertes Tutorial zum Ausführen von K3s in Docker

K3s-Erste-Schritte-Handbuch - Detailliertes Tutorial zum Ausführen von K3s in Docker

Was ist k3d?

k3d ist ein kleines Programm zum Ausführen eines K3s-Clusters in Docker. K3s ist eine leichtgewichtige, von der CNCF zertifizierte Kubernetes-Distribution und ein Sandbox-Projekt. Es ist für Umgebungen mit beschränkten Ressourcen konzipiert und als einzelne Binärdatei verpackt, die weniger als 512 MB RAM benötigt. Um mehr über K3s zu erfahren, sehen Sie sich unsere vorherigen Artikel und Videos zu Bilibili an.

k3d startet mehrere K3s-Knoten in Docker-Containern auf jedem Computer, auf dem Docker installiert ist, und verwendet dabei Docker-Images, die aus dem K3s-Repository erstellt wurden. Auf diese Weise kann eine physische (oder virtuelle) Maschine (Docker-Host genannt) mehrere K3s-Cluster mit jeweils mehreren Server- und Agent-Knoten ausführen.

Was kann k3d?

Im Januar 2021 wurde k3dv4.0.0 veröffentlicht, das die folgenden Funktionen enthält:

  • K3s-Cluster (und einzelne Knoten) erstellen/stoppen/starten/löschen/hochskalieren/herunterskalieren
  • Über Kommandozeilenflags
  • Über die Konfigurationsdatei
  • Verwalten und Interagieren mit Container-Image-Registries, die mit dem Cluster verwendet werden können
  • Verwalten der Kubeconfigs des Clusters
  • Importieren Sie das Image vom lokalen Docker-Daemon in die im Cluster ausgeführte Container-Runtime

Natürlich gibt es noch viele weitere Möglichkeiten, die Details des Prozesses anzupassen.

Wozu dient k3d?

Das Hauptanwendungsszenario von k3d ist die lokale Entwicklung auf Kubernetes. Aufgrund der leichten und einfachen Funktionen von k3d gibt es in diesem Szenario fast keine Probleme und Probleme bei der Ressourcennutzung. Die ursprüngliche Absicht bei der Entwicklung von k3d bestand darin, Entwicklern ein einfaches Tool bereitzustellen, mit dem sie einen leichten Kubernetes-Cluster auf ihrer Entwicklungsmaschine ausführen können, um schnelle Iterationszeiten in einer produktionsähnlichen Umgebung zu erreichen (viel schneller als die lokale Ausführung von Docker-Compose mit Kubernetes in der Produktion).

Im Laufe der Zeit hat sich k3d auch zu einem Betriebstool zum Testen bestimmter Kubernetes- (oder speziell K3s-)Funktionen in einer isolierten Umgebung entwickelt. Mit k3d können Sie beispielsweise problemlos einen Cluster mit mehreren Knoten erstellen, einige Anwendungen darauf bereitstellen, einen Knoten einfach anhalten und sehen, wie Kubernetes reagiert, und Ihre Anwendung auch auf andere Knoten verschieben.

Darüber hinaus können Sie k3d in Ihrem kontinuierlichen Integrationssystem verwenden, um schnell einen Cluster zu starten, Ihren Test-Stack darauf bereitzustellen und Integrationstests auszuführen. Wenn Sie fertig sind, können Sie den gesamten Cluster einfach deaktivieren. Sie müssen sich keine Gedanken über die ordnungsgemäße Reinigung und mögliche Rückstände machen.

Wir stellen auch ein k3d-dind-Image bereit (ähnlich dem Traum im Traum im Film „Inception“ haben wir einen Container in einem Container in einem Container). Damit können Sie eine Docker-in-Docker-Umgebung erstellen, in der k3d ausgeführt wird, wodurch ein K3s-Cluster in Docker erzeugt wird. Dies bedeutet, dass auf Ihrem Docker-Host nur ein Container (k3d-dind) ausgeführt wird, in dem wiederum der gesamte K3s/Kubernetes-Cluster ausgeführt wird.

Wie verwende ich k3d?

1. Installieren Sie k3d (bei Bedarf können Sie auch kubectl installieren)

Hinweis: Dieser Artikel hat Versionsanforderungen, bitte verwenden Sie mindestens k3d v4.1.1 oder höher

2. Probieren Sie eines der folgenden Beispiele aus oder verwenden Sie die Dokumentation oder den CLI-Hilfetext, um Ihren eigenen Weg zu finden (k3d [Befehl] --help).

Der „einfache“ Weg

K3D-Cluster erstellen

Dieser Befehl erstellt einen K3s-Cluster mit zwei Containern: einem Kubernetes-Steuerebenenknoten (Server) und einem davor liegenden Load Balancer (Serverlb). Es platziert sie alle in einem dedizierten Docker-Netzwerk und stellt die Kubernetes-API auf einem zufällig ausgewählten freien Port auf dem Docker-Host bereit. Außerdem wird im Hintergrund zur Vorbereitung des Image-Imports ein Volume mit dem Namen Docker erstellt.

Wenn Sie keinen Namensparameter angeben, wird der Cluster standardmäßig als k3s-default bezeichnet und die Container werden als k3d- angezeigt. - -<#>, daher werden die beiden Container in diesem Beispiel als k3d-k3s-default-serverlb und k3d-k3s-default-server-0 angezeigt.

k3d wartet, bis alles bereit ist, ruft die Kubeconfig aus dem Cluster ab und führt sie mit der Standard-Kubeconfig zusammen (normalerweise in $HOME/.kube/config oder dem Pfad, auf den die Umgebungsvariable KUBECONFIG verweist).
Keine Sorge, Sie können dieses Verhalten auch anpassen.

Verwenden Sie kubectl, um zu sehen, was Sie gerade erstellt haben, um die Knoten anzuzeigen: kubectl get nodes
k3d bietet Ihnen auch einige Befehle zum Auflisten Ihrer erstellten Dateien: k3d cluster | node | registry list

Der „einfache, aber raffinierte“ Ansatz

k3d-Cluster erstellt mycluster --api-port 127.0.0.1:6445 --Server 3 --Agenten 2 --Volume '/home/me/mycode:/code@agent[*]' --Port '8080:80@loadbalancer'

Dieser Befehl generiert einen K3s-Cluster mit sechs Containern: * 1 Load Balancer * 3 Server (Control Plane Nodes) * 2 Agenten (früher Worker Nodes)

Mit --api-port 127.0.0.1:6445 können Sie k3d verwenden, um den Kubernetes-API-Port (intern 6443) dem Port 6445 von 127.0.0.1/localhost zuzuordnen. Das bedeutet, dass Sie dann die folgende Verbindungszeichenfolge in Ihre Kubeconfig aufnehmen würden: Server: https://127.0.0.1:6445, um eine Verbindung mit diesem Cluster herzustellen.
Dieser Port wird vom Load Balancer Ihrem Hostsystem zugeordnet. Von dort werden die Anforderungen an die Serverknoten weitergeleitet. Dadurch wird effektiv eine Produktionskonfiguration simuliert, bei der ein Serverknoten ausfallen kann und Sie ein Failover auf einen anderen Server durchführen möchten.

--volume /home/me/mycode:/code@agent[ ] bind mountet Ihr lokales Verzeichnis /home/me/mycode in den Pfad /code innerhalb aller ([ ] Agent-Knoten). Ersetzen Sie * durch den Index (0 oder 1), um es nur an einem der Knoten zu mounten.
Die Angabe, die k3d mitteilt, auf welchem ​​Knoten ein Volume gemountet werden soll, wird als „Knotenfilter“ bezeichnet und auch für andere Flags wie beispielsweise das Flag –port für die Portzuordnung verwendet.

Das heißt, --port '8080:80@loadbalancer' ordnet Port 8080 des lokalen Hosts Port 80 auf dem Load Balancer (serverlb) zu, der zum Weiterleiten von eingehendem HTTP-Verkehr an den Cluster verwendet werden kann. Beispielsweise kann eine Webanwendung in einem Cluster bereitgestellt werden (Bereitstellung), der über einen Ingress wie myapp.k3d.localhost extern verfügbar gemacht wird (Dienst).

Dann können Sie (vorausgesetzt alles ist so eingerichtet, dass diese Domäne in Ihre lokale Host-IP aufgelöst wird) Ihren Browser auf http://myapp.k3d.localhost:8080 richten, um auf Ihre App zuzugreifen. Der Datenverkehr fließt dann über die Docker-Bridge-Schnittstelle von Ihrem Host zum Load Balancer. Von dort wird es per Proxy an den Cluster weitergeleitet und über Ingress und Service an Ihre Anwendungs-Pods übermittelt.

HINWEIS: Sie müssen einen Mechanismus einrichten, um myapp.k3d.localhost an Ihre lokale Host-IP (127.0.0.1) weiterzuleiten.
Am häufigsten wird in der Datei /etc/hosts die Datei 127.0.0.1 verwendet.
Ein Eintrag für myapp.k3d.localhost (C:\Windows\System32\drivers\etc/hosts). .
Allerdings sind hier keine Platzhalter ( .localhost) zulässig, sodass es nach einer Weile etwas umständlich werden kann. Sie sollten sich daher über dnsmasq (MacOS/
UNIX) oder Acrylic (Windows), um die Belastung zu verringern. Tipp: Sie können
Linux und openSUSE) ermöglicht die
automatische Auflösung von .localhost-Domänen in 127.0.0.1, sodass Sie dies nicht mehr manuell tun müssen. Wenn Sie beispielsweise über Ingress testen möchten, müssen Sie Ihre Domäne dort einrichten.

Beachten Sie hierbei, dass K3s beim Erstellen mehrerer Serverknoten das Flag --cluster-init zugewiesen wird. Dies bedeutet, dass die interne Standarddatenbank von K3s (standardmäßig SQLite) in etcd geändert wird.

„Configure as Code“-Ansatz

Ab k3d v4.0.0 (veröffentlicht im Januar 2021) unterstützen wir die Verwendung von Konfigurationsdateien, um alles zu konfigurieren, was Sie zuvor mit Befehlszeilenflags getan haben (und bald vielleicht sogar noch mehr). Zum Zeitpunkt des Schreibens finden Sie das JSON-Schema zum Validieren von Konfigurationsdateien im Repo:
https://github.com/rancher/k3d/blob/092f26a4e27eaf9d3a5bc32b249f897f448bc1ce/pkg/config/v1alpha2/schema.json

Beispielkonfigurationsdatei:

# k3d-Konfigurationsdatei, gespeichert zB als /home/me/myk3dcluster.yaml
apiVersion: k3d.io/v1alpha2 # dies wird sich in Zukunft ändern, da wir alles stabiler machen
Art: Einfach # intern haben wir auch eine Cluster-Konfiguration, die extern noch nicht verfügbar ist
Name: mycluster # Name, den Sie Ihrem Cluster geben möchten (wird weiterhin mit „k3d-“ beginnen)
Server: 1 # dasselbe wie „--servers 1“
Agenten: 2 # dasselbe wie „--agents 2“
kubeAPI: # dasselbe wie „--api-port 127.0.0.1:6445“
  Host-IP: "127.0.0.1"
  HostPort: "6445"
Häfen:
  - Port: 8080:80 # dasselbe wie „--port 8080:80@loadbalancer“
    Knotenfilter:
      - Lastenausgleich
Optionen:
  k3d: # k3d-Laufzeiteinstellungen
    wait: true # warten, bis der Cluster nutzbar ist, bevor zurückgekehrt wird; dasselbe wie „--wait“ (Standard: true)
    timeout: "60s" # Timeout abwarten vor dem Abbrechen; dasselbe wie `--timeout 60s`
  k3s: # Optionen, die an K3s selbst weitergegeben werden
    extraServerArgs: # zusätzliche Argumente, die an den Befehl „k3s server“ übergeben werden
      - --tls-san=meine.host.domain
    extraAgentArgs: [] # zusätzliche Argumente, die an den Befehl „k3s agent“ übergeben werden
  kubeconfig:
    updateDefaultKubeconfig: true # neuen Cluster zu Ihrer Standard-Kubeconfig hinzufügen; dasselbe wie „--kubeconfig-update-default“ (Standard: true)
switchCurrentContext: true # setzt auch den aktuellen Kontext auf den Kontext des neuen Clusters; dasselbe wie „--kubeconfig-switch-context“ (Standard: true)

Vorausgesetzt, wir haben dies als /home/me/myk3dcluster.yaml gespeichert, können wir dies verwenden, um einen neuen Cluster zu konfigurieren
k3d-Cluster erstellen --config /home/me/myk3dcluster.yaml

HINWEIS: Sie können weiterhin zusätzliche Parameter oder Flags festlegen, die Vorrang vor allen Parametern haben, die Sie in der Konfigurationsdatei definieren (oder mit diesen zusammengeführt werden).

Was kann k3d sonst noch?

Sie können k3d in vielen Szenarien verwenden, zum Beispiel:

  • Erstellen Sie einen Cluster mit einem von k3d gehosteten Container-Registry
  • Schnelle Entwicklung mit Hot Code Reload unter Verwendung von Clustern
  • Verwenden Sie k3d in Verbindung mit anderen Entwicklungstools wie Tilt oder Skaffold
  • Beide können die Bildimportfunktion über den K3D-Bildimport verwenden.
  • Beide können von k3d gehostete Repositorien verwenden, um Entwicklungszyklen zu beschleunigen
  • Verwenden Sie k3d in Ihrem CI-System (wir stellen hierfür einen PoC bereit: https://github.com/iwilltry42/k3d-demo/blob/main/.drone.yml)
  • Verwenden Sie die von der Community verwaltete vscode-Erweiterung (https://github.com/inercia/vscode-k3d), um es in Ihr
  • Verwenden Sie es im vscode-Workflow, um die Hochverfügbarkeit von K3s einzurichten

Sie können dies alles selbst ausprobieren, indem Sie die in diesem Demo-Repo vorbereiteten Skripte verwenden:
https://github.com/iwilltry42/k3d-demo.

THORSTEN KLEIN
DevOps-Ingenieur bei trivago, freiberuflicher Softwareentwickler bei SUSE und Betreuer von k3d.

Das Obige ist der detaillierte Inhalt des ausführlichen Tutorials des k3d-Leitfadens zum Ausführen von K3s in Docker. Weitere Informationen zum Ausführen von K3s in Docker finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • So führen Sie PostgreSQL mit Docker aus
  • So führen Sie MySQL mit Docker-Compose aus
  • Verwenden Sie Docker, um mehrere PHP-Versionen auf dem Server auszuführen
  • So fügen Sie einem laufenden Docker-Container dynamisch ein Volume hinzu

<<:  So verwenden Sie das Name-Attribut und das ID-Attribut des A-Tags, um innerhalb der Seite zu springen

>>:  Eine kurze Erläuterung des MySQL-Ausführungsprozesses und der MySQL-Ausführungssequenz

Artikel empfehlen

Das WeChat-Applet wählt die Bildsteuerung

In diesem Artikelbeispiel wird der spezifische Co...

Transplantieren des Befehls mkfs.vfat in Busybox unter Linux

Um die Lebensdauer der Festplatte zum Speichern v...

JavaScript zum Erreichen eines Mouse-Tailing-Effekts

Mauseffekte erfordern die Verwendung von setTimeo...

Detaillierte Erläuterung der MySQL-Partitionsfunktion und Beispielanalyse

Zunächst: Was ist Datenbankpartitionierung? Ich h...

VUE + SpringBoot implementiert die Paging-Funktion

Dieser Artikel stellt hauptsächlich vor, wie pagi...

Ein Beispiel für die Verwendung von CSS-Methoden zur Erzielung von Modularität

1. Was sind CSS-Methoden? CSS methodologies könne...

MySQL Serie 4 SQL-Syntax

Inhaltsverzeichnis Tutorial-Reihe 1. Einführung u...

Umfassende Zusammenfassung der MySQL-Funktionen

Inhaltsverzeichnis 1. Häufig verwendete Zeichenfo...