Technologieaustausch

Offline-Bereitstellung des k8s-Clusters

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

K8s Offline-Bereitstellung

Umfeld

Fügen Sie hier eine Bildbeschreibung ein

Ziel

k8s Offline-Bereitstellung

Schritt

Docker bereitstellen

Einzelheiten finden Sie im Artikel: „Offline-Installation von Docker und Offline-Paketierung von Back-End-Projekten“
https://blog.csdn.net/qq_45371023/article/details/140279746?spm=1001.2014.3001.5501
Alle verwendeten Dateien befinden sich unter:
Link: https://pan.baidu.com/s/10cb-dXkgdShdjPEBCyvTrw?pwd=fpuy
Extraktionscode: fpuy

Installieren Sie cri_dockerd

1. Installieren Sie cri_dockerd

U/min -ivh cri-dockerd-0.3.9-3.el8.x86_64.rpm
Fügen Sie hier eine Bildbeschreibung ein

2. Laden Sie den System-Daemon neu → Stellen Sie cri-dockerd so ein, dass es automatisch startet → Starten Sie cri-dockerd

Laden Sie den System-Daemon neu

sudo systemctl daemon-reload
  • 1

Stellen Sie cri-dockerd so ein, dass es automatisch startet

sudo systemctl enable cri-docker.socket cri-docker
  • 1

Starten Sie cri-dockerd

sudo systemctl start cri-docker.socket cri-docker

sudo systemctl status cri-docker.socket

sudo systemctl status cri-docker
  • 1
  • 2
  • 3
  • 4
  • 5

Fügen Sie hier eine Bildbeschreibung ein

Problem: Cri-Docker konnte nicht gestartet werden

Fügen Sie hier eine Bildbeschreibung ein

messen:

Methode 1: systemctl restart docker # Docker neu starten

Methode 2: Deinstallieren Sie Docker, installieren Sie es erneut und führen Sie dann die oben genannten Schritte erneut aus

*Installieren Sie Kubernetes

Installieren Sie kubectl

1. Installieren Sie kubectl

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
  • 1

2. Überprüfen Sie, ob die Installation abgeschlossen ist

kubectl version --client
  • 1

Fügen Sie hier eine Bildbeschreibung ein

Installieren Sie kubeadm

3. Öffnen Sie den Port oder schließen Sie die Firewall (um einen reibungslosen Installationsprozess zu gewährleisten).

Offener Port (Cloud-Server)

Öffnen Sie Port 6443

sudo firewall-cmd --zone=public --add-port=6443/tcp --permanent
  • 1

Firewall neu laden

sudo firewall-cmd --reload
  • 1

Alle offenen Ports anzeigen

sudo firewall-cmd --zone=public --list-ports
  • 1

Oder schalten Sie die Firewall (virtuelle Maschine) aus.

Schalten Sie die Firewall aus

sudo systemctl stop firewalld
  • 1

Deaktivieren Sie den automatischen Start der Firewall

sudo systemctl disable firewalld
  • 1

4. Deaktivieren Sie SELinux (stellen Sie sicher, dass der Container auf Systemressourcen zugreifen kann)

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  • 1
  • 2

5. Installieren Sie kubeadm, kubelet und kubectl

Laden Sie das entsprechende Offline-Installationspaket im RPM-Format herunter, das unter 3_yum_package vorhanden ist. Verwenden Sie den Befehl, um alle RPM-Installationspakete im Verzeichnis zu installieren.

cd 3_yum_package && rpm -ivh *.rpm
  • 1

Fügen Sie hier eine Bildbeschreibung ein

6. Stellen Sie Kubelet so ein, dass es automatisch startet

sudo systemctl enable --now kubelet
  • 1

Fügen Sie hier eine Bildbeschreibung ein

*K8s-Cluster bereitstellen

Nachdem Sie die oben genannten Schritte ausgeführt haben, verfügen Sie über die folgende Umgebung

·Zwei Server oder virtuelle Maschinen mit unterschiedlichen IP-Adressen können miteinander kommunizieren und den LAN-Status beibehalten. Die IP-Adresse ist auf 192.168 eingestellt..34 und 192.168..35

·Die Container-Laufzeitumgebung (Docker+cri_dockerd) ist auf beiden Servern installiert und die Kubernetes-Komponenten kubectl, kubeadm und kubelet wurden installiert.

Umweltvorbereitung

7. Schließen Sie die Swap-Partition. Dies wird in vorübergehendes Herunterfahren und dauerhaftes Herunterfahren empfohlen, da es häufig ein- und ausgeschaltet wird.

Schließen Sie vorübergehend die Swap-Partition

swapoff -a
  • 1

Um die Swap-Partition dauerhaft zu schließen, kommentieren Sie die Zeile mit Swap in der fstab aus.

vi /etc/fstab
  • 1

# /dev/mapper/centos-swap swap Swap-Standardwerte 0 0

Ein Neustart kann dazu führen, dass sich der Status von cri-dockerd ändert. Ich habe mich nicht für einen Neustart entschieden. Der Grund dafür ist, dass die Version oder Konfiguration nicht ordnungsgemäß konfiguriert ist cri-dockerd und starten Sie dann cri-dockerd, damit der cri-dockerd-Status normal ist

Neustart

8. Installieren Sie runc als k8s-Betriebsumgebung

Runc installieren

sudo install -m 755 runc.amd64 /usr/local/bin/runc
  • 1

# Überprüfen Sie, ob die Installation erfolgreich war

runc -v
  • 1

Fügen Sie hier eine Bildbeschreibung ein

9. Docker und cri-dockerd richten inländische Bildbeschleunigung ein (Da die Namen der folgenden Softwarepakete, die in diesem Ordner verwendet werden sollen, Spiegeladressen haben, wird empfohlen, die entsprechende Spiegelbeschleunigung auch in einem lokalen Netzwerk zu konfigurieren, um zu verhindern, dass kubectl das Internet zum Abrufen von Softwarepaketen benötigt und den lokalen Spiegel danach ignoriert Die Installation ist abgeschlossen.

sudo tee /etc/docker/daemon.json <<-'EOF'

{

 "registry-mirrors": ["https://tsvqojsz.mirror.aliyuncs.com"]

}

EOF

# 找到第10行

vi /usr/lib/systemd/system/cri-docker.service

# 修改为ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Starten Sie die Docker-Komponenten neu

systemctl daemon-reload && systemctl restart docker cri-docker.socket cri-docker
  • 1

# Überprüfen Sie den Status der Docker-Komponente

systemctl status docker cir-docker.socket cri-docker
  • 1

10. Überprüfen Sie den Hostnamen und die Hosts

Masterknoten

Hostname ist k8s-master

vi /etc/hostname
  • 1

Domänennamenzuordnung hinzufügen

echo "192.168.**.35 k8s-slave01">> /etc/hosts
  • 1

Andere Knoten

Hostname: k8s-slave01

vi /etc/hostname
  • 1

Domänennamenzuordnung hinzufügen

echo "192.168.**.34 k8s-master" >> /etc/hosts
  • 1

11. Leiten Sie IPv4 weiter und lassen Sie iptables den Bridge-Flow sehen

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf

overlay

br_netfilter

EOF

 

sudo modprobe overlay

sudo modprobe br_netfilter
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

Legen Sie die erforderlichen Sysctl-Parameter fest, die auch nach Neustarts bestehen bleiben

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.ipv4.ip_forward          = 1

EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

#Systemparameter ohne Neustart anwenden

sudo sysctl --system

 

lsmod | grep br_netfilter

lsmod | grep overlay

 

sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

# Wenn der iptables-Fehler während der Initialisierung weiterhin angezeigt wird, führen Sie ihn bitte aus

echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables

echo "1">/proc/sys/net/ipv4/ip_forward
  • 1
  • 2
  • 3

Knoten/Master der Steuerungsebene initialisieren

12. Initialisieren Sie den Masterknoten

Vor der Initialisierung müssen Sie das für die Initialisierung erforderliche Docker-Image über kubeadm-Konfigurationsimages abrufen:

Fügen Sie hier eine Bildbeschreibung ein

Installieren Sie das Image Docker Load -i **.tar

Relevante Bilddateien sind in 5_kubeadm-images vorhanden.

Initialisierung durchführen:

kubeadm init --node-name=k8s-master list--image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.**.34 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
  • 1

–image-repository=registry.aliyuncs.com/google_containers # Ersetzen Sie die heruntergeladene Container-Image-Quelle durch Alibaba Cloud. Andernfalls kann das Image aus Netzwerkgründen nicht heruntergezogen werden und die Ausführung schlägt definitiv fehl.

–cri-socket=unix:///var/run/cri-dockerd.sock # Dies ist die angegebene Container-Laufzeit, da Containerd auch eine der Komponenten von Docker ist, die bei der Initialisierung auch Containerd herunterladen erkennt, dass mehrere Container-Laufzeitumgebungen vorhanden sind, muss eine manuell ausgewählt werden. Hier ist auch zu erkennen, dass Containerd tatsächlich viel leichter als Docker ist.

–apiserver-advertise-address=192.168.56.50 # Legen Sie die Broadcast-Adresse für den API-Server fest. Wählen Sie hier die lokale IPv4-Adresse aus. Wenn Sie nicht möchten, dass der API-SERVER auf anderen Knoten festgelegt wird, ändern Sie ihn nicht auf eine andere Adresse.

–pod-network-cidr=10.244.0.0/16 # Geben Sie den IP-Adressbereich an, der vom Pod-Netzwerk verwendet werden kann. Wenn Sie sich noch nicht sicher sind, können Sie ihn ignorieren und diesen Wert verwenden.

–service-cidr=10.96.0.0/12 # Geben Sie ein zusätzliches IP-Adresssegment für die virtuelle IP-Adresse des Dienstes an. Wenn Sie sich noch nicht sicher sind, können Sie diesen Wert trotzdem verwenden.

Problem: Cordns:v1.10.1-Prüfung existiert nicht, tatsächlich existiert cordns:v1.10.1 bereits, aber es ist cordns:1.10.1.

Fügen Sie hier eine Bildbeschreibung ein

Maßnahmen: Ändern Sie das Tag der Cordns.

docker tag registry.aliyuncs.com/google_containers/coredns:1.10.1 registry.aliyuncs.com/google_containers/coredns:v1.10.1
  • 1

Führen Sie den Initialisierungsbefehl erneut aus

Fügen Sie hier eine Bildbeschreibung ein

Notieren Sie die Informationen unter kubeadm join, die für den Node-Join erforderlich sind. Die relevanten Informationen für das obige Beispiel sind:

kubeadm join 192.168.51.34:6443 --token 1qtv3k.p8tfvdcds6x5ichf 

​    --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26
  • 1
  • 2
  • 3

Wenn Sie es vergessen, können Sie die Kubeadm-Tokenliste zur Abfrage verwenden. Das Token ist 24 Stunden lang vorhanden, erstellen Sie das Kubeadm-Token mit dem Befehl „create --print-join-command“ neu und löschen Sie es mit dem Befehl „kubeadm token delete tokenid“.

Nicht-Root-Benutzer bitte 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
  • 1
  • 2
  • 3
  • 4
  • 5

Der Root-Benutzer führt die Ausführung direkt aus

Es wird vorübergehend wirksam und wird nach dem Neustart ungültig. Es wird nicht empfohlen.

export KUBECONFIG=/etc/kubernetes/admin.conf 
  • 1

Es wird dauerhaft wirksam. Es ist nicht erforderlich, diesen Befehl erneut auszuführen, nachdem kubeadm reset und init erneut ausgeführt wurden.

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile 
  • 1

Nachdem Sie den dauerhaft wirksamen Befehl ausgeführt haben, müssen Sie ihn beschaffen, damit er wirksam wird.

source ~/.bash_profile
  • 1

Überprüfen Sie, ob die Konfiguration wirksam ist

echo $KUBECONFIG 

/etc/kubernetes/admin.conf
  • 1
  • 2
  • 3

13. Installieren und konfigurieren Sie Netzwerk-Plug-ins

Flannel wird hier verwendet, um die Datei kube-flannel.yml herunterzuladen und auf den Server hochzuladen.

Laden Sie das entsprechende Image zur Installation auf den Server hoch. kube-flannel.yml und Bilddateien sind in 6_kube-flannel vorhanden.

Netzwerkkarte abfragen

ifconfig

Fügen Sie hier eine Bildbeschreibung ein

kube-flannel.yml sucht standardmäßig nach der Netzwerkkarte enp1s0. In diesem Beispiel ist die Netzwerkkarte 34 enp1s0 und muss nicht geändert werden.

//Ändern Sie kube-flannel.yml von 35 und fügen Sie –iface=enp0s3 hinzu, um es anzugeben (enp0s3 ist hier die Netzwerkkarte, die der IP entspricht, wie der Teil im Feld oben). Die Parameterpositionen sind wie folgt:

container:

  ......

  command:

  - /opt/bin/flanneld

  arg:

  - --ip-masq

  - --kube-subnet-mgr

  - --iface=enp4s0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Konfigurieren des Flannel-Netzwerk-Plugins für Kubernetes

kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
  • 1

Fügen Sie hier eine Bildbeschreibung ein

cat /run/flannel/subnet.env
  • 1

# Wenn es keine solche Datei oder keinen solchen Ordner gibt, müssen Sie sie manuell erstellen. Der Inhalt ist derselbe wie unten.

FLANNEL_NETWORK=10.244.0.0/16

FLANNEL_SUBNET=10.244.0.1/24

FLANNEL_MTU=1450

FLANNEL_IPMASQ=true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Der Knotenknoten tritt dem Master bei

14. Der Knotenknoten tritt dem Master bei

14.1. Kopieren Sie /etc/kubernetes/admin.conf von der Master-Knotenmaschine auf die Slave-Knotenmaschine

scp /etc/kubernetes/admin.conf 192.168.56.51:/etc/kubernetes/
  • 1

# Vergessen Sie nicht, admin.conf zur Umgebungsvariablen hinzuzufügen. Verwenden Sie es direkt hier, damit es dauerhaft wirksam wird.

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

source ~/.bash_profile
  • 1
  • 2
  • 3

Wenn beim Kopieren ein Problem auftritt:

Der ECDSA-Hostschlüssel für 192.168.55.187 wurde geändert und Sie haben eine strenge Überprüfung angefordert. Die Überprüfung des Hostschlüssels ist fehlgeschlagen.

Führen Sie zur Reparatur die folgenden Anweisungen aus

ssh-keygen -R 192.168.55.187
  • 1

14.2. Führen Sie den Join-Befehl aus (nachdem der Masterknoten erfolgreich initialisiert wurde, wird der Join-Befehl gegeben)

Zum Beispiel:

kubeadm beitreten 192.168.51.34:6443 --token by7t4x.da3f98dzrvjylykz --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --cri-socket unix:///var/run/cri-dockerd.sock

Fügen Sie hier eine Bildbeschreibung ein

14.3. Führen Sie kubectl get nodes aus

Fügen Sie hier eine Bildbeschreibung ein

Der k8s-Cluster wurde erfolgreich bereitgestellt! ! !

Frage

Frage eins

kubectl get nodes

Fügen Sie hier eine Bildbeschreibung ein

Maßnahmen: Prüfen, ob Swap geschlossen ist; prüfen, ob die Firewall Port 6443 öffnet

Schließen Sie den Tausch

Fügen Sie hier eine Bildbeschreibung ein

Schalten Sie die Firewall vorübergehend aus

Fügen Sie hier eine Bildbeschreibung ein

Erfolg

Fügen Sie hier eine Bildbeschreibung ein

Frage 2

kubectl get nodes

Überprüfen Sie nach dem Hinzufügen eines k8s-Knotens zum Cluster, ob der Knotenstatus „NotReady“ lautet.

Fügen Sie hier eine Bildbeschreibung ein

messen:

systemctl restart kubelet.service

systemctl restart docker.service
  • 1
  • 2
  • 3

Starten Sie Kubelet und Docker neu

Fügen Sie hier eine Bildbeschreibung ein

Frage drei

kubeadm beitreten 192.168.51.34:6443 --token l2qlvh.and3fnjmzecueu9h --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --cri-socket unix:///var/run/cri-dockerd.sock

Beim Hinzufügen von untergeordneten Knoten zu einem k8s-Cluster kommt es zu einer Initialisierungszeitüberschreitung.

Fügen Sie hier eine Bildbeschreibung ein
messen:

kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
  • 1

Fügen Sie hier eine Bildbeschreibung ein

Erfolg

Fügen Sie hier eine Bildbeschreibung ein

Fügen Sie hier eine Bildbeschreibung ein

Frage 4

Kopieren Sie /etc/kubernetes/admin.conf von der Master-Knotenmaschine auf die Slave-Knotenmaschine

scp /etc/kubernetes/admin.conf 192.168.55.187:/etc/kubernetes/

Wenn das Kopieren der Datei fehlschlägt, lautet die Fehlermeldung wie folgt:

Der ECDSA-Hostschlüssel für 192.168.55.187 hat sich geändert und Sie haben eine strenge Überprüfung angefordert.

Die Überprüfung des Hostschlüssels ist fehlgeschlagen.

Führen Sie zur Reparatur die folgenden Anweisungen aus

ssh-keygen -R 192.168.55.187
  • 1

Schnell löschen

kubectl delete node k8s-slave01
kubectl delete node k8s-slave02
kubectl delete node k8s-master
  • 1
  • 2
  • 3

Slave-Knoten

rm -rf /etc/kubernetes/*
kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
  • 1
  • 2

Masterknoten

rm -rf /etc/kubernetes/*
rm -rf ~/.kube/*
rm -rf /var/lib/etcd/*
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
  • 1
  • 2
  • 3
  • 4

Initialisieren Sie ggf. den k8s-Cluster neu.

kubeadm init --node-name=k8s-master --image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.51.34 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
  • 1

Masterknoten

kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
kubectl get pod -A
  • 1
  • 2

Masterknoten

scp /etc/kubernetes/admin.conf 192.168.51.35:/etc/kubernetes/
scp /etc/kubernetes/admin.conf 192.168.51.36:/etc/kubernetes/
  • 1
  • 2

Slave-Knoten

kubeadm join 192.168.51.34:6443 --token 1k9kdy.dvn2qbtd7rjar1ly 
       --discovery-token-ca-cert-hash sha256:ff90d8ed41ae1902a839194f179a1c3ba8374a5197ea3111e10e5ca1c09fa442 --cri-socket unix:///var/run/cri-dockerd.sock
  • 1
  • 2
kubectl get pod -A
kubectl get nodes
  • 1
  • 2