Kubernetes (k8s) ist ein kostenloses Open-Source-Container-Orchestrierungstool. Es wird zum Bereitstellen, Skalieren und Verwalten containerbasierter Anwendungen verwendet. In diesem Artikel zeigen wir, wie Sie Kubernetes Cluster auf Ubuntu 20.04 LTS Server (Focal Fossa) mit kubeadm installieren . In meinem Laboraufbau habe ich drei Ubuntu 20.04 LTS-Servermaschinen verwendet. Im Folgenden sind die Systemanforderungen für jedes Ubuntu-System aufgeführt.
- Mindestens 2 GB RAM
- 2 Kerne (2 vCPUs)
- 15 GB freier Speicherplatz auf /var
- Privilegierter Benutzer mit sudo-Rechten
- Stabile Internetverbindung
Im Folgenden sind die Details meines Laboraufbaus aufgeführt:
- Maschine 1 (Ubuntu 20.04 LTS-Server) – K8s-Master – 192.168.1.40
- Maschine 2 (Ubuntu 20.04 LTS-Server) – K8s-Knoten-0 – 192.168.1.41
- Maschine 3 (Ubuntu 20.04 LTS-Server) – K8s-Knoten-1 – 192.168.1.42
Kommen wir nun zu den Kubernetes-Installationsschritten
Schritt 1) Legen Sie den Hostnamen fest und fügen Sie Einträge in der Datei /etc/hosts hinzu
Verwenden Sie den Befehl hostnamectl, um den Hostnamen auf jedem Knoten festzulegen, das Beispiel ist unten gezeigt:
$ sudo hostnamectl set-hostname "k8s-master" // Führen Sie diesen Befehl auf dem Master-Knoten aus$ sudo hostnamectl set-hostname "k8s-node-0" // Führen Sie diesen Befehl auf dem Knoten-0 aus$ sudo hostnamectl set-hostname "k8s-node-1" // Führen Sie diesen Befehl auf Knoten-1 aus
Fügen Sie die folgenden Einträge in /etc/hosts-Dateien auf jedem Knoten hinzu,
192.168.1.40 k8s-master192.168.1.41 k8s-node-0192.168.1.42 k8s-node-1
Schritt 2) Installieren Sie Docker (Container Runtime) auf allen 3 Knoten
Melden Sie sich bei jedem Knoten an und führen Sie die folgenden Befehle aus, um Docker zu installieren,
$ sudo apt update$ sudo apt install -y docker.io
Starten und aktivieren Sie nun den Docker-Dienst auf jedem Knoten mit dem folgenden systemctl-Befehl,
$ sudo systemctl enable docker.service --now
Führen Sie den folgenden Befehl aus, um den Status des Docker-Dienstes und seiner Version zu überprüfen,
$ systemctl status docker$ docker --version
Schritt 3) Swap deaktivieren und IP-Weiterleitung auf allen Knoten aktivieren
Um Swap zu deaktivieren, bearbeiten Sie die Datei /etc/fstab und kommentieren Sie die Zeile aus, die entweder den Eintrag Swap-Partition oder Swap-Datei enthält.
$ sudo vi /etc/fstab
Speichern und beenden Sie die Datei
Führen Sie den Befehl swapoff aus, um den Austausch im laufenden Betrieb zu deaktivieren
$ sudo swapoff -a
Um die IP-Weiterleitung dauerhaft zu aktivieren, bearbeiten Sie die Datei „/etc/sysctl.conf“ und suchen Sie nach der Zeile „net.ipv4.ip_forward=1 “ und kommentieren Sie es aus. Nachdem Sie die Änderungen in der Datei vorgenommen haben, führen Sie den folgenden Befehl aus
$ sudo sysctl -pnet.ipv4.ip_forward =1$
Schritt 4) Kubectl, kubelet und kubeadm auf allen Knoten installieren
Führen Sie die folgenden Befehle auf allen 3 Knoten aus, um die Dienstprogramme kubectl , kubelet und kubeadm zu installieren
$ sudo apt install -y apt-transport-https curl$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"$ sudo apt update$ sudo apt install -y kubelet kubeadm kubectl
Hinweis: Zum Zeitpunkt des Schreibens dieses Artikels war das Kubernetes-Repository von Ubuntu 16.04 (Xenial Xerus) verfügbar, aber in Zukunft, wenn das Kubernetes-Repository für Ubuntu 20.04 verfügbar ist, ersetzen Sie xenial durch das Fokuswort im obigen Befehl „apt-add-repository“.
Schritt 4) Kubernetes-Cluster mit kubeadm (vom Master-Knoten) initialisieren
Melden Sie sich bei Ihrem Master-Knoten (k8s-master) an und führen Sie den folgenden Befehl „kubeadm init“ aus, um den Kubernetes-Cluster zu initialisieren,
$ sudo kubeadm init
Sobald der Cluster erfolgreich initialisiert wurde, erhalten wir die folgende Ausgabe
Um den Cluster als normaler Benutzer zu verwenden, führen Sie die folgenden Befehle aus, Befehle sind bereits in der Ausgabe vorhanden, kopieren Sie sie einfach und fügen Sie sie ein.
[E-Mail-geschützt]:~$ mkdir -p $HOME/.kube[E-Mail-geschützt]:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config[E-Mail-geschützt]:~ $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
Verbinden Sie nun die Worker-Knoten (k8s-node-0/1) mit dem Cluster, der Befehl zum Beitritt zum Cluster ist bereits in der Ausgabe vorhanden. Kopieren Sie den Befehl „kubeadm join“ und fügen Sie ihn auf beiden Knoten (Worker-Knoten) ein.
Melden Sie sich bei Node-0 an und führen Sie den folgenden Befehl aus,
[email protected]:~$ sudo kubeadm join 192.168.1.40:6443 --token b4sfnc.53ifyuncy017cnqq --discovery-token-ca-cert-hash sha256:5078c5b151bf776c7d2395cdae08080faa6f82973b989
Melden Sie sich bei Node-1 an und führen Sie den folgenden Befehl aus, um dem Cluster beizutreten,
[email protected]:~$ sudo kubeadm join 192.168.1.40:6443 --token b4sfnc.53ifyuncy017cnqq --discovery-token-ca-cert-hash sha256:5078c5b151bf776c7d2395cdae08080faa6f82973b989
Führen Sie auf dem Master-Knoten den Befehl „kubectl get nodes“ aus, um den Status der Knoten zu überprüfen
[email protected]:~$ kubectl get nodesNAME STATUS ROLLEN AGE VERSIONk8s-master NotReady master 27m v1.18.3k8s-node-0 NotReady8m3s v1.18.3k 8s-node-1 n <1.9 > 18.3[E-Mail-geschützt]:~$ Wie wir sehen können, sind sowohl Worker-Knoten als auch Master-Knoten dem Cluster beigetreten, aber der Status jedes Knotens ist „NotReady “. Um den Status „Bereit“ zu machen „Wir müssen Container Network Interface (CNI)-basierte Pod-Netzwerk-Add-ons wie calico bereitstellen , kube-router und weave-net . Wie der Name schon sagt, ermöglichen Pod-Netzwerk-Add-Ons, dass Pods miteinander kommunizieren.
Schritt 5) Calico Pod Network Add-on bereitstellen (Master-Knoten)
Führen Sie auf dem Master-Knoten den folgenden Befehl aus, um das Calico-Pod-Netzwerk-Add-On zu installieren,
[email protected]:~$ kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
Sobald es erfolgreich bereitgestellt wurde, wird der Knotenstatus bereit, lassen Sie uns den kubectl-Befehl erneut ausführen, um den Knotenstatus zu überprüfen
[email protected]:~$ kubectl get nodesNAME STATUS ROLLEN ALTER VERSIONk8s-master Bereit master 39m v1.18.3k8s-node-0 Bereit19m v1.18.3k8s-node-1 Bereit <1m > 18.3[E-Mail-geschützt]:~$ Führen Sie den folgenden Befehl aus, um den Status von Pods aus allen Namespaces zu überprüfen
Perfekt, oben bestätigt, dass alle Pods laufen und sich in einem gesunden Zustand befinden. Lassen Sie uns versuchen, Pods, Dienste und Bereitstellungen bereitzustellen, um zu sehen, ob unser Kubernetes-Cluster gut funktioniert oder nicht.
Hinweis: Führen Sie Folgendes aus, um die Bash-Vervollständigungsfunktion auf Ihrem Master-Knoten zu aktivieren
[email protected]:~$ echo 'source <(kubectl complete bash)'>>~/.bashrc[email protected]:~$ source .bashrcSchritt 6) Kubernetes-Cluster testen und verifizieren
Lassen Sie uns eine Bereitstellung namens nginx-web mit einem nginx-Container-Image im Standard-Namespace erstellen, führen Sie den folgenden kubectl-Befehl vom Master-Knoten aus,
[email protected]:~$ kubectl create deploy nginx-web --image=nginxdeployment.apps/nginx-web created[email protected]:~$Führen Sie den folgenden Befehl aus, um den Bereitstellungsstatus zu überprüfen
[email protected]:~$ kubectl get deploys.appsNAME BEREIT AKTUELL VERFÜGBAR AGEnginx-web 1/1 1 1 41s[email protected]:~$ kubectl get deploys.apps -o wideNAME -Date verfügbare Alterscontainer Bilder selectOrnginx-web 1/1 1 1 56S Nginx nginx app =nginx-web [E-Mail geschützt]:~ $ [E-Mail geschützt]:~ $ kubectl Get PodsName Ready Ready Status Neustarts Agenginx-Web-7748f778-Nk8b2 1 1ginx-Web-7748f778-Nk8b2 1 /1 Läuft 0 2m50s[email protected]:~$Wie wir sehen können, wurde die Bereitstellung erfolgreich mit dem Standardreplikat erstellt.
Lassen Sie uns die Bereitstellung hochskalieren, stellen Sie Replikate auf 4 ein. Führen Sie den folgenden Befehl aus:
[E-Mail-geschützt]:~$ kubectl scale --replicas=4 Bereitstellung nginx-webdeployment.apps/nginx-web scaled[E-Mail-geschützt]:~$Überprüfen Sie nun den Status Ihrer Bereitstellung mit den folgenden Befehlen,
[email protected]:~$ kubectl get deploys.apps nginx-webNAME BEREIT AKTUELL VERFÜGBAR AGenginx-web 4/4 4 4 13m[email protected]:~$[email protected]:~$ kubectl deploys.apps nginx-web
Oben wird bestätigt, dass die nginx-basierte Bereitstellung erfolgreich hochskaliert wurde.
Lassen Sie uns einen weiteren Test durchführen, einen Pod namens „http-web“ erstellen und ihn über den Dienst namens „http-service“ mit Port 80 und NodePort als Typ verfügbar machen.
Führen Sie den folgenden Befehl aus, um einen Pod zu erstellen,
[email protected]:~$ kubectl run http-web --image=httpd --port=80pod/http-web created[email protected]:~$Erstellen Sie einen Dienst mit dem Befehl below und stellen Sie den oben erstellten Pod auf Port 80 bereit,
[E-Mail-geschützt]:~$ kubectl-Expose-Pod http-web --name=http-service --port=80 --type=NodePortservice/http-service exponiert[E-Mail-geschützt]:~$[E-Mail-geschützt]:~$ kubectl get service http-serviceNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEhttp-service NodePort 10.101.152.13880:31098/TCP 10s[email protected]:~$
Rufen Sie die Knoten-IP oder den Hostnamen ab, auf dem der HTTP-Web-Pod bereitgestellt wird, und greifen Sie dann über NodePort (31098) auf den Webserver zu.
[E-Mail geschützt]:~ $ kubectl erhalten Pods http-web -o widename Ready Status Neustarts Alter IP-Knoten Nominierte Knotenbereitschaft Gateshttp-Web 1>[email protected]:~$[email protected]:~$ curl http://k8s-node-0:31098Es funktioniert!
[E-Mail-geschützt]:~$Perfekt, es funktioniert wie erwartet. Damit ist der Artikel abgeschlossen und bestätigt, dass wir den Kubernetes-Cluster erfolgreich auf dem Ubuntu 20.04 LTS-Server eingerichtet haben.
Auch lesen :So richten Sie den NGINX Ingress Controller in Kubernetes ein
Auch lesen : So richten Sie eine private Docker-Registrierung in Kubernetes (k8s) ein