Website-Suche

So installieren Sie einen Kubernetes-Cluster unter CentOS 8


Der Prozess der Installation eines Kubernetes-Clusters unter CentOS 8 ähnelt fast dem von CentOS 7 (den Sie hier durchgehen können), aber der Der Prozess hat hier einige Änderungen. Diese Änderungen drehen sich hauptsächlich um die Installation von Docker.

Ab CentOS 8 (und damit auch RHEL 8) wurde Docker nun nativ durch podman und < ersetztbuildah, das sind Tools von Redhat. Tatsächlich wurde das Docker-Paket jetzt aus dem Standardpaket-Repository entfernt.

Mit diesem Schritt möchte das Redhat-Team den Prozess der Erstellung und Verwendung von Containern vereinfachen, ohne dass spezielle Berechtigungen erforderlich sind, und gleichzeitig die Kompatibilität mit Docker-Images aufrechterhalten und diese ohne Daemon betreiben. Podman verspricht mehr Flexibilität bei der Ausführung in Kubernetes-Umgebungen, aber das Urteil bleibt offen.

In diesem Artikel werden wir den Prozess der Installation von Kubernetes auf einer CentOS 8-Plattform unter Docker-CE (Community) durchgehen Auflage). In einem späteren Artikel werden wir auch eine ähnliche Installation durchführen und podman für unsere Container verwenden.

Voraussetzungen

  1. Drei Server mit CentOS 8 – 1 Master-Knoten und 2 Worker-Knoten.
  2. Es wird empfohlen, dass Ihre Knoten über mindestens 2 CPUs mit 2 GB RAM oder mehr pro Maschine verfügen. Dies ist keine strenge Anforderung, sondern hängt weitgehend von den Anforderungen der Anwendung ab, die Sie ausführen möchten.
  3. Internetverbindung auf allen Ihren Knoten. Wir werden Kubernetes- und Docker-Pakete aus dem Repository abrufen. Ebenso müssen Sie sicherstellen, dass der DNF-Paketmanager standardmäßig installiert ist und Pakete aus der Ferne abrufen kann.
  4. Alle Ihre Knoten sollten außerdem in der Lage sein, sich miteinander zu verbinden, entweder über ein privates oder ein öffentliches Netzwerk, je nachdem, was verfügbar ist.
  5. Sie benötigen außerdem Zugriff auf ein Konto mit Sudo- oder Root-Rechten. In diesem Tutorial verwende ich mein Root-Konto.

Vorsicht

Die meisten Knoten verfügen im Allgemeinen über eindeutige MAC-Adressen. In einigen Einzelfällen können jedoch einige virtuelle Maschinen identische MAC-Adressen haben. Es wird daher empfohlen, dass Sie bestätigen, dass die Product_UUID und die MAC-Adresse in keinem der Knoten identisch sind.

Kubernetes verwendet diese Werte, um die Knoten im Cluster eindeutig zu identifizieren. Wenn diese Werte nicht für jeden Knoten eindeutig sind, schlägt der Installationsvorgang möglicherweise fehl.

Um die MAC-Adresse der Netzwerkschnittstelle zu überprüfen und zu vergleichen.

ip link

Führen Sie den folgenden Befehl aus, um die product_uuid zu überprüfen und zu vergleichen.

cat /sys/class/dmi/id/product_uuid 

Logische Architektur

Unsere Installation ist so konzipiert, dass der Master-Node die Worker-Nodes steuert. Am Ende dieser Installation wird unsere logische Architektur in etwa so aussehen.

Master-Knoten – Dieser Computer fungiert im Allgemeinen als Steuerungsebene und führt die Cluster-Datenbank und den API-Server aus (mit dem die kubectl-CLI kommuniziert).

Unser 3-Knoten-Kubernetes-Cluster wird in etwa so aussehen:

Installation des Kubernetes-Clusters auf dem Master-Knoten

Damit Kubernetes funktioniert, benötigen Sie eine Containerisierungs-Engine. Wie bereits erwähnt, werden wir Docker-CE verwenden.

Die folgenden Einrichtungen werden auf dem CentOS 8 Master-Node durchgeführt.

Schritt 1: Bereiten Sie Hostnamen, Firewall und SELinux vor

Legen Sie auf Ihrem CentOS 8 Master-Node den System-Hostnamen fest und aktualisieren Sie DNS in Ihrer /etc/hosts-Datei.

hostnamectl set-hostname master-node
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF

Als nächstes pingen Sie Ihren worker-node-1 und worker-node-2 an, um mit dem Ping-Befehl zu überprüfen, ob Ihre aktualisierte Hostdatei ordnungsgemäß funktioniert.

ping 192.168.0.48
ping 192.168.0.49

Deaktivieren Sie als Nächstes Selinux, da dies erforderlich ist, um Containern den Zugriff auf das Host-Dateisystem zu ermöglichen, das von Pod-Netzwerken und anderen Diensten benötigt wird.

setenforce 0

Wenn Sie setenforce auf 0 setzen, wird SELinux effektiv auf permissiv gesetzt, wodurch SELinux bis zum nächsten Neustart effektiv deaktiviert wird. Um es vollständig zu deaktivieren, verwenden Sie den folgenden Befehl und starten Sie neu.

sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
reboot

Kubernetes nutzt verschiedene Ports für Kommunikation und Zugriff. Diese Ports müssen für Kubernetes zugänglich sein und dürfen nicht durch die Firewall eingeschränkt werden.

Konfigurieren Sie die Firewall-Regeln für die Ports.

firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Schritt 2: Installieren Sie Docker-CE unter CentOS 8

Sie müssen zuerst das Docker-Repository mit dem folgenden dnf config-manager-Befehl hinzufügen, da es nicht mehr in der Standardpaketliste enthalten ist.

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Installieren Sie außerdem das Paket containerd.io, das als Daemon verfügbar ist und den gesamten Containerlebenszyklus seines Hostsystems verwaltet, von der Bildübertragung und -speicherung über die Containerausführung und -überwachung bis hin zur Low-Level-Speicherung, Netzwerkanbindungen und darüber hinaus .

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

Installieren Sie nun die neueste Version eines docker-ce-Pakets.

dnf install docker-ce

Sie können nun den Docker-Dienst aktivieren und starten.

systemctl enable docker
systemctl start docker

Schritt 3: Installieren Sie Kubernetes (Kubeadm) unter CentOS 8

Als Nächstes müssen Sie Kubernetes-Repositorys manuell hinzufügen, da diese unter CentOS 8 nicht standardmäßig installiert sind.

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

Kubeadm hilft Ihnen beim Bootstrap eines minimal funktionsfähigen Kubernetes-Clusters, der den Best Practices entspricht. Mit kubeadm sollte Ihr Cluster die Kubernetes-Konformitätstests bestehen.

Kubeadm unterstützt auch andere Cluster-Lebenszyklusfunktionen wie Upgrades, Downgrades und die Verwaltung von Bootstrap-Tokens. Kubeadm ist auch mit anderen Orchestrierungstools wie Ansible und Terraform integrierbar.

Da das Paket-Repo nun fertig ist, können Sie mit der Installation des kubeadm-Pakets fortfahren.

dnf install kubeadm -y 

Wenn die Installation erfolgreich abgeschlossen wurde, aktivieren und starten Sie den Dienst.

systemctl enable kubelet
systemctl start kubelet

Schritt 4: Erstellen Sie mit kubeadm einen Control-Plane-Master

Der Kubernetes-Master, der als Steuerungsebene für den Cluster fungiert, führt einige wichtige Dienste aus, die für den Cluster erforderlich sind. Daher führt der Initialisierungsprozess eine Reihe von Vorprüfungen durch, um sicherzustellen, dass die Maschine für die Ausführung von Kubernetes bereit ist. Diese Vorprüfungen geben Warnungen aus und werden bei Fehlern beendet. kubeadm init lädt dann die Komponenten der Cluster-Steuerungsebene herunter und installiert sie.

Jetzt ist es an der Zeit, den Kubernetes-Master zu initialisieren. Zuvor müssen Sie jedoch den Swap deaktivieren, um den Befehl „kubeadm init“ auszuführen.

swapoff -a

Die Initialisierung des Kubernetes-Masters ist ein vollständig automatisierter Prozess, der wie gezeigt durch den Befehl „kubeadm init“ gesteuert wird.

kubeadm init

Kopieren Sie als Nächstes den folgenden Befehl und speichern Sie ihn irgendwo, da wir diesen Befehl später auf den Worker-Knoten ausführen müssen.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5  \ --discovery-token-ca-cert-hash ha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7

Tipp: Manchmal kann der obige Befehl Fehler bezüglich der übergebenen Argumente auslösen. Um Fehler zu vermeiden, müssen Sie daher das Zeichen '\' entfernen und Ihr letzter Befehl wird so aussehen.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5 –discovery token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7

Sobald Kubernetes erfolgreich initialisiert wurde, müssen Sie Ihrem Benutzer die Verwendung des Clusters ermöglichen. In unserem Szenario verwenden wir den Root-Benutzer. Sie können den Cluster auch wie gezeigt mit sudo user starten.

Um root zu verwenden, führen Sie Folgendes aus:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

Um einen sudo-aktivierten Benutzer zu verwenden, führen Sie Folgendes aus:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Bestätigen Sie nun, dass der kubectl-Befehl aktiviert ist.

kubectl get nodes

In diesem Moment sehen Sie, dass der Status des Masterknotens „NotReady“ ist. Dies liegt daran, dass wir das Pod-Netzwerk noch nicht im Cluster bereitgestellt haben.

Das Pod-Netzwerk ist das Overlay-Netzwerk für den Cluster, das über dem aktuellen Knotennetzwerk bereitgestellt wird. Es ist so konzipiert, dass es Konnektivität im gesamten Pod ermöglicht.

Schritt 5: Richten Sie Ihr Pod-Netzwerk ein

Die Bereitstellung des Netzwerkclusters ist je nach Ihren Anforderungen ein äußerst flexibler Prozess und es stehen viele Optionen zur Verfügung. Da wir unsere Installation so einfach wie möglich halten möchten, verwenden wir das Weavenet-Plugin, das keine Konfiguration oder zusätzlichen Code erfordert und eine IP-Adresse pro Pod bereitstellt, was für uns großartig ist. Wenn Sie weitere Optionen sehen möchten, schauen Sie bitte hier nach.

Diese Befehle sind wichtig, um das Pod-Netzwerk einzurichten.

export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

Wenn Sie nun den Status Ihres Masterknotens überprüfen, sollte dieser „Bereit“ sein.

kubectl get nodes

Als nächstes fügen wir die Worker-Knoten zum Cluster hinzu.

Hinzufügen von Worker-Knoten zum Kubernetes-Cluster

Die folgenden Anweisungen werden auf jedem Worker-Knoten ausgeführt, wenn er dem Kubernetes-Cluster beitritt.

Schritt 1: Bereiten Sie Hostnamen, Firewall und SELinux vor

Legen Sie zunächst den Hostnamen auf Ihrem worker-node-1 und worker-node-2 fest und fügen Sie dann die Hosteinträge zu /etc/hosts hinzu > Datei.

hostnamectl set-hostname 'node-1'
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF

Als nächstes pingen Sie Ihren Master-Knoten von Ihren Worker-Knoten aus an, um zu bestätigen, dass Ihre aktualisierte Hostdatei einwandfrei funktioniert, indem Sie den Ping-Befehl verwenden.

192.168.0.47

Deaktivieren Sie als Nächstes SElinux und aktualisieren Sie Ihre Firewall-Regeln.

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
firewall-cmd --permanent --add-port=6783/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --reload
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Schritt 2: Richten Sie Docker-CE und Kubernetes Repo ein

Fügen Sie zuerst das Docker-Repository mit dem DNF-Konfigurationsmanager hinzu.

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Als nächstes fügen Sie das Paket containerd.io hinzu.

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

Wenn diese beiden Pakete installiert sind, installieren Sie die neueste Version von docker-ce.

dnf install docker-ce

Aktivieren und starten Sie den Docker-Dienst.

systemctl enable docker
systemctl start docker

Sie müssen Kubernetes-Repositorys manuell hinzufügen, da diese unter CentOS 8 nicht vorinstalliert sind.

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

Schritt 3: Installieren Sie Kubeadm unter CentOS 8

Da das Paket-Repo nun fertig ist, können Sie mit der Installation von kubeadm fortfahren.

dnf install kubeadm -y 

Starten und aktivieren Sie den Dienst.

systemctl enable kubelet
systemctl start kubelet

Schritt 4: Verbinden Sie den Worker-Knoten mit dem Kubernetes-Cluster

Wir benötigen nun das von kubeadm init generierte Token, um dem Cluster beizutreten. Sie können es kopieren und in Ihren node-1 und node-2 einfügen, wenn Sie es irgendwo kopiert haben.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5  --discovery-token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf78

Gehen Sie, wie in der letzten Zeile vorgeschlagen, zurück zu Ihrem Master-Knoten und überprüfen Sie, ob Worker Knoten-1 und Worker-Knoten-2 diesem beigetreten sind Cluster mit dem folgenden Befehl.

kubectl get nodes

Wenn alle Schritte erfolgreich ausgeführt wurden, sollten node-1 und node-2 auf dem master-node im Bereitschaftsstatus angezeigt werden. Zu diesem Zeitpunkt haben Sie nun erfolgreich einen Kubernetes-Cluster auf CentOS 8 bereitgestellt.

Empfohlene Lektüre: So stellen Sie Nginx auf einem Kubernetes-Cluster bereit

Einige Einschränkungen

Der Cluster, den wir hier erstellt haben, verfügt über einen einzelnen Master-Knoten. Wenn der Master-Knoten ausfällt, kann Ihr Cluster daher Daten verlieren und muss möglicherweise von Grund auf neu erstellt werden.

Aus diesem Grund empfehle ich ein hochverfügbares Setup.