2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
K8s Offline-Bereitstellung
k8s Offline-Bereitstellung
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
1. Installieren Sie cri_dockerd
U/min -ivh cri-dockerd-0.3.9-3.el8.x86_64.rpm
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
Stellen Sie cri-dockerd so ein, dass es automatisch startet
sudo systemctl enable cri-docker.socket cri-docker
Starten Sie cri-dockerd
sudo systemctl start cri-docker.socket cri-docker
sudo systemctl status cri-docker.socket
sudo systemctl status cri-docker
Problem: Cri-Docker konnte nicht gestartet werden
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
1. Installieren Sie kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
2. Überprüfen Sie, ob die Installation abgeschlossen ist
kubectl version --client
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
Firewall neu laden
sudo firewall-cmd --reload
Alle offenen Ports anzeigen
sudo firewall-cmd --zone=public --list-ports
Oder schalten Sie die Firewall (virtuelle Maschine) aus.
Schalten Sie die Firewall aus
sudo systemctl stop firewalld
Deaktivieren Sie den automatischen Start der Firewall
sudo systemctl disable firewalld
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
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
6. Stellen Sie Kubelet so ein, dass es automatisch startet
sudo systemctl enable --now kubelet
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.
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
Um die Swap-Partition dauerhaft zu schließen, kommentieren Sie die Zeile mit Swap in der fstab aus.
vi /etc/fstab
# /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
# Überprüfen Sie, ob die Installation erfolgreich war
runc -v
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
Starten Sie die Docker-Komponenten neu
systemctl daemon-reload && systemctl restart docker cri-docker.socket cri-docker
# Überprüfen Sie den Status der Docker-Komponente
systemctl status docker cir-docker.socket cri-docker
10. Überprüfen Sie den Hostnamen und die Hosts
Masterknoten
Hostname ist k8s-master
vi /etc/hostname
Domänennamenzuordnung hinzufügen
echo "192.168.**.35 k8s-slave01">> /etc/hosts
Andere Knoten
Hostname: k8s-slave01
vi /etc/hostname
Domänennamenzuordnung hinzufügen
echo "192.168.**.34 k8s-master" >> /etc/hosts
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
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
#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
# 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
12. Initialisieren Sie den Masterknoten
Vor der Initialisierung müssen Sie das für die Initialisierung erforderliche Docker-Image über kubeadm-Konfigurationsimages abrufen:
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
–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.
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
Führen Sie den Initialisierungsbefehl erneut aus
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
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
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
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
Nachdem Sie den dauerhaft wirksamen Befehl ausgeführt haben, müssen Sie ihn beschaffen, damit er wirksam wird.
source ~/.bash_profile
Überprüfen Sie, ob die Konfiguration wirksam ist
echo $KUBECONFIG
/etc/kubernetes/admin.conf
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
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
Konfigurieren des Flannel-Netzwerk-Plugins für Kubernetes
kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
cat /run/flannel/subnet.env
# 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
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/
# 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
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
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
14.3. Führen Sie kubectl get nodes aus
Der k8s-Cluster wurde erfolgreich bereitgestellt! ! !
kubectl get nodes
Maßnahmen: Prüfen, ob Swap geschlossen ist; prüfen, ob die Firewall Port 6443 öffnet
Schließen Sie den Tausch
Schalten Sie die Firewall vorübergehend aus
Erfolg
kubectl get nodes
Überprüfen Sie nach dem Hinzufügen eines k8s-Knotens zum Cluster, ob der Knotenstatus „NotReady“ lautet.
messen:
systemctl restart kubelet.service
systemctl restart docker.service
Starten Sie Kubelet und Docker neu
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.
messen:
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
Erfolg
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
kubectl delete node k8s-slave01
kubectl delete node k8s-slave02
kubectl delete node k8s-master
Slave-Knoten
rm -rf /etc/kubernetes/*
kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
Masterknoten
rm -rf /etc/kubernetes/*
rm -rf ~/.kube/*
rm -rf /var/lib/etcd/*
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
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
Masterknoten
kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
kubectl get pod -A
Masterknoten
scp /etc/kubernetes/admin.conf 192.168.51.35:/etc/kubernetes/
scp /etc/kubernetes/admin.conf 192.168.51.36:/etc/kubernetes/
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
kubectl get pod -A
kubectl get nodes