GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Erstellen eines einzelnen Kubernetes-Clusters auf Steuerungsebene mit kubeadm

Einführung

Kubernetes ist ein Cluster und Orchestrierung Engine für Docker-Container. Mit anderen Worten, Kubernetes ist eine Open-Source-Software oder ein Tool, das zum Orchestrieren und Verwalten von Docker-Containern in einer Clusterumgebung verwendet wird. Kubernetes ist auch als k8s bekannt und wurde von Google entwickelt und an die „Cloud Native Computing Foundation“ gespendet

Ziel

Diese Einrichtung des Kubernetes-Clusters hat 1 Master-Knoten mit CentOS 7 und 2 Worker-Knoten auch als Schergen bekannt Windows 2k19 Server haben Betriebssystem.

Wir werden Kubernetes-Cluster auf Rechenzentrums-VMs installieren und konfigurieren, um Docker-Container zu verwalten. Dieser Cluster umfasst 1 Master- (Linux) und 2 Worker-Knoten (Windows), der Master steuert die Zeitpläne und Pod-Bereitstellungen auf den Worker-Knoten.

Diagramm der Kubernetes-Architektur

Einige wichtige Kubernetes-Terminologie müssen Sie wissen, bevor Sie mit der Konfiguration beginnen

ETCD (Clusterknoten) :Kubernetes verwendet „etcd“ als Schlüsselwert-Datenbankspeicher. Es speichert die Konfiguration des Kubernetes-Clusters in „etcd“ .

kube-controller-manager: Der Kubernetes-Controller-Manager ist ein Daemon, der die mit Kubernetes ausgelieferten zentralen Regelkreise einbettet. In Kubernetes ist ein Controller eine Kontrollschleife, die den freigegebenen Status des Clusters über den „apiserver“ überwacht und nimmt Änderungen vor, um den aktuellen Zustand in Richtung des gewünschten Zustands zu bewegen. Beispiele für Controller, die heute mit Kubernetes ausgeliefert werden, sind der Replication Controller, Endpoints Controller, Namespace Controller und Service Accounts Controller

kube-apiserver :Der Kubernetes-API-Server validiert und konfiguriert Daten für die API-Objekte, zu denen Pods, Dienste, Replikationscontroller und andere gehören. Der API-Server bedient REST-Operationen und stellt das Frontend für den freigegebenen Status des Clusters bereit, über den alle anderen Komponenten interagieren.

kube-scheduler: Der Kubernetes-Scheduler ist eine richtlinienreiche, topologiebewusste, arbeitslastspezifische Funktion, die sich erheblich auf Verfügbarkeit, Leistung und Kapazität auswirkt. Der Scheduler muss individuelle und kollektive Ressourcenanforderungen, Servicequalitätsanforderungen, Hardware-/Software-/Richtlinieneinschränkungen, Affinitäts- und Anti-Affinitätsspezifikationen, Datenlokalität, Interferenzen zwischen Workloads, Fristen usw. berücksichtigen.

kubelet :Das „kubelet“ ist der primäre „Knotenagent “, die auf jedem Knoten ausgeführt wird. Er kann den Knoten beim API-Server registrieren, indem er einen der folgenden verwendet:den Hostnamen; ein Flag zum Überschreiben des Hostnamens; oder spezifische Logik für einen Cloud-Anbieter.

kube-proxy :Der Kubernetes-Netzwerkproxy wird auf jedem Knoten ausgeführt. Dies spiegelt Dienste wider, die in der Kubernetes-API auf jedem Knoten definiert sind, und kann eine einfache TCP-, UDP- und SCTP-Stream-Weiterleitung oder eine Round-Robin-TCP-, UDP- und SCTP-Weiterleitung über eine Reihe von Back-Ends durchführen.

Beschreibung der Einrichtung des Kubernetes-Clusters

Im Kubernetes-Setup haben wir 1 Master- (CentOS 7) und 2 Worker- (Win 2k19) Knoten. Vom Master-Knoten aus können wir den Cluster und seine Knoten mit „kubeadm“ verwalten ‘und ‘kubectl ‘Befehl.

Kubernetes kann mit den folgenden Methoden installiert und bereitgestellt werden:

  • Minikube (Es ist ein Kubernetes-Cluster mit einem Knoten)
  • Kops (Einrichtung von Kubernetes mit mehreren Knoten in AWS)
  • Kubeadm (Multi Node Cluster in unseren eigenen Räumlichkeiten)

In diesem Artikel installieren wir die neueste Version von Kubernetes 1.16 auf CentOS 7 / RHEL 7 mit dem Dienstprogramm kubeadm. In diesem Setup nehmen wir 1 CentOS 7- und 2 Windows 2k19-Server mit minimaler Installation. Ein Server fungiert als Master-Knoten und die restlichen zwei Server sind Minion- oder Worker-Knoten

Auf dem Masterknoten werden folgende Komponenten installiert

  • API-Server – Es bietet Kubernetes-API mit Jason / Yaml über http, Zustände von API-Objekten werden in etcd gespeichert
  • Planer – Es ist ein Programm auf dem Master-Knoten, das die Planungsaufgaben wie das Starten von Containern in Worker-Knoten basierend auf der Ressourcenverfügbarkeit ausführt
  • Controller-Manager – Die Hauptaufgabe des Controller-Managers besteht darin, Replikationscontroller zu überwachen und Pods zu erstellen, um den gewünschten Zustand beizubehalten.
  • usw. – Es ist eine Schlüssel-Wert-Paar-Datenbank. Es speichert Konfigurationsdaten des Clusters und des Clusterstatus.
  • Kubectl-Dienstprogramm – Es ist ein Befehlszeilendienstprogramm, das eine Verbindung zum API-Server auf Port 6443 herstellt. Es wird von Administratoren verwendet, um Pods, Dienste usw. zu erstellen.

Auf Worker Nodes werden folgende Komponenten installiert

  • Kubelet – Es ist ein Agent, der auf jedem Worker-Knoten läuft, sich mit Docker verbindet und sich um das Erstellen, Starten und Löschen von Containern kümmert.
  • Kube-Proxy – Es leitet den Datenverkehr basierend auf der IP-Adresse und der Portnummer der eingehenden Anfrage an geeignete Container weiter. Mit anderen Worten können wir sagen, dass es für die Übersetzung von Ports verwendet wird.
  • Pod – Pod kann als Multi-Tier oder Gruppe von Containern definiert werden, die auf einem einzelnen Worker-Knoten oder Docker-Host bereitgestellt werden.

Installationsschritte von Kubernetes 1.16 auf CentOS 7

Schritt 1: Legen Sie den Hostnamen fest, deaktivieren Sie SELinux und richten Sie die Firewall ein. In unserem Fall sind Firewall und SELinux deaktiviert und der Hostname ist als Kube-Master festgelegt. Und stellen Sie sicher, dass alle Knoten

sind

Schritt 2 :Kubernetes-Repository konfigurieren

Kubernetes-Pakete sind in den standardmäßigen CentOS 7- und RHEL 7-Repositories nicht verfügbar. Verwenden Sie die folgenden URLs, um die Paket-Repositories zu konfigurieren.

Schritt 3: Installieren Sie Kubeadm und Docker mit dem folgenden Befehl

# yum install kubeadm docker -y

Starten und aktivieren Sie dann kubectl und Docker Dienst mit den folgenden Befehlen.

# systemctl restart docker && systemctl enable docker
# systemctl restart kubelet && systemctl enable kubelet

Schritt 4 :Initialisieren Sie Kubernetes Master mit ‘kubeadm init’

Die Ausgabe des obigen Befehls würde in etwa so aussehen

Wie wir in der Ausgabe sehen können, wurde der Kubernetes-Master erfolgreich initialisiert. Führen Sie die folgenden Befehle aus, um den Cluster als Root-Benutzer zu verwenden.

Schritt 5 :Pod-Netzwerk im Cluster bereitstellen

Versuchen Sie, die folgenden Befehle auszuführen, um den Status von Cluster und Pods abzurufen.

kubectl get nodes
kubectl get pods –all-namespaces

Um den Clusterstatus bereit und den kube-dns-Status auszuführen, stellen Sie das Pod-Netzwerk so bereit, dass Container verschiedener Hosts miteinander kommunizieren. Das POD-Netzwerk ist das Overlay-Netzwerk zwischen den Worker-Knoten.

Führen Sie den folgenden Befehl aus, um das Netzwerk bereitzustellen.

Führen Sie nun die folgenden Befehle aus, um den Status zu überprüfen. Wie wir sehen können, ist der Master-Knoten jetzt bereit, jetzt werden wir Worker-Knoten zu diesem Kubernetes-Cluster hinzufügen.

Auswahl und Konfiguration der Kubernetes-Cluster-Netzwerklösung

Sobald Sie einen Kubernetes-Masterknoten eingerichtet haben, können Sie eine Netzwerklösung auswählen. Es gibt mehrere Möglichkeiten, das Subnetz des virtuellen Clusters über Knoten routbar zu machen. Wählen Sie noch heute eine der folgenden Optionen für Kubernetes unter Windows:

  • Verwenden Sie ein CNI-Plugin wie Flannel, um ein Overlay-Netzwerk für Sie einzurichten.
  • Verwenden Sie ein CNI-Plugin wie Flannel, um Routen für Sie zu programmieren (verwendet den l2bridge-Netzwerkmodus).
  • Konfigurieren Sie einen intelligenten Top-of-Rack-Switch (ToR), um das Subnetz zu routen.

Flanell im vxlan-Modus

Flannel im vxlan-Modus kann verwendet werden, um ein konfigurierbares virtuelles Overlay-Netzwerk einzurichten, das VXLAN-Tunneling verwendet, um Pakete zwischen Knoten zu routen.

Kubernetes-Master für Flannel vorbereiten

Auf dem Kubernetes-Master in unserem Cluster wird eine geringfügige Vorbereitung empfohlen. Es wird empfohlen, überbrückten IPv4-Datenverkehr zu iptables-Ketten zu aktivieren, wenn Flannel verwendet wird. Dies kann mit dem folgenden Befehl erfolgen:

# sudo sysctl net.bridge.bridge-nf-call-iptables=1

Flanell herunterladen und konfigurieren

Laden Sie das neueste Flannel-Manifest mit dem folgenden Befehl herunter:

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Es gibt zwei Abschnitte, die Sie ändern sollten, um das vxlan-Netzwerk-Backend zu aktivieren:

  1. In der net-conf.json Abschnitt Ihrer kube-flannel.yml , doppelt prüfen:
    • Das Cluster-Subnetz (z. B. „10.244.0.0/16“) wird wie gewünscht eingestellt.
    • VNI 4096 ist im Backend gesetzt
    • Port 4789 ist im Backend eingestellt
  2. In der cni-conf.json Abschnitt Ihrer kube-flannel.yml , ändern Sie den Netzwerknamen in „vxlan0“ .

Nachdem Sie die obigen Schritte ausgeführt haben, wird Ihre net-conf.json sollte wie folgt aussehen:

Ihre cni-conf.json sollte wie folgt aussehen:

Flannel starten und validieren

Starten Sie Flannel mit dem Befehl

# kubectl apply -f kube-flannel.yml

Da die Flannel-Pods Linux-basiert sind, wenden Sie als Nächstes unseren Linux-NodeSelector-Patch auf kube-flannel-ds an DaemonSet, um nur auf Linux abzuzielen, indem die folgenden Befehle zum Herunterladen und Einstellen von NodeSelector

verwendet werden
# wget https://github.com/microsoft/SDN/blob/master/Kubernetes/flannel/l2bridge/manifests/node-selector-patch.yml
# kubectl patch ds/kube-flannel-ds-amd64 --patch "$(cat node-selector-patch.yml)" -n=kube-system

Nach einigen Minuten sollten alle Pods ausgeführt werden, wenn das Flannel-Pod-Netzwerk bereitgestellt wurde.

Joining Windows worker nodes to kubernetes cluster

Nachdem Sie einen Kubernetes-Masterknoten eingerichtet und Ihre gewünschte Netzwerklösung ausgewählt haben, können Sie Windows Server-Knoten zu einem Cluster zusammenfügen. Dies erfordert einige Vorbereitungen auf den Windows-Knoten vor dem Beitritt.

Vorbereiten eines Windows-Knotens

Installieren Sie Docker (Neustart erforderlich)

Kubernetes verwendet Docker als Container-Engine, also müssen wir es installieren. Sie können den offiziellen Docs-Anweisungen, den Docker-Anweisungen folgen oder die folgenden Schritte ausprobieren:

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name Docker -ProviderName DockerMsftProvider
Restart-Computer –Force

Wenn Sie sich hinter einem Proxy befinden, müssen die folgenden PowerShell-Umgebungsvariablen definiert werden:

[Umgebung]::SetEnvironmentVariable("HTTP_PROXY", "http://proxy.example.com:80/", [EnvironmentVariableTarget]::Machine)

[Umgebung]::SetEnvironmentVariable(“HTTPS_PROXY”, “http://proxy.example.com:443/”, [EnvironmentVariableTarget]::Machine)

Wenn Sie nach dem Neustart den folgenden Fehler sehen:

Starten Sie dann den Docker-Dienst manuell:

Start-Service-Docker

Kubernetes für Windows-Verzeichnis vorbereiten

Erstellen Sie ein „Kubernetes for Windows“-Verzeichnis, um Kubernetes-Binärdateien sowie alle Bereitstellungsskripts und Konfigurationsdateien zu speichern.

mkdir c:\k

Kubernetes-Zertifikat kopieren

Kopieren Sie die Kubernetes-Zertifikatsdatei ($HOME/.kube/config ) vom Master zu diesem neuen C:\k Verzeichnis.

Kubernetes-Binärdateien herunterladen

Um Kubernetes ausführen zu können, müssen Sie zuerst kubectl , kubelet , und kube-proxy Binärdateien. Sie können diese über die Links in der CHANGELOG.md Datei der neuesten Versionen.

  • Hier sind zum Beispiel die v1.14 Node Binaries.
  • Verwenden Sie ein Tool wie Expand-Archive, um das Archiv zu extrahieren und die Binärdateien in C:\k\ zu platzieren .

(Optional) Richten Sie kubectl unter Windows ein

Wenn Sie den Cluster von Windows aus steuern möchten, können Sie dies mit kubectl tun Befehl. Zuerst, um kubectl zu erstellen außerhalb von C:\k\ verfügbar Verzeichnis, ändern Sie den PATH Umgebungsvariable:

$env:Path += ";C:\k"

Wenn Sie diese Änderung dauerhaft machen möchten, ändern Sie die Variable im Maschinenziel:

[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\k", [EnvironmentVariableTarget]::Machine)

Als Nächstes überprüfen wir, ob das Clusterzertifikat gültig ist. Um den Speicherort festzulegen, an dem kubectl nach der Konfigurationsdatei sucht, können Sie --kubeconfig übergeben Parameter oder ändern Sie die KUBECONFIG Umgebungsvariable. Zum Beispiel, wenn sich die Konfiguration unter C:\k\config befindet :

$env:KUBECONFIG="C:\k\config"

So machen Sie diese Einstellung für den Bereich des aktuellen Benutzers dauerhaft:

[Environment]::SetEnvironmentVariable("KUBECONFIG", "C:\k\config", [EnvironmentVariableTarget]::User)

Um schließlich zu überprüfen, ob die Konfiguration richtig erkannt wurde, können Sie Folgendes verwenden:

kubectl config view

Wenn Sie einen Verbindungsfehler erhalten

Unable to connect to the server: dial tcp [::1]:8080: connectex: No connection could be made because the target machine actively refused it.

Sie sollten den Speicherort von kubeconfig noch einmal überprüfen oder versuchen, ihn erneut zu kopieren.

Wenn Sie keine Fehler sehen, ist der Knoten jetzt bereit, dem Cluster beizutreten.

Dem Windows-Knoten beitreten

Je nach ausgewählter Netzwerklösung haben Sie folgende Möglichkeiten:

  1. Verknüpfen Sie Windows Server-Knoten mit einem Flannel-Cluster (vxlan oder host-gw) (wir verwenden diese Lösung)
  2. Verknüpfen Sie Windows Server-Knoten mit einem ToR-Switch mit einem Cluster

Einem Flannel-Cluster beitreten

Es gibt eine Sammlung von Flannel-Bereitstellungsskripts in diesem Microsoft-Repository, die Ihnen dabei helfen, diesen Knoten dem Cluster beizutreten.

Laden Sie das Skript Flannel start.ps1 herunter, dessen Inhalt nach C:\k extrahiert werden sollte :

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
wget https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/flannel/start.ps1 -o c:\k\start.ps1

Angenommen, Sie haben Ihren Windows-Knoten und Ihren c:\k vorbereitet Verzeichnis wie unten aussieht, sind Sie bereit, dem Knoten beizutreten.

Windows-Knoten beitreten

Um den Beitritt zu einem Windows-Knoten zu vereinfachen, müssen Sie nur ein einziges Windows-Skript ausführen, um kubelet zu starten , kube-proxy , flanneld , und treten Sie dem Knoten bei.

cd c:\k

.\start.ps1 -ManagementIP <Windows Node IP> -NetworkMode <network mode>  -ClusterCIDR <Cluster CIDR> -ServiceCIDR <Service CIDR> -KubeDnsServiceIP <Kube-dns Service IP> -LogDir <Log directory>

Nachdem Sie dies ausgeführt haben, sollten Sie in der Lage sein:

  • Verbundene Windows-Knoten mit kubectl-Get-Knoten anzeigen
  • Sehen Sie, wie drei Powershell-Fenster geöffnet sind, eines für Kubelet, eines für Flaneld und ein weiteres für Kube-Proxy
  • Siehe Host-Agent-Prozesse für flanneld, kubelet und kube-proxy, die auf dem Knoten ausgeführt werden


Linux
  1. Kubernetes-Cluster mit Rancher einrichten

  2. Kubernetes-Cluster unter Ubuntu 20.04 mit kubeadm einrichten

  3. So leeren Sie einen Knoten in Kubernetes

  4. kubectl apply vs create:Welches zum Erstellen von Ressourcen in der Kubernetes-Clusterumgebung verwenden?

  5. grastate.dat mit seqno -1 auf einem fehlerfreien Cluster. Wieso den?

So richten Sie Kubernetes 1.5 mit kubeadm unter CentOS ein

So installieren Sie Apache Hadoop auf RHEL 8 (Single-Node-Cluster)

So stellen Sie Kubernetes-Cluster auf AWS mit Amazon EKS bereit

So stellen Sie Single Node Kubernetes mit Microk8s auf Ubuntu 20.04 bereit

So installieren Sie Hadoop Single Node Cluster (Pseudonode) unter CentOS 7

So konfigurieren Sie einen Linux-Cluster mit 2 Knoten auf RedHat und CentOS