2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Déploiement hors ligne du K8
déploiement hors ligne k8s
Pour plus de détails, consultez l'article : "Installation hors ligne de Docker et packaging hors ligne de projets back-end"
https://blog.csdn.net/qq_45371023/article/details/140279746?spm=1001.2014.3001.5501
Tous les fichiers utilisés se trouvent à l'adresse :
Lien : https://pan.baidu.com/s/10cb-dXkgdShdjPEBCyvTrw?pwd=fpuy
Code d'extraction : fpuy
1. Installez cri_dockerd
rpm -ivh cri-dockerd-0.3.9-3.el8.x86_64.rpm
2. Rechargez le démon système → Configurez cri-dockerd pour qu'il démarre automatiquement → Démarrez cri-dockerd
Recharger le démon système
sudo systemctl daemon-reload
Configurer cri-dockerd pour qu'il démarre automatiquement
sudo systemctl enable cri-docker.socket cri-docker
Commencer cri-dockerd
sudo systemctl start cri-docker.socket cri-docker
sudo systemctl status cri-docker.socket
sudo systemctl status cri-docker
Problème : échec du démarrage de cri-docker
mesure:
Méthode 1 : systemctl restart docker # Redémarrer le docker
Méthode 2 : désinstallez Docker et réinstallez-le, puis effectuez à nouveau les étapes ci-dessus
1. Installez Kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
2. Vérifiez si l'installation est terminée
kubectl version --client
3. Ouvrez le port ou fermez le pare-feu (pour garantir un processus d'installation fluide)
Port ouvert (serveur cloud)
Port ouvert 6443
sudo firewall-cmd --zone=public --add-port=6443/tcp --permanent
Recharger le pare-feu
sudo firewall-cmd --reload
Afficher tous les ports ouverts
sudo firewall-cmd --zone=public --list-ports
Ou désactivez le pare-feu (machine virtuelle)
Désactivez le pare-feu
sudo systemctl stop firewalld
Désactiver le démarrage automatique du pare-feu
sudo systemctl disable firewalld
4. Désactivez SELinux (assurez-vous que le conteneur peut accéder aux ressources système)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
5. Installez Kubeadm, Kubelet et Kubectl
Téléchargez le package d'installation hors ligne approprié au format RPM, qui existe sous 3_yum_package. Utilisez la commande pour installer tous les packages d'installation RPM dans le répertoire.
cd 3_yum_package && rpm -ivh *.rpm
6. Configurez Kubelet pour qu'il démarre automatiquement
sudo systemctl enable --now kubelet
Après avoir terminé les étapes ci-dessus, vous aurez l'environnement suivant
·Deux serveurs ou machines virtuelles avec des adresses IP différentes peuvent communiquer entre eux et conserver l'état du réseau local. L'adresse IP est définie sur 192.168..34 et 192.168..35
·Le runtime du conteneur (Docker+cri_dockerd) est installé sur les deux serveurs et les composants Kubernetes kubectl, kubeadm et kubelet ont été installés.
7. Fermez la partition d'échange. Elle est divisée en arrêt temporaire et arrêt permanent. L'arrêt permanent est recommandé pour les environnements de machines virtuelles car il sera activé et désactivé fréquemment. Au contraire, l'arrêt temporaire est recommandé pour les environnements cloud.
Fermez temporairement la partition de swap
swapoff -a
Pour fermer définitivement la partition swap, commentez la ligne contenant swap dans fstab.
vi /etc/fstab
# /dev/mapper/centos-swap swap swap valeurs par défaut 0 0
Redémarrez pour que cela prenne effet. Le redémarrage peut entraîner une modification de l'état de cri-dockerd. Dans le déploiement réel, je n'ai pas choisi de redémarrer. La raison est probablement que la version ou la configuration n'est pas configurée correctement. cri-dockerd puis démarrez cri-dockerd pour que le statut cri-dockerd soit normal
redémarrer
8. Installez runc comme environnement d'exploitation k8s
Installer runc
sudo install -m 755 runc.amd64 /usr/local/bin/runc
# Vérifiez si l'installation est réussie
runc -v
9. Docker et cri-dockerd ont mis en place une accélération d'image nationale (Étant donné que les noms des packages logiciels suivants à utiliser dans ce dossier ont des adresses miroir, il est recommandé de configurer l'accélération miroir correspondante même sur un réseau local pour empêcher kubectl de demander à Internet d'extraire les packages logiciels et d'ignorer le miroir local après le l'installation est terminée.)
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
Redémarrer les composants Docker
systemctl daemon-reload && systemctl restart docker cri-docker.socket cri-docker
# Vérifier l'état du composant Docker
systemctl status docker cir-docker.socket cri-docker
10. Vérifiez le nom d'hôte et les hôtes
nœud maître
le nom d'hôte est k8s-master
vi /etc/hostname
Ajouter un mappage de nom de domaine
echo "192.168.**.35 k8s-slave01">> /etc/hosts
Autres nœuds
nom d'hôte为k8s-slave01
vi /etc/hostname
Ajouter un mappage de nom de domaine
echo "192.168.**.34 k8s-master" >> /etc/hosts
11. Transférez IPv4 et laissez iptables voir le flux du pont
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
Définissez les paramètres sysctl requis, qui persistent lors des redémarrages
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
#Appliquer les paramètres sysctl sans redémarrer
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
# Si l'erreur iptables apparaît toujours lors de l'initialisation, veuillez exécuter
echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables
echo "1">/proc/sys/net/ipv4/ip_forward
12. Initialisez le nœud maître
Avant l'initialisation, vous devez obtenir l'image Docker requise pour l'initialisation via les images de configuration kubeadm :
Installez le docker d'images load -i **.tar
Les fichiers image pertinents existent dans 5_kubeadm-images.
Effectuer l'initialisation :
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 # Remplacez la source de l'image du conteneur téléchargé par Alibaba Cloud. Sinon, l'image ne pourra pas être extraite pour des raisons de réseau et l'exécution échouera définitivement.
–cri-socket=unix:///var/run/cri-dockerd.sock # Il s'agit du runtime de conteneur spécifié, car containersd est également l'un des composants de Docker en cours de téléchargement. Docker téléchargera également containersd lors de l'initialisation de Kubernetes. détecte qu'il existe plusieurs environnements d'exécution de conteneur, il doit en sélectionner un manuellement. On peut également voir ici que containersd est en réalité beaucoup plus léger que Docker.
–apiserver-advertise-address=192.168.56.50 # Définissez l'adresse de diffusion du serveur API. Sélectionnez ici l'adresse IPv4 locale. Si vous ne souhaitez pas que le SERVEUR API soit défini sur d'autres nœuds, ne la remplacez pas par une autre adresse.
–pod-network-cidr=10.244.0.0/16 # Spécifiez la plage d'adresses IP qui peut être utilisée par le réseau de pods. Si vous n'êtes pas encore sûr, vous pouvez l'ignorer et utiliser cette valeur.
–service-cidr=10.96.0.0/12 # Spécifiez un segment d'adresse IP supplémentaire pour l'adresse IP virtuelle du service. Si vous n'êtes pas encore sûr, vous pouvez simplement utiliser cette valeur quand même.
Problème : la vérification cordns:v1.10.1 n'existe pas, en fait cordns:v1.10.1 existe déjà, mais c'est cordns:1.10.1.
Mesures : Modifier le tag des cordns.
docker tag registry.aliyuncs.com/google_containers/coredns:1.10.1 registry.aliyuncs.com/google_containers/coredns:v1.10.1
Réexécutez la commande d'initialisation
Enregistrez les informations ci-dessous kubeadm join, qui sont requises pour la jointure de nœud. Les informations pertinentes pour l'exemple ci-dessus sont :
kubeadm join 192.168.51.34:6443 --token 1qtv3k.p8tfvdcds6x5ichf
--discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26
Si vous oubliez, vous pouvez utiliser la liste de jetons kubeadm pour interroger. Le jeton existe pendant 24 heures, recréer kubeadm token create --print-join-command et le supprimer à l'aide de kubeadm token delete tokenid.
Utilisateurs non root, veuillez exécuter
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
L'utilisateur root exécute directement
Il prend effet temporairement et deviendra invalide après le redémarrage. Ce n'est pas recommandé.
export KUBECONFIG=/etc/kubernetes/admin.conf
Elle prend effet de manière permanente. Il n'est pas nécessaire d'exécuter à nouveau cette commande après avoir exécuté à nouveau kubeadm reset et init.
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
Après avoir exécuté la commande efficace permanente, vous devez la rechercher pour la rendre efficace.
source ~/.bash_profile
Vérifiez si la configuration est efficace
echo $KUBECONFIG
/etc/kubernetes/admin.conf
13. Installer et configurer les plug-ins réseau
Ici, la flanelle est utilisée pour télécharger et télécharger le fichier kube-flannel.yml sur le serveur.
Téléchargez l'image appropriée sur le serveur pour l'installation. kube-flannel.yml et les fichiers image existent dans 6_kube-flannel.
Interroger la carte réseau
siconfig
kube-flannel.yml recherchera la carte réseau enp1s0 par défaut. Dans cet exemple, la carte réseau 34 est enp1s0 et n'a pas besoin d'être modifiée. La carte réseau 35 est enp4s0.
//Modifiez kube-flannel.yml de 35 et ajoutez –iface=enp0s3 pour préciser (enp0s3 voici la carte réseau correspondant à l'ip, comme la partie dans la case ci-dessus). Les emplacements des paramètres sont les suivants :
container:
......
command:
- /opt/bin/flanneld
arg:
- --ip-masq
- --kube-subnet-mgr
- --iface=enp4s0
Configuration du plugin réseau Flanel pour Kubernetes
kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
cat /run/flannel/subnet.env
# S'il n'existe pas de fichier ou de dossier de ce type, vous devez le créer manuellement. Le contenu est le même que ci-dessous.
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
14. Le nœud nœud rejoint le maître
14.1. Copiez /etc/kubernetes/admin.conf de la machine du nœud maître vers la machine du nœud esclave.
scp /etc/kubernetes/admin.conf 192.168.56.51:/etc/kubernetes/
# N'oubliez pas d'ajouter admin.conf à la variable d'environnement. Utilisez-le directement ici pour prendre effet de manière permanente.
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
S'il y a un problème lors de la copie :
La clé d'hôte ECDSA pour 192.168.55.187 a changé et vous avez demandé une vérification stricte. La vérification de la clé d'hôte a échoué.
Exécutez les instructions suivantes pour réparer
ssh-keygen -R 192.168.55.187
14.2. Exécutez la commande join (une fois le nœud maître initialisé avec succès, la commande join sera donnée)
Par exemple:
kubeadm join 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. Exécutez kubectl pour obtenir des nœuds
Le cluster k8s a été déployé avec succès ! ! !
kubectl obtient des nœuds
Mesures : Vérifiez si le swap est fermé ; vérifiez si le pare-feu ouvre le port 6443.
Fermer l'échange
Désactivez temporairement le pare-feu
succès
kubectl obtient des nœuds
Après avoir ajouté un nœud k8s au cluster, vérifiez que l'état du nœud est NotReady
mesure:
systemctl restart kubelet.service
systemctl restart docker.service
Redémarrez Kubelet et Docker
kubeadm join 192.168.51.34:6443 --token l2qlvh.and3fnjmzecueu9h --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --cri-socket unix:///var/run/cri-dockerd.sock
Un délai d'initialisation se produit lors de l'ajout de nœuds enfants à un cluster k8s.
mesure:
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
succès
Copiez /etc/kubernetes/admin.conf de la machine du nœud maître vers la machine du nœud esclave
scp /etc/kubernetes/admin.conf 192.168.55.187:/etc/kubernetes/
Si la copie du fichier échoue, le message d'erreur est le suivant :
La clé d'hôte ECDSA pour 192.168.55.187 a changé et vous avez demandé une vérification stricte.
La vérification de la clé de l'hôte a échoué.
Exécutez les instructions suivantes pour réparer
ssh-keygen -R 192.168.55.187
kubectl delete node k8s-slave01
kubectl delete node k8s-slave02
kubectl delete node k8s-master
nœud esclave
rm -rf /etc/kubernetes/*
kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
nœud maître
rm -rf /etc/kubernetes/*
rm -rf ~/.kube/*
rm -rf /var/lib/etcd/*
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
Si nécessaire, réinitialisez le cluster k8s.
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
nœud maître
kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
kubectl get pod -A
nœud maître
scp /etc/kubernetes/admin.conf 192.168.51.35:/etc/kubernetes/
scp /etc/kubernetes/admin.conf 192.168.51.36:/etc/kubernetes/
nœud esclave
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