In dem Dokumentationssatz für dieses Produkt wird die Verwendung inklusiver Sprache angestrebt. Für die Zwecke dieses Dokumentationssatzes wird Sprache als „inklusiv“ verstanden, wenn sie keine Diskriminierung aufgrund von Alter, körperlicher und/oder geistiger Behinderung, Geschlechtszugehörigkeit und -identität, ethnischer Identität, sexueller Orientierung, sozioökonomischem Status und Intersektionalität impliziert. Dennoch können in der Dokumentation stilistische Abweichungen von diesem Bemühen auftreten, wenn Text verwendet wird, der in Benutzeroberflächen der Produktsoftware fest codiert ist, auf RFP-Dokumentation basiert oder von einem genannten Drittanbieterprodukt verwendet wird. Hier erfahren Sie mehr darüber, wie Cisco inklusive Sprache verwendet.
Cisco hat dieses Dokument maschinell übersetzen und von einem menschlichen Übersetzer editieren und korrigieren lassen, um unseren Benutzern auf der ganzen Welt Support-Inhalte in ihrer eigenen Sprache zu bieten. Bitte beachten Sie, dass selbst die beste maschinelle Übersetzung nicht so genau ist wie eine von einem professionellen Übersetzer angefertigte. Cisco Systems, Inc. übernimmt keine Haftung für die Richtigkeit dieser Übersetzungen und empfiehlt, immer das englische Originaldokument (siehe bereitgestellter Link) heranzuziehen.
Dieses Dokument beschreibt die Implementierung des Kubernetes-Clusters mit 3 Master- und 4 Worker-Knoten mit einem Bastionshost, der als Load Balancer auf der Google Cloud Platform (GCP) fungiert.
Cisco empfiehlt, dass Sie über Kenntnisse in folgenden Bereichen verfügen:
Die Informationen in diesem Dokument basieren auf:
Die Informationen in diesem Dokument beziehen sich auf Geräte in einer speziell eingerichteten Testumgebung. Alle Geräte, die in diesem Dokument benutzt wurden, begannen mit einer gelöschten (Nichterfüllungs) Konfiguration. Wenn Ihr Netzwerk in Betrieb ist, stellen Sie sicher, dass Sie die möglichen Auswirkungen aller Befehle verstehen.
Bastionshost, Kube-Master, Kube-Node
Kube-Apiserver:
i. Stellt eine API bereit, die als Front-End einer Kubernetes-Kontrollebene dient.
ii. Er verarbeitet externe und interne Anforderungen, die bestimmen, ob eine Anforderung gültig ist, und verarbeitet sie anschließend.
iii. Der Zugriff auf die API erfolgt über das kubectl
Kommandozeile oder anderen Tools wie kubeadm
und über REST-Anrufe.
Kube-Scheduler:
i. Diese Komponente plant Pods auf bestimmten Knoten gemäß automatisierten Workflows und benutzerdefinierten Bedingungen.
Kube-Controller-Manager:
i. Der Kubernetes-Controller-Manager ist ein Regelkreis, der den Zustand eines Kubernetes-Clusters überwacht und regelt.
ii. Es empfängt Informationen über den aktuellen Status des Clusters und der darin enthaltenen Objekte und sendet Anweisungen, wie der Cluster in den gewünschten Status des Clusterbetreibers verschoben werden kann.
usw.:
i. Eine Schlüssel-Wert-Datenbank, die Daten über den Clusterstatus und die Konfiguration enthält.
Etcd ist fehlertolerant und verteilt.
Kubelet:
i. Jeder Knoten enthält eine kubelet
, eine kleine Anwendung, die mit der Kubernetes-Kontrollebene kommunizieren kann.
ii. Die kubelet
stellt sicher, dass die in der PoD-Konfiguration angegebenen Container auf einem bestimmten Knoten ausgeführt werden und ihren Lebenszyklus verwalten.
iii. Es führt die von Ihrer Kontrollebene angeforderten Aktionen aus.
Kube-Proxy:
i. Alle Rechenknoten enthalten kube-proxy
, ein Netzwerk-Proxy, der Kubernetes-Netzwerkdienste vereinfacht.
ii. Es verarbeitet die gesamte Netzwerkkommunikation außerhalb und innerhalb des Clusters und leitet Datenverkehr oder Antworten auf der Paketfilterungsebene des Betriebssystems weiter.
PODS:
i. Ein POD dient als einzelne Anwendungsinstanz und gilt als kleinste Einheit im Objektmodell von Kubernetes.
Bastionshost:
i. Der Computer hostet in der Regel eine einzelne Anwendung oder einen Prozess, z. B. einen Proxyserver oder einen Load Balancer, und alle anderen Dienste werden entfernt oder eingeschränkt, um die Bedrohung für den Computer zu reduzieren.
Cluster:
Hochverfügbarer Kubernetes-Cluster mit drei Kontrollebenen
Hinweis: Konfigurieren Sie VPC auf GCP, bevor Sie die VMs bereitstellen. Referenz VPC auf GCP.
Auf GCP Bereitstellung einer Centos7 aus dem GCP-Marktplatz.
Centos Marktplatz auf GCP
Klicken Sie auf Launch
.
Virtuelles Centos 7-System
Wählen Sie die Region aus, die am nächsten erreichbar ist. In dieser Übung wird die Region als Mumbai konfiguriert.
Centos7 Computing Engine-Konfiguration
Bei der Maschinenkonfiguration handelt es sich um eine universelle Serie E2 und einen Maschinentyp e2-standard-16 (16 vCPU, 64 GB memory)
.
Centos 7 - Ressourcenkonfiguration
Auswählen Allow default access
und für die Firewall Allow HTTP traffic
und Allow HTTPS traffic
.
Centos 7 Netzwerkkonfiguration
Klicken Sie auf Create
.
Erstellen Sie ebenfalls 8 Knoten, wie hier gezeigt.
Multi-Master-Bereitstellung auf Google Cloud-Plattform
Private IPs:
Auf GCP werden die privaten und öffentlichen IPs automatisch zugewiesen.
master-1 = 10.160.x.9
master-2 = 10.160.x.10
master-3 = 10.160.x.11
worker-1 = 10.160.x.12
worker-2 = 10.160.x.13
worker-3 = 10.160.x.14
worker-4 = 10.160.x.16
bastion = 10.160.x.19
Auf allen Knoten (Master, Worker, Bastion):
1. Öffnen Sie die erforderlichen Firewall-Ports auf dem Linux-Server, und konfigurieren Sie die Sicherheitskonfigurationen.
Auf Master-Knoten in Multi-Master-Bereitstellungen:
Kubernetes etcd server client API: 2379/tcp, 2380/tcp
Kubernetes API server: 6443/tcp
Hinweis: Stellen Sie außerdem sicher, dass die Ports der GCP-Firewall zulässig sind.
2. Konfigurieren der erforderlichen Netzwerkeinstellungen (lokaler DNS, Hostnamen, NTP)
Bastion-Server:
1. Richten Sie einen hoch verfügbaren Proxy ein.
2. Frontend und Backend Serverkonfiguration hinzufügen auf haproxy.conf
Datei.
3. Starten Sie den haproxy
Services.
Allgemeine Schritte für Master- und Arbeitsknoten:
1. Installieren und konfigurieren Sie das Docker.
2. Installieren und konfigurieren Sie Kubernetes.
Nur auf Master-Knoten:
1. Initialisieren Sie das neue Kubernetes-Cluster (kubeadm init
).
2. Installation Calico
Netzwerk-Plug-in (speziell für den DNS-Kerndienst auf den Master-Knoten verwendet).
3. Verwenden Sie diesen Befehl, um die Master-Knoten mit einem Master-Knoten verbinden.
kubeadm join
:6443 --token
\ --discovery-token-ca-cert-hash
\ --control-plane --certificate-key
4. Validieren Sie die Cluster-Informationen mit kubectl get nodes
aus.
Nur auf Arbeitsknoten:
1. Verwenden Sie diesen Befehl, um den Arbeitsknoten mit dem Hauptknoten zu verbinden.
kubeadm join
:6443 --token
\ --discovery-token-ca-cert-hash
2. Validieren Sie nach dem erfolgreichen Beitritt die Cluster-Informationen auf den Master-Knoten mit diesem Befehl. kubectl get nodes
.
1. Ändern Sie das Root-Passwort, falls unbekannt, mit dem folgenden Befehl:
passwd
2. Ändern Sie ggf. die Hostnamen mit diesem Befehl.
hostnamectl set-hostname
3. Konfigurieren des lokalen DNS
cat > /etc/hosts <
4. Aktivieren Sie mit diesem Befehl die Chronik für NTP-Dienste.
systemctl enable --now chronyd
2. Überprüfen Sie mit diesem Befehl den Status.
systemctl status chronyd
3. Überprüfen Sie mit diesem Befehl die NTP-Quellen.
chronyc sources -v
Bastion-Server
Schritt 1: Überprüfen Sie Updates.
sudo yum check-update
Schritt 2: Updates installieren, wenn sie nicht aktuell sind
yum update -y
Schritt 3: Installieren Sie yum Utilities.
yum -y install yum-utils
Schritt 4: Installieren Sie das haproxy-Paket.
yum install haproxy -y
Schritt 5: Diese Konfiguration unter den Standardeinstellungen hinzufügen in /etc/haproxy/haproxy.cfg
:
frontend kubernetes
bind 10.160.x.19:6443
option tcplog
mode tcp
default_backend kubernetes-master-nodes
frontend http_front
mode http
bind 10.160.x.19:80
default_backend http_back
frontend https_front
mode http
bind 10.160.x.19:443
default_backend https_back
backend kubernetes-master-nodes
mode tcp
balance roundrobin
option tcp-check
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
backend http_back
mode http
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
backend https_back
mode http
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
listen stats
bind 10.160.x.19:8080
mode http
stats enable
stats uri /
Schritt 6: Überprüfen Sie die Konfigurationsdatei, sodass sie wie dieser Befehl aussieht. vi /etc/haproxy/haproxy.cfg
:
---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend kubernetes
bind 10.160.x.19:6443
option tcplog
mode tcp
default_backend kubernetes-master-nodes
frontend http_front
mode http
bind 10.160.x.19:80
default_backend http_back
frontend https_front
mode http
bind 10.160.x.19:443
default_backend https_back
backend kubernetes-master-nodes
mode tcp
balance roundrobin
option tcp-check
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
backend http_back
mode http
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
backend https_back
mode http
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
listen stats
bind 10.160.x.19:8080
mode http
stats enable
stats uri /
Schritt 7. Überprüfen Sie den Status von haproxy:
[root@k8-loadbalancer vapadala]# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-10-26 08:33:17 UTC; 6s ago
Main PID: 30985 (haproxy-systemd)
CGroup: /system.slice/haproxy.service
├─30985 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
├─30986 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
└─30987 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
Oct 26 08:33:17 k8-loadbalancer systemd[1]: Started HAProxy Load Balancer.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /r...pid -Ds
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: [WARNING] 298/083317 (30986) : config : 'option forwardfor' ignored for frontend 'kube...P mode.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: [WARNING] 298/083317 (30986) : config : 'option forwardfor' ignored for backend 'kuber...P mode.
Hint: Some lines were ellipsized, use -l to show in full.
[root@k8-loadbalancer vapadala]#
Mögliche Fehler
1. Der HAProxy-Dienst befindet sich im Fehlerzustand, nachdem Sie Konfigurationsänderungen vorgenommen haben in haproxy.cfg
. Beispiele;
[root@k8-loadbalancer vapadala]# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Wed 2022-10-26 08:29:23 UTC; 3min 44s ago
Process: 30951 ExecStart=/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid $OPTIONS (code=exited, status=1/FAILURE)
Main PID: 30951 (code=exited, status=1/FAILURE)
Oct 26 08:29:23 k8-loadbalancer systemd[1]: Started HAProxy Load Balancer.
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /r...pid -Ds
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: [WARNING] 298/082923 (30952) : config : 'option forwardfor' ignored for frontend 'kube...P mode.
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: [WARNING] 298/082923 (30952) : config : 'option forwardfor' ignored for backend 'kuber...P mode.
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: [ALERT] 298/082923 (30952) : Starting frontend kubernetes: cannot bind socket [10.160.x.19:6443].
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: haproxy-systemd-wrapper: exit, haproxy RC=1.
Oct 26 08:29:23 k8-loadbalancer systemd[1]: haproxy.service: main process exited, code=exited, status=1/FAILURE.
Oct 26 08:29:23 k8-loadbalancer systemd[1]: Unit haproxy.service entered failed state.
Oct 26 08:29:23 k8-loadbalancer systemd[1]: haproxy.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
Auflösung
1. Set the boolean value for haproxy_connect_any to true.
2. Restart the haproxy service.
3. Verify the status.
Ausführung:
[root@k8-loadbalancer vapadala]# setsebool -P haproxy_connect_any=1
[root@k8-loadbalancer vapadala]# systemctl restart haproxy
[root@k8-loadbalancer vapadala]# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-10-26 08:33:17 UTC; 6s ago
Main PID: 30985 (haproxy-systemd)
CGroup: /system.slice/haproxy.service
├─30985 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
├─30986 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
└─30987 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
Oct 26 08:33:17 k8-loadbalancer systemd[1]: Started HAProxy Load Balancer.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /r...pid -Ds.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: [WARNING] 298/083317 (30986) : config : 'option forwardfor' ignored for frontend 'kube...P mode.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: [WARNING] 298/083317 (30986) : config : 'option forwardfor' ignored for backend 'kuber...P mode.
Hint: Some lines were ellipsized, use -l to show in full.
[root@k8-loadbalancer vapadala]#
Installieren von Docker auf Master- und Worker-Knoten
Schritt 1: Überprüfen Sie Updates.
sudo yum check-update
Schritt 2: Updates installieren, wenn sie nicht aktuell sind.
yum update -y
Schritt 3: Installieren Sie yum Utilities.
yum -y install yum-utils
Schritt 4: Installieren Sie Docker.
curl -fsSL https://get.docker.com/ | sh
Schritt 5: Docker aktivieren.
systemctl enable --now docker
Schritt 6: Starten Sie den Dockerdienst.
sudo systemctl start docker
Schritt 7. Überprüfen Sie den Docker-Status.
sudo systemctl status docker
Ausgabe:
[root@kube-master1 vapadala]# sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-10-25 10:44:28 UTC; 40s ago
Docs: https://docs.docker.com
Main PID: 4275 (dockerd)
Tasks: 21
Memory: 35.2M
CGroup: /system.slice/docker.service
└─4275 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Oct 25 10:44:26 kube-master1 dockerd[4275]: time="2022-10-25T10:44:26.128233809Z" level=info msg="scheme \"unix\" not registered, fallback to defaul...dule=grpc.
Oct 25 10:44:26 kube-master1 dockerd[4275]: time="2022-10-25T10:44:26.128251910Z" level=info msg="ccResolverWrapper: sending update to cc: {[{unix:/...dule=grpc.
Oct 25 10:44:26 kube-master1 dockerd[4275]: time="2022-10-25T10:44:26.128260953Z" level=info msg="ClientConn switching balancer to \"pick_first\"" module=grpc.
Oct 25 10:44:27 kube-master1 dockerd[4275]: time="2022-10-25T10:44:27.920336293Z" level=info msg="Loading containers: start."
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.104357517Z" level=info msg="Default bridge (docker0) is assigned with an IP ad... address".
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.163830549Z" level=info msg="Loading containers: done."
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.182833703Z" level=info msg="Docker daemon" commit=03df974 graphdriver(s)=overl...=20.10.20.
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.182939545Z" level=info msg="Daemon has completed initialization".
Oct 25 10:44:28 kube-master1 systemd[1]: Started Docker Application Container Engine.
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.208492147Z" level=info msg="API listen on /var/run/docker.sock".
Hint: Some lines were ellipsized, use -l to show in full.
[root@kube-master1 vapadala]#
Installation von Kubernetes auf Master- und Worker-Knoten
Schritt 1: Kubernetes Repository hinzufügen.
cat <
"gpgcheck = 0" will not verify the authenticity of the package if unsigned. Production environment it is recommended to set "gpgcheck = 1"
Schritt 2: Deaktivieren SELinux
.
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
Schritt 3: Installation Kubernetes
.
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
Schritt 4: Aktivieren Kubelet
.
sudo systemctl enable --now kubelet
Schritt 5: Konfigurieren Pod Network
.
kubeadm init --control-plane-endpoint "10.160.x.19:6443" --upload-certs
Schritt 6: Tokenerstellung:
Ausgabe für den Master (Kontrollebene) und für Workerknoten.
Hauptknoten
Token: Ihre Kubernetes-Kontrollebene wurde erfolgreich initialisiert!
Um den Cluster zu verwenden, führen Sie diesen als regulären Benutzer aus:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternativ können Sie als root-Benutzer ausführen.
export KUBECONFIG=/etc/kubernetes/admin.conf
Sie können jetzt ein PoD-Netzwerk für den Cluster bereitstellen.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Sie können nun eine beliebige Anzahl von Control-Plane-Knoten oder Master-Knoten verbinden, die diesen Befehl auf jedem als Root ausführen.
Siehe: kubeadm join workflow
kubeadm join 10.160.0.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0 \
--control-plane --certificate-key 66773b960199ef4530461ef4014e1432066902d4a3dee01669d8622579731701
Hinweis: Bitte beachten Sie, dass der Zertifikatschlüssel Zugriff auf clustersensible Daten ermöglicht und geheim hält!
Aus Sicherheitsgründen werden hochgeladene Zertifikate in zwei Stunden gelöscht; falls nötig, können Sie sie verwenden.
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.
Dann können Sie eine beliebige Anzahl von Workerknoten zusammenführen und diese als Root ausführen.
kubeadm join 10.160.0.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0
Schritt 7. Überprüfen Sie den Core DNS-Dienst.
[root@kube-master1 vapadala]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-59697b644f-v2f22 1/1 Running 0 32m
kube-system calico-node-gdwr6 1/1 Running 0 5m54s
kube-system calico-node-zszbc 1/1 Running 11 (5m22s ago) 32m
kube-system calico-typha-6944f58589-q9jxf 1/1 Running 0 32m
kube-system coredns-565d847f94-cwgj8 1/1 Running 0 58m
kube-system coredns-565d847f94-tttpq 1/1 Running 0 58m
kube-system etcd-kube-master1 1/1 Running 0 59m
kube-system kube-apiserver-kube-master1 1/1 Running 0 59m
kube-system kube-controller-manager-kube-master1 1/1 Running 0 59m
kube-system kube-proxy-flgvq 1/1 Running 0 5m54s
kube-system kube-proxy-hf5qv 1/1 Running 0 58m
kube-system kube-scheduler-kube-master1 1/1 Running 0 59m
[root@kube-master1 vapadala]#
Schritt 8: Überprüfen Sie den Status des Master-Knotens.
[root@kube-master1 vapadala]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube-master1 Ready control-plane 11m v1.25.3
Um mehrere Master-Knoten zu verbinden, wird dieser Join-Befehl auf Master-Knoten ausgeführt.
kubeadm join 10.160.x.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0 \
--control-plane --certificate-key 66773b960199ef4530461ef4014e1432066902d4a3dee01669d8622579731701
Mögliche Fehler bei der Tokenerstellung
Fehler-CRI
[root@kube-master1 vapadala]# kubeadm init --control-plane-endpoint "10.160.x.19:6443" --upload-certs
[init] Using Kubernetes version: v1.25.3
[preflight] Running pre-flight checks
[WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR CRI]: container runtime is not running: output: time="2022-10-25T08:56:42Z" level=fatal msg="unable to determine runtime API version: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial unix /var/run/containerd/containerd.sock: connect: no such file or directory\"", error: exit status 1.
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
CRI-Fehlerbehebung
Schritt 1: Entfernen Sie die Datei config.toml, und starten Sie container neu.
rm -rf /etc/containerd/config.toml
systemctl restart containerd
kubeadm init
Schritt 2: Container installieren:
Installieren Sie das Paket containerd.io aus den offiziellen Docker-Repositorys mithilfe dieser Befehle.
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo.
yum install -y containerd.io
Schritt 3: Container konfigurieren:
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
Schritt 4: Container neu starten:
systemctl restart containerd
Error FileContent (Fehlerdateiinhalt): proc-sys-net-ipv4-ip_forward
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
Error FileContent - proc-sys-net-ipv4-ip_forward Auflösung
Legen Sie den Wert ip_forward auf 1 fest.
echo 1 > /proc/sys/net/ipv4/ip_forward
Core DNS-Dienst wird nicht ausgeführt
[root@kube-master1 vapadala]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube-master1 NotReady control-plane 11m v1.25.3
[root@kube-master1 vapadala]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-565d847f94-cwgj8 0/1 Pending 0 12m
kube-system coredns-565d847f94-tttpq 0/1 Pending 0 12m
kube-system etcd-kube-master1 1/1 Running 0 12m
kube-system kube-apiserver-kube-master1 1/1 Running 0 12m
kube-system kube-controller-manager-kube-master1 1/1 Running 0 12m
kube-system kube-proxy-hf5qv 1/1 Running 0 12m
kube-system kube-scheduler-kube-master1 1/1 Running 0 12m
[root@kube-master1 vapadala]#
Auflösung
Der Core-DNS ist ausstehend, was auf ein Netzwerkproblem hinweist. Daher muss Calico installiert werden.
Referenz: Calico
Führen Sie die folgenden beiden Befehle aus:
curl https://raw.githubusercontent.com/projectcalico/calico/v3.24.3/manifests/calico-typha.yaml -o calico.yaml
kubectl apply -f calico.yaml
Workerknoten
Auf Arbeitsknoten, wenn das Token vom Master abgerufen wird:
Schritt 1: Aktivieren Sie den Kubelet-Dienst.
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl restart kubelet
systemctl enable kubelet.service
Schritt 2: Verbinden Sie mit diesem Join-Befehl alle Arbeitsknoten mit dem Master-Knoten.
kubeadm join 10.160.x.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0
Schritt 3: Wenn Fehler in Bezug auf Dateien oder Ports auftreten, setzen Sie das kubeadm mit diesem Befehl zurück.
kubeadm reset
Geben Sie nach dem Zurücksetzen das Token vom Master-Knoten ein.
kubeadm join 10.160.x.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0
Endgültige Ausgabe
Der Cluster ist jetzt gebildet, überprüfen Sie es mit dem Befehl kubectl get-Knoten.
hochverfügbare kubernetes Cluster-Ausgabe
Hinweis: Zum Zeitpunkt der Clusterbildung wird nur die Steuerung über Master-Knoten konfiguriert. Der Bastionshost ist nicht als zentralisierter Server konfiguriert, um alle Kube's im Cluster zu überwachen.
Überarbeitung | Veröffentlichungsdatum | Kommentare |
---|---|---|
1.0 |
14-Dec-2022 |
Erstveröffentlichung |