Cet article est partagé par la communauté Huawei Cloud « OpenEuler déploie le cluster de version Kubernetes 1.29.4 » par Jiang Wanzhengchouyu.
1. Préparation du nœud de cluster Kubernetes
1.1 Description du système d'exploitation hôte
Numéro de série du système d'exploitation et remarques sur la version
1 CentOS7u9 ou OpenEuler2203
1.2 Description de la configuration matérielle de l'hôte
Exigences Mémoire CPU rôle de disque dur Nom d'hôte
valeur 8C 8G 1024 Go maître k8s-master01
valeur 8C 16G 1024 Go travailleur (nœud) k8s-worker01
valeur 8C 16G 1024 Go travailleur (nœud) k8s-worker02
1.3 Configuration de l'hôte
1.3.1 Configuration du nom d'hôte
Étant donné que trois hôtes sont utilisés cette fois pour terminer le déploiement du cluster Kubernetes, l'un d'eux est le nœud maître, nommé k8s-master01 ; deux d'entre eux sont des nœuds de travail, nommés : k8s-worker01 et k8s-worker02.
# nœud maître hostnamectl set-hostname k8s-master01 #worker01node hostnamectl set-hostname k8s-worker01 #worker02node hostnamectl set-hostname k8s-worker02
1.3.2 Adresse IP, résolution de nom et confiance mutuelle
La configuration #IP ne sera pas expliquée ici. #Ce qui suit est la configuration de la résolution de nom [root@k8s-master01 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.0.11 k8s-master01 192.168.0.12 k8s-worker01 192.168.0.13 k8s-worker02 #Configuration de la confiance mutuelle de l'hôte [root@k8s-master01 ~]# ssh-keygen Génération d'une paire de clés rsa publique/privée. Entrez le fichier dans lequel enregistrer la clé (/root/.ssh/id_rsa) : Saisissez la phrase secrète (vide s'il n'y a pas de phrase secrète) : Saisissez à nouveau la même phrase secrète : Votre identification a été enregistrée dans /root/.ssh/id_rsa Votre clé publique a été enregistrée dans /root/.ssh/id_rsa.pub L’empreinte digitale de la clé est : SHA256:Rr6W4rdnY350fzMeszeWFR/jUJt0VOZ3yZECp5VJJQA root@k8s-master01 L'image randomart de la clé est : +---[RSA 3072]----+ | E.o+=++*| | ++o*+| | . . +oB| | O. *o| | S o =| | . O. ..o| | . + . . +o| | . o. = . *B| | ...*.ou oui*| +----[SHA256]-----+ [root@k8s-master01 ~]# pour i dans {11..13} ; faire ssh-copy-id 192.168.0.${i} ; terminé /usr/bin/ssh-copy-id : INFO : Source de la ou des clés à installer : "/root/.ssh/id_rsa.pub" L'authenticité de l'hôte « 192.168.0.11 (192.168.0.11) » ne peut pas être établie. L'empreinte digitale de la clé ED25519 est SHA256:s2R582xDIla4wyNozHa/HEmRR7LOU4WAciEcAw57U/Q. Cette clé n'est connue sous aucun autre nom Êtes-vous sûr de vouloir continuer à vous connecter (oui/non/[empreinte digitale]) ? Oui /usr/bin/ssh-copy-id : INFO : tentative de connexion avec la ou les nouvelles clés, pour filtrer celles déjà installées /usr/bin/ssh-copy-id : INFO : 1 clé(s) restent à installer -- si vous êtes invité maintenant, c'est pour installer les nouvelles clés Utilisateurs autorisés uniquement. Toutes les activités peuvent être surveillées et signalées. Mot de passe de [email protected] : Nombre de clé(s) ajoutée(s) : 1
1.3.4 Configuration du pare-feu
Tous les hôtes nécessitent une opération.
Désactiver le pare-feu existant
# systemctl désactive le pare-feu # systemctl arrête le pare-feu
ou
systemctl désactiver --now firewalld
Afficher l'état du pare-feu
# pare-feu-cmd --state ne pas courrir
Commande d'exécution de référence :
[root@k8s-master01 ~]# pour i dans {11..13} ; faire ssh 192.168.0.${i} 'systemctl désactiver --now firewalld' ; terminé Utilisateurs autorisés uniquement. Toutes les activités peuvent être surveillées et signalées. Utilisateurs autorisés uniquement. Toutes les activités peuvent être surveillées et signalées. Utilisateurs autorisés uniquement. Toutes les activités peuvent être surveillées et signalées. [root@k8s-master01 ~]# pour i dans {11..13} ; faites ssh 192.168.0.${i} 'firewall-cmd --state' ; terminé Utilisateurs autorisés uniquement. Toutes les activités peuvent être surveillées et signalées. ne pas courrir Utilisateurs autorisés uniquement. Toutes les activités peuvent être surveillées et signalées. ne pas courrir Utilisateurs autorisés uniquement. Toutes les activités peuvent être surveillées et signalées. ne pas courrir
1.3.5 Configuration SELINUX
Tous les hôtes nécessitent une opération. La modification de la configuration SELinux nécessite le redémarrage du système d'exploitation.
# sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# statut
Commande d'exécution de référence :
[root@k8s-master01 ~]# pour i dans {11..13};do ssh 192.168.0.${i} 'sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/ config' ; terminé Utilisateurs autorisés uniquement. Toutes les activités peuvent être surveillées et signalées. Utilisateurs autorisés uniquement. Toutes les activités peuvent être surveillées et signalées. Utilisateurs autorisés uniquement. Toutes les activités peuvent être surveillées et signalées. [root@k8s-master01 ~]# pour i dans {11..13} ; faire ssh 192.168.0.${i} 'sestatus' ; terminé Utilisateurs autorisés uniquement. Toutes les activités peuvent être surveillées et signalées. Statut SELinux : désactivé Utilisateurs autorisés uniquement. Toutes les activités peuvent être surveillées et signalées. Statut SELinux : désactivé Utilisateurs autorisés uniquement. Toutes les activités peuvent être surveillées et signalées. Statut SELinux : désactivé
1.3.6 Configuration de la synchronisation horaire
Tous les hôtes nécessitent une opération. Le système d'installation minimale nécessite l'installation du logiciel ntpdate.
# crontab -l 0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com pour i dans {11..13};do ssh 192.168.0.${i} ' echo '0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com' >> /etc/crontab' ; fait #Définir le fuseau horaire de Shanghai, Huitième District Est timedatectl définir le fuseau horaire Asie/Shanghai pour moi dans {11..13} ; faites ssh 192.168.0.${i} ' timedatectl set-timezone Asia/Shanghai' ;done
1.3.7 Mettre à niveau le noyau du système d'exploitation
Le système centos doit mettre à niveau le contenu. Plus précisément, Baidu et OpenEuler2203 n'ont pas besoin d'être mis à niveau.
1.3.8 Configurer le transfert de routage du noyau et le filtrage de pont
Tous les hôtes nécessitent une opération.
Ajouter des fichiers de configuration de filtrage de pont et de transfert du noyau
sed -i 's/net.ipv4.ip_forward=0/net.ipv4.ip_forward=1/g' /etc/sysctl.conf # cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0 EOF #Configurer et charger le module br_netfilter chat <<EOF | sudo tee /etc/modules-load.d/k8s.conf recouvrir br_netfilter EOF #Charger le module de superposition br_netfilter modprobe br_netfilter superposition de sonde mod #Vérifiez s'il est chargé # lsmod | grep br_netfilter br_netfilter 22256 0 pont 151336 1 br_netfilter # Rendre efficace sysctl --système # Utilisez le fichier de configuration par défaut pour prendre effet sysctl -p # Utilisez le fichier de configuration nouvellement ajouté pour prendre effet sysctl -p /etc/sysctl.d/k8s.conf
1.3.9 Installer ipset et ipvsadm
Tous les hôtes nécessitent une opération.
Installer ipset et ipvsadm # miam -y installer ipset ipvsadm Configurer la méthode de chargement du module ipvsadm Ajouter des modules qui doivent être chargés # cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack EOF Autoriser, exécuter, vérifier si chargé chmod 755 /etc/sysconfig/modules/ipvs.module && /etc/sysconfig/modules/ipvs.module Vérifiez si le module correspondant est chargé avec succès # lsmod | grep -e ip_vs -e nf_conntrack_ipv4
1.3.10 Fermer la partition SWAP
Une fois la modification terminée, le système d'exploitation doit être redémarré. S'il ne redémarre pas, il peut être temporairement arrêté. La commande est swapoff -a.
Fermez définitivement la partition d'échange et devez redémarrer le système d'exploitation
# chat /etc/fstab ...... # /dev/mapper/centos-swap swap valeurs par défaut 0 0 Ajoutez # au début de la ligne précédente
2. Installation de l'environnement de conteneur conteneurd
2.1 Installer le package d'environnement containersd
Tous les hôtes nécessitent une opération.
#Fichiers compressés pour moi dans {11..13} ; faites ssh 192.168.0.${i} ' wget https://blog-source-mkt.oss-cn-chengdu.aliyuncs.com/resources/k8s/kubeadm%20init/ k8s1.29.tar.gz'; fait # Décompressez Containerd et installez-le pour i dans {11..13} ; faites ssh 192.168.0.${i} ' tar -zxvf /root/k8s1.29.tar.gz' ; fait pour je dans {11..13};do ssh 192.168.0.${i} ' tar -zxvf /root/workdir/containerd-1.7.11-linux-amd64.tar.gz && mv /root/bin/* /usr/local/bin/ && rm -rf /root/bin'; fait # Créez un service, tous les hôtes doivent fonctionner chat << EOF > /usr/lib/systemd/system/containerd.service [Unité] Description=environnement d'exécution du conteneur conteneurd Documentation=https://containerd.io Après = réseau.target local-fs.target [Service] ExecStartPre=-/sbin/modprobe superposition ExecStart=/usr/local/bin/containerd Tapez=notifier Délégué = oui KillMode = processus Redémarrer = toujours RedémarrerSec=5 # Avoir des limites non nulles entraîne des problèmes de performances en raison de la surcharge comptable # dans le noyau. Nous vous recommandons d'utiliser des groupes de contrôle pour effectuer une comptabilité locale du conteneur. LimitNPROC=infini LimitCORE=infini # Commentez TasksMax si votre version systemd ne le prend pas en charge. # Seul Systemd 226 et supérieur prend en charge cette version. TasksMax = infini OOMScoreAdjust=-999 [Installer] WantedBy=multi-user.target EOF # Démarrer le service de conteneur pour i dans {11..13} ;do ssh 192.168.0.${i} 'systemctl daemon-reload && systemctl activate --now containersd '; fait # Installer runc pour moi dans {11..13};do ssh 192.168.0.${i} 'install -m 755 /root/workdir/runc.amd64 /usr/local/sbin/runc '; fait #Installer le plug-in cni pour moi dans {11..13};do ssh 192.168.0.${i} 'mkdir -p /opt/cni/bin && tar -xzvf /root/workdir/cni-plugins-linux-amd64-v1.4.0 .tgz -C /opt/cni/bin/ '; fait # Générer le fichier de configuration du conteneur et le modifier pour i dans {11..13} ;do ssh 192.168.0.${i} 'mkdir -p /etc/containerd && containersd config default | sudo tee /etc/containerd/config.toml '; fait # Modifier l'image du sandbox, tous les hôtes doivent fonctionner sed -i 's#sandbox_image = "registry.k8s.io/pause:.*"#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"#' /etc/containerd/config.toml #Redémarrer le conteneur systemctl redémarrer le conteneur
2.2 Installer k8s sur l'hôte maître
# Configurez la source k8s v2.19, tous les nœuds doivent être installés chat <<EOF | tee /etc/yum.repos.d/kubernetes.repo [Kubernetes] nom=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/ activé=1 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/repodata/repomd.xml.key EOF #Installez les outils k8s, tous les nœuds doivent être installés miam tout nettoyer && miam makecache miam install -y kubelet kubeadm kubectl --disableexcludes=kubernetes # Configurer kubelet Afin d'assurer la cohérence entre le cgroupdriver utilisé par docker et le cgroup utilisé par kubelet, il est recommandé de modifier le contenu du fichier suivant. Tous les nœuds doivent être installés # vim /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--cgroup-driver=systemd" Ou la commande suivante echo 'KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"' > /etc/sysconfig/kubelet systemctl activer kubelet #Remarque, ne démarrez pas kubelet, kubeadm démarrera automatiquement s'il est démarré, l'installation signalera une erreur. # Installez la commande k8s et exécutez-la sur le nœud maître. Il n'y a que l'image de la version 1.29.4 ici. kubeadm init --apiserver-advertise-address=192.168.0.11 --image-repository Registry.aliyuncs.com/google_containers --kubernetes-version v1.29.4 --service-cidr=10.96.0.0/12 --pod-network- cidr=10.224.0.0/16 #Enfin, exécutez la commande suivante mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config exporter KUBECONFIG=/etc/kubernetes/admin.conf
2.3 Installer le plug-in réseau Calico
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml #Enfin, vérifiez l'état des nœuds et des branches de pods kubectl récupère les nœuds kubectl récupère les pods -A
Cliquez pour suivre et découvrir les nouvelles technologies de Huawei Cloud dès que possible~
Linus a pris sur lui d'empêcher les développeurs du noyau de remplacer les tabulations par des espaces. Son père est l'un des rares dirigeants capables d'écrire du code, son deuxième fils est directeur du département de technologie open source et son plus jeune fils est un noyau open source. contributeur. Robin Li : Le langage naturel deviendra un nouveau langage de programmation universel. Le modèle open source prendra de plus en plus de retard sur Huawei : il faudra 1 an pour migrer complètement 5 000 applications mobiles couramment utilisées vers Java, qui est le langage le plus enclin . vulnérabilités tierces. L'éditeur de texte riche Quill 2.0 a été publié avec des fonctionnalités, une fiabilité et des développeurs. L'expérience a été grandement améliorée. Bien que l'ouverture soit terminée, Meta Llama 3 a été officiellement publié. la source de Laoxiangji n'est pas le code, les raisons derrière cela sont très réconfortantes. Google a annoncé une restructuration à grande échelle.