Erfahren Sie, wie Sie Kubernetes unter Ubuntu installieren.
Kubernetes ist ein Open-Source-Container-Orchestrierungstool, das von Google entwickelt wurde. In diesem Artikel erfahren Sie, wie Sie Kubernetes mit einem Master-Knoten und einem Worker-Knoten einrichten. Stellen Sie sicher, dass Sie Docker sowohl auf dem Master- als auch auf dem Worker-Knoten installiert haben.
Details zur Umgebung und Einrichtung
Für die Demonstration habe ich 2 Ubuntu-Systeme, von denen eines der Master-Knoten und das andere der Worker-Knoten sein wird. Die Konfiguration beider Server ist wie folgt.
- 2 CPUs
- Master – 4 GB RAM / Worker – 2 GB RAM
- 10 GB Festplatte
Verwenden Sie den Befehl hostnamectl
, um den Hostnamen auf beiden Systemen festzulegen.
Auf dem Master-Knoten:
geekflare@geekflare:~$ sudo hostnamectl set-hostname kubernetes-master
Auf dem Worker-Knoten:
geekflare@geekflare:~$ sudo hostnamectl set-hostname kubernetes-worker
Im Folgenden finden Sie die Details zu beiden Knoten.
Master-Knoten
- Hostname: kubernetes-master
- IP-Adresse: 192.168.0.107
Worker-Knoten
- Hostname: kubernetes-worker
- IP-Adresse: 192.168.0.108
Bearbeiten Sie die Datei hosts auf beiden Systemen.
geekflare@geekflare:~$ sudo gedit /etc/hosts
192.168.0.107 kubernetes-master
192.168.0.109 kubernetes-worker
Bevor Sie mit der Installation von Kubernetes beginnen, führen Sie den folgenden Befehl sowohl auf dem Master- als auch auf dem Worker-Knoten aus, um zu überprüfen, ob Docker läuft.
geekflare@geekflare:~$ sudo service docker status
<x><x>[sudo]</x></x> Passwort für geekflare:
● docker.service - Docker Application Container Engine
Geladen: geladen (/lib/systemd/system/docker.service; aktiviert; Hersteller-Voreinstellung: aktiviert)
Aktiv: aktiv (läuft) seit Sat 2019-11-23 15:39:36 EST; vor 3 Wochen 0 Tagen
Dokumente: https://docs.docker.com
Haupt-PID: 8840 (dockerd)
Aufgaben: 17
Speicher: 42.3M
CGruppe: /system.slice/docker.service
└─8840 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Nov 23 15:39:35 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:35.091941184-05:00" level=warning msg="Ihr Kernel unterstützt nicht cgrou
Nov 23 15:39:35 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:35.093149218-05:00" level=info msg="Container werden geladen: Start."
Nov 23 15:39:35 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:35.957842188-05:00" level=info msg="Standardbrücke (docker0) ist zugewiesen
Nov 23 15:39:36 geekflare dockerd<x><x><x><x><x><x><x><x>[8840</x></x></x></x></x></x></x></x>]: time="2019-11-23T15:39:36.078753190-05:00" level=info msg="Container laden: erledigt."
Nov 23 15:39:36 geekflare dockerd<x><x><x><x><x><x><x><x>[8840</x></x></x></x></x></x></x></x>]: time="2019-11-23T15:39:36.664727326-05:00" level=info msg="Docker daemon" commit=481bc77 graphdr
Nov 23 15:39:36 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:36.817929464-05:00" level=error msg="cluster exited with error: error whi
Nov 23 15:39:36 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:36.820439024-05:00" level=error msg="Schwarmkomponente konnte nicht gestartet werden
Nov 23 15:39:36 geekflare dockerd<x><x><x><x><x><x><x><x>[8840</x></x></x></x></x></x></x></x>]: time="2019-11-23T15:39:36.820821712-05:00" level=info msg="Daemon hat Initialisierung abgeschlossen"
Nov 23 15:39:36 geekflare systemd[1]: Docker Application Container Engine gestartet.
Nov 23 15:39:36 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:36.883382952-05:00" level=info msg="API listen on /home/geekflare/docker.sock
zeilen 1-20/20 (END)
Kubernetes installieren
Führen Sie alle in diesem Abschnitt genannten Befehle sowohl auf dem Master- als auch auf dem Worker-Knoten aus.
Fügen Sie zunächst den Schlüssel für das Kubernetes-Paket-Repository hinzu.
geekflare@kubernetes-master:~$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
<x><x>[sudo]</x></x> Passwort für geekflare:
OK
Führen Sie den folgenden Befehl aus, um das Kubernetes-Paket-Repository zu konfigurieren.
geekflare@kubernetes-master:~$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
Treffer:1 https://download.docker.com/linux/ubuntu bionic InRelease
Treffer:2 http://ppa.launchpad.net/ansible/ansible/ubuntu cosmic InRelease
Treffer:3 http://apt.puppetlabs.com bionic InRelease [85.3 kB]
Treffer:5 http://security.ubuntu.com/ubuntu cosmic-security InRelease
Treffer:6 http://us.archive.ubuntu.com/ubuntu kosmisch InRelease
Treffer:7 http://pkg.jenkins.io/debian-stable binary/ InRelease
Treffer:8 http://us.archive.ubuntu.com/ubuntu cosmic-updates InRelease
Treffer:9 http://pkg.jenkins.io/debian-stable binary/ Freigabe
Treffer:10 http://us.archive.ubuntu.com/ubuntu cosmic-backports InRelease
Treffer:4 https://packages.cloud.google.com/apt kubernetes-xenial InRelease [8.993 B]
Treffer:11 http://apt.puppetlabs.com bionic/puppet6 amd64 Pakete [36.1 kB]
Get:13 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 Pakete [32.2 kB]
Holt 163 kB in 3s (49.1 kB/s)
Paketlisten lesen... Erledigt
Bevor Sie fortfahren, deaktivieren Sie den Swap-Bereich auf beiden Nodes.
geekflare@kubernetes-master:~$ sudo swapoff -a
Installieren Sie Kubeadm
Jetzt müssen Sie kubeadm installieren.
kubeadm ist ein Tool in Kubernetes, das zum Hinzufügen von Knoten im Kubernetes-Cluster verwendet wird.
geekflare@kubernetes-master:~$ sudo apt-get install kubeadm -y
Paketlisten lesen... Erledigt
Abhängigkeitsstruktur aufbauen
Lesen von Statusinformationen... Erledigt
Die folgenden zusätzlichen Pakete werden installiert:
conntrack cri-tools ebtables ethtool kubectl kubelet kubernetes-cni socat
Die folgenden NEUEN Pakete werden installiert:
conntrack cri-tools ebtables ethtool kubeadm kubectl kubelet kubernetes-cni socat
0 upgegradet, 9 neu installiert, 0 zu entfernen und 235 nicht upgegradet.
Sie müssen 51,8 MB an Archiven erhalten.
Nach diesem Vorgang werden 273 MB zusätzlicher Speicherplatz benötigt.
Get:3 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 conntrack amd64 1:1.4.5-1 [30.2 kB]
Get:1 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 cri-tools amd64 1.13.0-00 [8.776 kB]
Get:6 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 ebtables amd64 2.0.10.4-3.5ubuntu5 [79.8 kB]
Hole:8 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 ethtool amd64 1:4.16-1 [115 kB]
Get:9 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 socat amd64 1.7.3.2-2ubuntu2 [342 kB]
Get:2 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubernetes-cni amd64 0.7.5-00 [6.473 kB]
Hole:4 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubelet amd64 1.17.0-00 [19.2 MB]
Hole:5 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubectl amd64 1.17.0-00 [8.742 kB]
Get:7 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubeadm amd64 1.17.0-00 [8.059 kB]
Holte 51.8 MB in 8s (6,419 kB/s)
Auswahl des zuvor nicht ausgewählten Pakets conntrack.
(Lesen der Datenbank ... 318151 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereiten des Entpackens von .../0-conntrack_1:1.4.5-1_amd64.deb ...
Entpacken von conntrack (1:1.4.5-1) ...
Auswählen des zuvor nicht ausgewählten Pakets cri-tools.
Vorbereiten zum Entpacken von .../1-cri-tools_1.13.0-00_amd64.deb ...
Entpacken von cri-tools (1.13.0-00) ...
Auswählen des zuvor nicht ausgewählten Pakets ebtables.
Vorbereiten zum Entpacken von .../2-ebtables_2.0.10.4-3.5ubuntu5_amd64.deb ...
Entpacken von ebtables (2.0.10.4-3.5ubuntu5) ...
Auswählen des zuvor nicht ausgewählten Pakets ethtool.
Vorbereiten zum Entpacken von .../3-ethtool_1:4.16-1_amd64.deb ...
Entpacken von ethtool (1:4.16-1) ...
Auswählen des zuvor nicht ausgewählten Pakets kubernetes-cni.
Vorbereiten zum Entpacken von .../4-kubernetes-cni_0.7.5-00_amd64.deb ...
Entpacken von kubernetes-cni (0.7.5-00) ...
Das zuvor nicht ausgewählte Paket socat wird ausgewählt.
Vorbereiten zum Entpacken von .../5-socat_1.7.3.2-2ubuntu2_amd64.deb ...
Entpacken von socat (1.7.3.2-2ubuntu2) ...
Auswahl des zuvor nicht ausgewählten Pakets kubelet.
Vorbereiten zum Entpacken von .../6-kubelet_1.17.0-00_amd64.deb ...
Entpacken von kubelet (1.17.0-00) ...
Bisher nicht ausgewähltes Paket kubectl auswählen.
Vorbereiten zum Entpacken von .../7-kubectl_1.17.0-00_amd64.deb ...
Entpacken von kubectl (1.17.0-00) ...
Auswählen des zuvor nicht ausgewählten Pakets kubeadm.
Vorbereiten zum Entpacken von .../8-kubeadm_1.17.0-00_amd64.deb ...
Entpacken von kubeadm (1.17.0-00) ...
Einrichten von conntrack (1:1.4.5-1) ...
Einrichten von kubernetes-cni (0.7.5-00) ...
Einrichten von cri-tools (1.13.0-00) ...
Einrichten von socat (1.7.3.2-2ubuntu2) ...
Verarbeitung von Triggern für systemd (239-7ubuntu10.12) ...
Einrichten von ebtables (2.0.10.4-3.5ubuntu5) ...
Symlink /etc/systemd/system/multi-user.target.wants/ebtables.service → /lib/systemd/system/ebtables.service erstellt.
update-rc.d: Warnung: Start- und Stop-Aktionen werden nicht mehr unterstützt; Rückfall auf Standardwerte
Einrichten von kubectl (1.17.0-00) ...
Verarbeitung von Triggern für man-db (2.8.4-2) ...
Einrichten von ethtool (1:4.16-1) ...
Einrichten von kubelet (1.17.0-00) ...
Symlink /etc/systemd/system/multi-user.target.wants/kubelet.service → /lib/systemd/system/kubelet.service erstellt.
Einrichten von kubeadm (1.17.0-00) ...
Verarbeitung von Triggern für systemd (239-7ubuntu10.12) ...
Überprüfen Sie die Version von kubeadm, um festzustellen, ob es korrekt installiert wurde.
geekflare@kubernetes-master:~$ kubeadm version
kubeadm version: &version.Info{Major: "1", Minor: "17", GitVersion: "v1.17.0", GitCommit: "70132b0f130acc0bed193d9ba59dd186f0e634cf", GitTreeState: "clean", BuildDate: "2019-12-07T21:17:50Z", GoVersion: "go1.13.4", Compiler: "gc", Plattform: "linux/amd64"}
Kubernetes Cluster initialisieren
Führen Sie nun den Befehl init aus, um den Kubernetes-Cluster nur auf dem Master-Knoten zu initialisieren. Verwenden Sie --apiserver-advertise-address
, um dem Arbeitsknoten die IP-Adresse des Masters mitzuteilen.
geekflare@kubernetes-master:~$ sudo kubeadm init --apiserver-advertise-address=192.168.0.107 --pod-network-cidr=10.244.0.0/16
W1217 11:05:15.474854 10193 validation.go:28] Kann kube-proxy-Konfiguration nicht validieren - kein Validator ist verfügbar
W1217 11:05:15.474935 10193 validation.go:28] Kubelet-Konfiguration kann nicht validiert werden - es ist kein Validator verfügbar
[init] Verwendet Kubernetes Version: v1.17.0
[<x><x><x><x><x><x><x>preflight]</x></x></x></x></x></x></x> Preflight-Prüfungen laufen
[WARNING IsDockerSystemdCheck]: hat "cgroupfs" als Docker cgroup-Treiber erkannt. Der empfohlene Treiber ist "systemd". Bitte folgen Sie der Anleitung unter https://kubernetes.io/docs/setup/cri/
[<x><x><x><x><x><x><x>preflight]</x></x></x></x></x></x></x> Ziehen der für die Einrichtung eines Kubernetes-Clusters erforderlichen Images
[<x><x><x><x><x><x><x>preflight]</x></x></x></x></x></x></x> Dies kann je nach Geschwindigkeit Ihrer Internetverbindung ein oder zwei Minuten dauern
[<x><x><x><x><x><x><x>preflight</x></x></x></x></x></x></x> ] Sie können diese Aktion auch vorher mit 'kubeadm config images pull' durchführen
[kubelet-start] Schreiben der Kubelet-Umgebungsdatei mit Flags in die Datei "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Schreibt die Kubelet-Konfiguration in die Datei "/var/lib/kubelet/config.yaml"
[kubelet-start] Starten des Kubelet
[<x><x><x><x><x><x><x><x><x><x><x><x><x><x>certs</x></x></x></x></x></x></x></x></x></x></x></x></x></x> ] Verwendung des certificateDir-Ordners "/etc/kubernetes/pki"
<x><x><x><x><x><x><x><x><x><x><x><x><x><x>[certs</x></x></x></x></x></x></x></x></x></x></x></x></x></x> ] Erzeugen von Zertifikat und Schlüssel "ca"
[<x><x><x><x><x><x><x><x><x><x><x><x><x><x>certs</x></x></x></x></x></x></x></x></x></x></x></x></x></x> ] Erzeugen von Zertifikat und Schlüssel für "apiserver
<x><x><x><x><x><x><x><x><x><x><x><x><x><x>[certs]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> apiserver serving cert ist für DNS-Namen [kubernetes-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] und IPs [10.96.0.1 192.168.0.107] signiert
<x><x><x><x><x><x><x><x><x><x><x><x><x><x>[certs]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> Erzeugen des Zertifikats und Schlüssels "apiserver-kubelet-client"
[<x><x><x><x><x><x><x><x><x><x><x><x><x><x>certs</x></x></x></x></x></x></x></x></x></x></x></x></x></x> ] Erzeugen des Zertifikats und Schlüssels "front-proxy-ca
<x><x><x><x><x><x><x><x><x><x><x><x><x><x>[certs</x></x></x></x></x></x></x></x></x></x></x></x></x></x> ] Erzeugen von Zertifikat und Schlüssel für "front-proxy-client
[<x><x><x><x><x><x><x><x><x><x><x><x><x><x>certs</x></x></x></x></x></x></x></x></x></x></x></x></x></x> ] Erzeugen von Zertifikat und Schlüssel für "etcd/ca
[<x><x><x><x><x><x><x><x><x><x><x><x><x><x>certs</x></x></x></x></x></x></x></x></x></x></x></x></x></x> ] Erzeugen von Zertifikat und Schlüssel für "etcd/server
<x><x><x><x><x><x><x><x><x><x><x><x><x><x>[certs]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> etcd/server serving cert ist signiert für DNS-Namen [kubernetes-master localhost] und IPs [192.168.0.107 127.0.0.1 ::1]
<x><x><x><x><x><x><x><x><x><x><x><x><x><x>[certs</x></x></x></x></x></x></x></x></x></x></x></x></x></x> ] Zertifikat und Schlüssel für "etcd/peer" erzeugen
<x><x><x><x><x><x><x><x><x><x><x><x><x><x>[certs]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> etcd/peer serving cert ist für DNS-Namen [kubernetes-master localhost] und IPs [192.168.0.107 127.0.0.1 ::1] signiert
<x><x><x><x><x><x><x><x><x><x><x><x><x><x>[certs]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> Erzeugen von Zertifikat und Schlüssel für "etcd/healthcheck-client
[<x><x><x><x><x><x><x><x><x><x><x><x><x><x>certs</x></x></x></x></x></x></x></x></x></x></x></x></x></x> ] Erzeugen des Zertifikats und Schlüssels "apiserver-etcd-client
[<x><x><x><x><x><x><x><x><x><x><x><x><x><x>certs</x></x></x></x></x></x></x></x></x></x></x></x></x></x> ] Generierung des Schlüssels "sa" und des öffentlichen Schlüssels
[<x><x><x><x>kubeconfig]</x></x></x></x> Verwendung des kubeconfig-Ordners "/etc/kubernetes"
<x><x><x><x>[kubeconfig</x></x></x></x> ] Schreiben der kubeconfig-Datei "admin.conf
[<x><x><x><x>kubeconfig</x></x></x></x> ] Schreiben der kubeconfig-Datei "kubelet.conf
<x><x><x><x>[kubeconfig</x></x></x></x> ] Schreiben der kubeconfig-Datei "controller-manager.conf
[<x><x><x><x>kubeconfig</x></x></x></x> ] Schreiben der kubeconfig-Datei "scheduler.conf
[control-plane] Manifest-Ordner "/etc/kubernetes/manifests" verwenden
[control-plane] Statisches Pod-Manifest für "kube-apiserver" erstellen
[control-plane] Statisches Pod-Manifest für "kube-controller-manager" erstellen
W1217 11:05:25.584769 10193 manifests.go:214] der Standard-Autorisierungsmodus von kube-apiserver ist "Node,RBAC"; mit "Node,RBAC"
[control-plane] Statisches Pod-Manifest für "kube-scheduler" erstellen
W1217 11:05:25.587128 10193 manifests.go:214] der standardmäßige kube-apiserver authorization-mode ist "Node,RBAC"; mit "Node,RBAC"
[etcd ] Statisches Pod-Manifest für lokalen etcd in "/etc/kubernetes/manifests" erstellen
[wait-control-plane] Wartet darauf, dass das Kubelet die Control-Plane als statische Pods aus dem Verzeichnis "/etc/kubernetes/manifests" hochfährt. Dies kann bis zu 4m0s dauern
[apiclient ] Alle Komponenten der Steuerebene sind nach 35,010368 Sekunden in Ordnung
[upload-config] Speicherung der in der ConfigMap "kubeadm-config" verwendeten Konfiguration im Namespace "kube-system"
[kubelet ] Erstellen einer ConfigMap "kubelet-config-1.17" im Namespace kube-system mit der Konfiguration für die Kubelets im Cluster
[upload-certs] Überspringen der Phase. Siehe --upload-certs
[mark-control-plane] Markierung des Knotens kubernetes-master als control-plane durch Hinzufügen des Labels "node-role.kubernetes.io/master=''"
[mark-control-plane] Markierung des Knotens kubernetes-master als Control-Plane durch Hinzufügen des Taints [node-role.kubernetes.io/master:NoSchedule]
[bootstrap-token] Token verwenden: dmamk9.0nmo62mhom8961qw
[bootstrap-token] Konfigurieren von Bootstrap-Token, cluster-info ConfigMap, RBAC-Rollen
[bootstrap-token] RBAC-Regeln konfiguriert, um Node Bootstrap-Token zu erlauben, CSRs zu posten, damit Nodes langfristige Zertifikatsanmeldeinformationen erhalten können
[bootstrap-token] konfigurierte RBAC-Regeln, damit der csrapprover-Controller CSRs von einem Node Bootstrap Token automatisch genehmigen kann
[bootstrap-token] RBAC-Regeln konfiguriert, um die Zertifikatsrotation für alle Knoten-Client-Zertifikate im Cluster zu ermöglichen
[bootstrap-token] Erstellen der ConfigMap "cluster-info" im Namespace "kube-public"
[kubelet-finalize] Aktualisierung von "/etc/kubernetes/kubelet.conf", um auf ein rotierbares Kubelet-Client-Zertifikat und einen Schlüssel zu verweisen
[<x>addons]</x> Wesentliches Addon angewendet: CoreDNS
[<x>addons</x> ] Wesentliches Addon angewendet: kube-proxy
Ihre Kubernetes-Kontrollebene wurde erfolgreich initialisiert!
Um Ihren Cluster in Betrieb zu nehmen, müssen Sie folgendes als normaler Benutzer ausführen:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Als nächstes müssen Sie ein Pod-Netzwerk auf dem Cluster einrichten.
Führen Sie kubectl apply -f [podnetwork].yaml
mit einer der unter https://kubernetes.io/docs/concepts/cluster-administration/addons/ aufgeführten Optionen aus
Dann können Sie eine beliebige Anzahl von Worker Nodes beitreten, indem Sie auf jedem als root folgendes ausführen:
kubeadm join 192.168.0.107:6443 --token dmamk9.0nmo62mhom8961qw --discovery-token-ca-cert-hash sha256:2de92f42e84d2020d8b19b1778785df5f8196e5eedaa5664ad911e8c23f58963
Wie in der obigen Ausgabe erwähnt, erstellen Sie das Verzeichnis .kube und kopieren die Datei admin.conf in die Konfigurationsdatei im Verzeichnis .kube.
geekflare@kubernetes-master:~$ mkdir -p $HOME/.kube
geekflare@kubernetes-master:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
geekflare@kubernetes-master:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
Wenn Sie jetzt den Befehl kubectl get nodes
ausführen, sehen Sie, dass der Status des Master-Knotens NotReady lautet.
geekflare@kubernetes-master:~$ sudo kubectl get nodes
NAME STATUS ROLLEN ALTER VERSION
kubernetes-master NotReady master 2m34s v1.17.0
Pod-Netzwerk bereitstellen – Flannel
Als nächstes müssen Sie ein Pod-Netzwerk auf dem Master-Knoten einrichten. Ich verwende das Flannel-Pod-Netzwerk. Es wird für die Kommunikation zwischen den Knoten im Kubernetes-Cluster verwendet.
geekflare@kubernetes-master:~$ sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged erstellt
clusterrole.rbac.authorization.k8s.io/flannel erstellt
clusterrolebinding.rbac.authorization.k8s.io/flannel erstellt
serviceaccount/flannel erstellt
configmap/kube-flannel-cfg erstellt
daemonset.apps/kube-flannel-ds-amd64 erstellt
daemonset.apps/kube-flannel-ds-arm64 erstellt
daemonset.apps/kube-flannel-ds-arm erstellt
daemonset.apps/kube-flannel-ds-ppc64le erstellt
daemonset.apps/kube-flannel-ds-s390x erstellt
Überprüfen Sie den Status des Master-Knotens, er muss sich im Zustand Ready befinden.
geekflare@kubernetes-master:~$ sudo kubectl get nodes
NAME STATUS ROLLEN ALTER VERSION
kubernetes-master Bereit master 4m41s v1.17.0
Prüfen Sie nach ein paar Sekunden, ob alle Pods laufen.
geekflare@kubernetes-master:~$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6955765f44-rzw9d 1/1 Läuft 0 4m17s
kube-system coredns-6955765f44-xvgdp 1/1 Läuft 0 4m17s
kube-system etcd-kubernetes-master 1/1 Läuft 0 4m27s
kube-system kube-apiserver-kubernetes-master 1/1 Läuft 0 4m27s
kube-system kube-controller-manager-kubernetes-master 1/1 Läuft 0 4m27s
kube-system kube-flannel-ds-amd64-c2rf5 1/1 Läuft 0 81s
kube-system kube-proxy-mvdd7 1/1 Läuft 0 4m17s
kube-system kube-scheduler-kubernetes-master 1/1 Läuft 0 4m27s
Worker Node zum Cluster hinzufügen
Nun, da Ihr Master-Knoten ordnungsgemäß konfiguriert ist und läuft, ist es an der Zeit, den Worker-Knoten hinzuzufügen. Dazu müssen Sie den Befehl join auf dem Arbeitsknoten ausführen, den Sie nach der Initialisierung von kubeadm
erhalten haben.
Führen Sie den folgenden Befehl auf dem Worker Node aus, um dem Master Node beizutreten.
geekflare@kubernetes-worker:~$ sudo kubeadm join 192.168.0.107:6443 --token dmamk9.0nmo62mhom8961qw --discovery-token-ca-cert-hash sha256:2de92f42e84d2020d8b19b1778785df5f8196e5eedaa5664ad911e8c23f58963
<x><x>[sudo]</x></x> Passwort für geekflare:
W1217 11:08:01.066191 28968 join.go:346] <x><x><x><x><x><x><x>[preflight]</x></x></x></x></x></x></x> WARNUNG: JoinControlPane.controlPlane-Einstellungen werden ignoriert, wenn das control-plane-Flag nicht gesetzt ist.
[<x><x><x><x><x><x><x>preflight]</x></x></x></x></x></x></x> Preflight-Prüfungen laufen
[WARNING IsDockerSystemdCheck]: hat "cgroupfs" als Docker cgroup-Treiber erkannt. Der empfohlene Treiber ist "systemd". Bitte folgen Sie der Anleitung unter https://kubernetes.io/docs/setup/cri/
[<x><x><x><x><x><x><x>preflight]</x></x></x></x></x></x></x> Lesen der Konfiguration aus dem Cluster...
<x><x><x><x><x><x><x>[preflight]</x></x></x></x></x></x></x> Zu Ihrer Information: Sie können diese Konfigurationsdatei mit 'kubectl -n kube-system get cm kubeadm-config -oyaml' einsehen
[kubelet-start] Herunterladen der Konfiguration für das Kubelet aus der ConfigMap "kubelet-config-1.17" im Namespace kube-system
[kubelet-start] Schreiben der Kubelet-Konfiguration in die Datei "/var/lib/kubelet/config.yaml"
[kubelet-start] Kubelet-Umgebungsdatei mit Flags in die Datei "/var/lib/kubelet/kubeadm-flags.env" schreiben
[kubelet-start] Startet das Kubelet
[kubelet-start] Ich warte darauf, dass das Kubelet den TLS-Bootstrap durchführt...
Dieser Knoten ist dem Cluster beigetreten:
* Die Anfrage zur Signierung des Zertifikats wurde an apiserver gesendet und eine Antwort wurde empfangen.
* Das Kubelet wurde über die neuen sicheren Verbindungsdetails informiert.
Führen Sie auf der Control-Plane 'kubectl get nodes' aus, um zu sehen, dass dieser Knoten dem Cluster beigetreten ist.
Auf dem Master-Knoten:
Sie werden sehen, dass jetzt ein paar mehr Pods laufen, nachdem der Worker Node dem Cluster beigetreten ist.
geekflare@kubernetes-master:~$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6955765f44-9c7jc 1/1 Läuft 0 5m3s
kube-system coredns-6955765f44-c9s9r 1/1 Läuft 0 5m3s
kube-system etcd-kubernetes-master 1/1 Läuft 0 5m12s
kube-system kube-apiserver-kubernetes-master 1/1 Läuft 0 5m12s
kube-system kube-controller-manager-kubernetes-master 1/1 Läuft 0 5m13s
kube-system kube-flannel-ds-amd64-lgr62 1/1 Läuft 0 3m35s
kube-system kube-flannel-ds-amd64-n6vwm 1/1 Läuft 0 27s
kube-system kube-proxy-9mqp6 1/1 Läuft 0 27s
kube-system kube-proxy-kwkz2 1/1 Läuft 0 5m3s
kube-system kube-scheduler-kubernetes-master 1/1 Läuft 0 5m13s
Führen Sie nun den Befehl kubectl
erneut auf dem Master-Knoten aus, um zu überprüfen, ob der Worker-Knoten dem Cluster beigetreten ist und sich im Zustand Ready befindet.
geekflare@kubernetes-master:~$ kubectl get nodes
NAME STATUS ROLLEN ALTER VERSION
kubernetes-master Bereit master 5m27s v1.17.0
kubernetes-worker Bereit <keine> 31s v1.17.0
Fazit
Nun, da das Kubernetes-Setup fertig ist, können Sie mit der Orchestrierung von Containern auf dem Kubernetes-Cluster beginnen. Wenn Sie sich für Kubernetes begeistern können, dann sollten Sie diesen Udemy-Kurs besuchen.