Einführung
Containerbereitstellung und Kubernetes-Orchestrierung sind immens leistungsfähig, wenn sie in virtuellen Umgebungen bereitgestellt werden. Die Flexibilität und Skalierbarkeit bieten endlose Möglichkeiten.
Warum dann einen physischen Single-Tenant-Server zum Cluster hinzufügen? Es ist bekannt, dass VMs Latenzprobleme für bestimmte Anwendungen verursachen. Direkter Hardwarezugriff kann eine Lösung für dieses Problem sein, insbesondere mit der Option, Hardwarebeschleuniger (GPUs) hinzuzufügen.
Entwicklungen im maschinellen Lernen und in der KI lenken Unternehmen dazu, Kubernetes-Cluster sowohl auf VMs als auch auf Bare-Metal-Servern zu implementieren.
Dieses Tutorial zeigt Ihnen, wie Sie die in unserem vorherigen Artikel zur Kubernetes-Architektur besprochenen Konzepte implementieren.
Befolgen Sie die beschriebenen Schritte und erfahren Sie, wie Sie Kubernetes auf einem Bare-Metal-Server installieren
Voraussetzungen
- Mehrere Linux-Server
- Ein Benutzerkonto auf jedem System mit sudo oder Root-Rechte
- Zugriff auf die Befehlszeile/das Terminalfenster
- Dasapt Paketmanager (Debian 10)
Bare-Metal-Server für die Kubernetes-Installation vorbereiten
Kubernetes ist ein hochgradig automatisiertes Orchestrierungstool. Es kommuniziert zwischen Knoten und unternimmt Schritte, um Pods zu replizieren, wenn der aktuelle Zustand der Cluster nicht mit dem gewünschten Zustand übereinstimmt.
Um diesen Prozess zu erleichtern, muss die Kommunikation zwischen den Knoten ungehindert sein. Jeder Knoten muss konfiguriert werden, damit die Standardsicherheitseinstellungen die Kommunikationsleitungen nicht beeinträchtigen.
Die Einstellungen unterscheiden sich je nach Distribution und müssen auf jeden Knoten innerhalb eines Clusters angewendet werden. In diesem Beispiel wird die Installation mit Debian 10. durchgeführt
Wenn Sie eine andere Distribution verwenden, besuchen Sie unser Tutorial zur Installation von Kubernetes auf einem CentOS 7- oder Ubuntu 18.04-System.
Schritt 1:SWAP deaktivieren
Kubernetes-Pods sind so konzipiert, dass sie die CPU-Grenzen vollständig ausnutzen. Das kubelet ist nicht für die Verwendung von SWAP-Speicher ausgelegt und muss daher deaktiviert werden. Geben Sie den folgenden Befehl in Ihr Terminalfenster ein, um SWAP zu deaktivieren:
sudo swapoff -a
Schritt 2:nftables auflösen Backend-Kompatibilitätsproblem
Die aktuelle kubeadm Pakete sind nicht mit den nftables kompatibel Backend. Um Probleme zu vermeiden, schalten Sie die iptables-Tools in ihren Legacy-Modus:
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo update-alternatives --set arptables /usr/sbin/arptables-legacy
sudo update-alternatives --set ebtables /usr/sbin/ebtables-legacy
Schritt 3:Firewall konfigurieren
Die Firewall-Einstellungen müssen geändert werden, um die Kommunikation zwischen Pods innerhalb eines Clusters zu ermöglichen. In diesem Beispiel haben wir die Ports mit ufw bearbeitet .
Geben Sie dazu die folgenden Befehle auf Ihrem Master-Knoten ein:
sudo ufw allow 6443/tcp
sudo ufw allow 2379/tcp
sudo ufw allow 2380/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 10251/tcp
sudo ufw allow 10252/tcp
sudo ufw allow 10255/tcp
sudo ufw reload
Außerdem müssen diese Ports auf jedem Worker-Knoten geöffnet sein:
sudo ufw allow 10251/tcp
sudo ufw allow 10255/tcp
sudo ufw reload
Schritt 4:Docker installieren
Eine Container-Laufzeitsoftware verwaltet Container-Images auf Knoten. Ohne sie kann Kubernetes nicht auf Bildbibliotheken zugreifen und die Anwendungen in den Containern ausführen. Zu diesem Zweck werden wir Docker installieren.
Installieren Sie Docker auf allen Master- und Worker-Knoten, die an Ihrem Cluster teilnehmen. Das bedeutet, dass Sie diesen Vorgang nacheinander auf jedem Knoten wiederholen müssen.
Greifen Sie auf Ihre Befehlszeilenschnittstelle zu. Der folgende Befehl aktualisiert Debian-Repositories und installiert Pakete. Es ermöglicht Ihrem System auch, Repositories über ein sicheres Protokoll, HTTPS:
, zu verwendensudo apt-get update && apt-get install apt-transport-https ca-certificates curl software-properties-common
Rufen Sie jetzt den offiziellen GPG-Schlüssel von Docker ab und fügen Sie ihn hinzu, indem Sie Folgendes eingeben:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
Die Ausgabe bestätigt, dass die Aktion abgeschlossen wurde.
Wir haben den GPG-Schlüssel hinzugefügt und können nun damit fortfahren, das apt-Repository von Docker hinzuzufügen:
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
Vergessen Sie nicht, Ihre Repositories zu aktualisieren:
sudo apt-get update
Das System ist nun bereit für die Installation von Docker CE.
Installieren Sie Docker mit dem folgenden Befehl:
sudo apt-get install docker-ce
Überprüfen Sie, ob der Dienst aktiv ist mit:
docker -v
Die Befehlszeile bestätigt, dass der Dienst aktiv ist.
Prüfen Sie, ob der Dienst ordnungsgemäß funktioniert, indem Sie ein Bild aufrufen:
sudo docker run hello-world
Sie haben jetzt die Bestätigung erhalten, dass Docker ordnungsgemäß funktioniert.
Schritt 5:Cgroup-Treiber ändern
Stellen Sie sicher, dass Docker-ce und Kubernetes dieselbe „cgroup“ verwenden.
Überprüfen Sie die aktuelle Docker-Cgroup:
sudo docker info | grep -i cgroup
Das Ergebnis unten bestätigt, dass Docker „cgroupfs“ als cgroup-Treiber verwendet.
Ändern Sie den Kubernetes cgroup-Treiber bei Bedarf in „cgroupfs“, indem Sie Folgendes eingeben:
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
Laden Sie das systemd-System neu und starten Sie den Kubelet-Dienst neu.
systemctl daemon-reload
systemctl restart kubelet
Wir haben eine Container-Laufzeitsoftware ausgewählt und installiert, in diesem Fall Docker. Im nächsten Abschnitt wird erläutert, wie Kubernetes installiert wird und welche Tools wir zur Verwaltung von Kubernetes benötigen.
Kubernetes auf Bare-Metal-Server installieren
Schritt 1:Kubernetes-Repositories herunterladen
Laden Sie Kubernetes herunter und fügen Sie einen Signaturschlüssel hinzu, um sicherzustellen, dass die Software authentisch ist:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add –
Wir erhalten eine Bestätigung, dass das Paket verfügbar ist.
Kubernetes befindet sich nicht in den Standardrepositorys. Um sie hinzuzufügen, geben Sie den folgenden Befehl auf jedem Knoten im Cluster ein:
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
Schritt 2:Installieren Sie kubelet, kubeadm und kubectl
Um Kubernetes verwalten zu können, müssen wir kubectl installieren , ein Dienstprogramm zum Ausgeben von Befehlen an den Cluster. Außerdem müssen wir kubelet installieren da es für die Bereitstellung und Steuerung von Pods innerhalb eines Clusters unerlässlich ist. Kubeadm ist das Programm, das Kubernetes beim Start initialisiert. Um diese 3 wichtigen Tools zu installieren, geben Sie die folgenden Befehle ein:
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
Das kubelet startet nun alle paar Sekunden neu, da es in einer Absturzschleife auf kubeadm wartet um ihm zu sagen, was er tun soll.
Schritt 3:Kubernetes auf dem Master-Knoten initialisieren
Geben Sie auf dem Master-Knoten den folgenden Befehl ein:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Es kann einige Minuten dauern, bis die Ausgabe bestätigt, dass der Cluster aktiv ist:
Sobald das System die Aktion abgeschlossen hat, zeigt es einen kubeadm-Join an Botschaft. Notieren Sie sich den gesamten Eintrag. Sie benötigen es, um die Worker-Knoten mit dem Cluster zu verbinden.
Schritt 4:Erstellen Sie ein Verzeichnis für den Kubernetes-Cluster
Sorgen Sie dafür, dass kubectl für Ihren Nicht-Root-Benutzer funktioniert, indem Sie diese Befehle ausführen, die auch Teil von kubeadm init sind Ausgabe:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Schritt 5:Pod-Netzwerk-Add-on (Flanell)
Installieren Sie ein Pod-Netzwerk-Add-on, damit Ihre Pods effektiv kommunizieren können. Flannel ist ein Overlay-Netzwerk, das mit Kubernetes kompatibel ist. Um Flannel zu installieren, geben Sie Folgendes ein:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Schritt 6:Verbinden Sie den Worker-Knoten mit dem Cluster
Geben Sie den kubeadm join
ein Befehl auf jedem Worker-Knoten. Der Schlüssel, den Sie sich in Schritt 3 notiert haben , verbindet jeden Knoten mit dem Cluster:
kubeadm join 10.0.2.15:6443 –token sv3ckz.fk2yooy92ieins26 \
--discovery-token-ca-cert-hash sha256:39d4a6ecc4a526b4aaff2594b469d43691fb7468688668f55d2a37690codo7fe
Warten Sie einige Minuten und überprüfen Sie den Status der Knoten.
Wechseln Sie zum Master-Server und geben Sie ein:
kubectl get nodes
Das System zeigt dann die Worker-Knoten an, die Sie dem Cluster beigetreten sind.