Dans le cadre de la documentation associée à ce produit, nous nous efforçons d’utiliser un langage exempt de préjugés. Dans cet ensemble de documents, le langage exempt de discrimination renvoie à une langue qui exclut la discrimination en fonction de l’âge, des handicaps, du genre, de l’appartenance raciale de l’identité ethnique, de l’orientation sexuelle, de la situation socio-économique et de l’intersectionnalité. Des exceptions peuvent s’appliquer dans les documents si le langage est codé en dur dans les interfaces utilisateurs du produit logiciel, si le langage utilisé est basé sur la documentation RFP ou si le langage utilisé provient d’un produit tiers référencé. Découvrez comment Cisco utilise le langage inclusif.
Cisco a traduit ce document en traduction automatisée vérifiée par une personne dans le cadre d’un service mondial permettant à nos utilisateurs d’obtenir le contenu d’assistance dans leur propre langue. Il convient cependant de noter que même la meilleure traduction automatisée ne sera pas aussi précise que celle fournie par un traducteur professionnel.
Ce document décrit la mise en oeuvre du cluster Kubernetes avec 3 noeuds maîtres et 4 noeuds travailleurs avec un hôte bastion qui agit comme un équilibreur de charge sur Google Cloud Platform (GCP).
Cisco vous recommande de prendre connaissance des rubriques suivantes :
Les informations contenues dans ce document sont basées sur :
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. Si votre réseau est en ligne, assurez-vous de bien comprendre l’incidence possible des commandes.
Kube-apiserver :
i. Fournit une API qui sert d'extrémité avant d'un plan de contrôle Kubernetes.
ii. Il traite les demandes externes et internes qui déterminent si une demande est valide, puis il la traite.
iii. L'API est accessible via le kubectl
interface de ligne de commande ou d'autres outils tels que kubeadm
, et via des appels REST.
Kube-scheduler :
i. Ce composant planifie des pods sur des noeuds spécifiques selon des workflows automatisés et des conditions définies par l'utilisateur.
Kube-controller-manager :
i. Le gestionnaire de contrôleur Kubernetes est une boucle de contrôle qui surveille et régule l'état d'un cluster Kubernetes.
ii. Il reçoit des informations sur l’état actuel du cluster et des objets qu’il contient et envoie des instructions pour faire passer le cluster à l’état souhaité par l’opérateur du cluster.
etc. :
i. Base de données de valeurs de clé contenant des données sur l'état et la configuration de votre cluster.
ii. Etcd est tolérant aux pannes et distribué.
Kubelet :
i. Chaque noeud contient un kubelet
, qui est une petite application capable de communiquer avec le plan de contrôle Kubernetes.
ii. La kubelet
garantit que les conteneurs spécifiés dans la configuration pod s'exécutent sur un noeud spécifique et gèrent leur cycle de vie.
iii. Il exécute les actions commandées par votre plan de contrôle.
Kube-proxy :
i. Tous les noeuds de calcul contiennent kube-proxy
, un proxy réseau qui facilite les services réseau Kubernetes.
ii. Il gère toutes les communications réseau en dehors et à l’intérieur du cluster, et transfère le trafic ou les réponses sur la couche de filtrage des paquets du système d’exploitation.
Pods :
i. Un pod sert d'instance d'application unique et est considéré comme la plus petite unité dans le modèle objet de Kubernetes.
Hôte Bastion :
i. L'ordinateur héberge généralement une application ou un processus unique, par exemple un serveur proxy ou un équilibreur de charge, et tous les autres services sont supprimés ou limités pour réduire la menace pesant sur l'ordinateur.
Grappe :
Remarque : configurez VPC sur GCP avant de provisionner les machines virtuelles. Référencez VPC sur GCP.
Sur la fourniture de GCP un Centos7 du marché de GCP.
Cliquer Launch
.
Sélectionnez la région en fonction de l'accessibilité la plus proche. Au cours de ces travaux pratiques, la région est configurée en tant que Mumbai.
La configuration de la machine est de type machine et série E2 à usage général e2-standard-16 (16 vCPU, 64 GB memory)
.
Sélectionner Allow default access
et pour le pare-feu, Allow HTTP traffic
et Allow HTTPS traffic
.
Cliquer Create
.
De même, créez 8 noeuds comme indiqué ici.
Adresses IP privées :
Sur GCP, les adresses IP privées et publiques sont automatiquement attribuées.
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
Sur tous les noeuds (maître, travailleur, bastion) :
1. Ouvrez les ports de pare-feu requis sur le serveur Linux et configurez les configurations de sécurité.
Sur les noeuds maîtres dans les déploiements à plusieurs maîtres :
Kubernetes etcd server client API: 2379/tcp, 2380/tcp
Kubernetes API server: 6443/tcp
Remarque : assurez-vous également que les ports du pare-feu GCP sont autorisés.
2. Configurez les paramètres réseau requis (DNS local, noms d’hôtes, NTP).
Serveur Bastion :
1. Configurez un proxy HA.
2. Ajoutez la configuration du serveur frontal et du serveur principal sur haproxy.conf
fichier.
3. Redémarrez le haproxy
service.
Étapes courantes pour les noeuds maîtres et travailleurs :
1. Installez et configurez le docker.
2. Installer et configurer Kubernetes.
Uniquement sur les noeuds maîtres :
1. Initialiser le nouveau cluster Kubernetes (kubeadm init
.
2. Installation Calico
plug-in réseau (utilisé spécifiquement pour le service DNS principal sur les noeuds maîtres).
3. Utilisez cette commande pour joindre les noeuds maîtres à un noeud maître.
kubeadm join
:6443 --token
\ --discovery-token-ca-cert-hash
\ --control-plane --certificate-key
4. Validez les informations de cluster avec kubectl get nodes
erasecat4000_flash:.
Uniquement sur les noeuds de travail :
1. Utilisez cette commande pour joindre le noeud de travail au noeud maître.
kubeadm join
:6443 --token
\ --discovery-token-ca-cert-hash
2. Une fois la jointure réussie, validez les informations de cluster sur les noeuds maîtres à l'aide de cette commande kubectl get nodes
.
1. Modifiez le mot de passe racine s'il est inconnu à l'aide de cette commande :
passwd
2. Modifiez les noms d'hôte si nécessaire avec cette commande.
hostnamectl set-hostname
3. Configurez le DNS local.
cat > /etc/hosts <
4. Activez la chronie pour les services NTP avec cette commande.
systemctl enable --now chronyd
2. Vérifiez l'état à l'aide de cette commande.
systemctl status chronyd
3. Vérifiez les sources NTP avec cette commande.
chronyc sources -v
Serveur Bastion
Étape 1. Vérifiez les mises à jour.
sudo yum check-update
Étape 2. Installez les mises à jour si elles ne sont pas à jour.
yum update -y
Étape 3. Installez les utilitaires yum.
yum -y install yum-utils
Étape 4. Installez le package haproxy.
yum install haproxy -y
Étape 5. Ajoutez cette configuration sous les valeurs par défaut dans /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 /
Étape 6. Vérifiez le fichier de configuration pour qu'il ressemble à cette commande 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 /
Étape 7. Vérifiez l'état de 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]#
Erreurs possibles
1. Le service HAProxy est dans un état d'échec après que vous ayez apporté des modifications de configuration dans haproxy.cfg
. Exemple ;
[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.
Résolution
1. Set the boolean value for haproxy_connect_any to true.
2. Restart the haproxy service.
3. Verify the status.
Exécution :
[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]#
Installer Docker sur les noeuds maître et de travail
Étape 1. Vérifiez les mises à jour.
sudo yum check-update
Étape 2. Installez les mises à jour si elles ne sont pas à jour.
yum update -y
Étape 3. Installez les utilitaires yum.
yum -y install yum-utils
Étape 4. Installez Docker.
curl -fsSL https://get.docker.com/ | sh
Étape 5. Activez le docker.
systemctl enable --now docker
Étape 6. Démarrez le service Docker.
sudo systemctl start docker
Étape 7. Vérifiez l'état du docker.
sudo systemctl status docker
Sortie :
[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]#
Installer Kubernetes sur les noeuds maîtres et travailleurs
Étape 1. Ajouter un référentiel Kubernetes.
cat <
"gpgcheck = 0" will not verify the authenticity of the package if unsigned. Production environment it is recommended to set "gpgcheck = 1"
Étape 2. désactiver SELinux
.
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
Étape 3. Install Kubernetes
.
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
Étape 4. Activer Kubelet
.
sudo systemctl enable --now kubelet
Étape 5. Configurer Pod Network
.
kubeadm init --control-plane-endpoint "10.160.x.19:6443" --upload-certs
Étape 6. Génération de jeton :
Sortie pour le maître (plan de contrôle) et pour les noeuds travailleurs.
Noeud maître
Jeton : Votre plan de contrôle Kubernetes a été initialisé avec succès !
Afin d'utiliser votre cluster, exécutez ceci en tant qu'utilisateur régulier :
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Si vous êtes l'utilisateur root, vous pouvez également exécuter.
export KUBECONFIG=/etc/kubernetes/admin.conf
Vous pouvez désormais déployer un réseau pod sur le cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Vous pouvez désormais joindre n'importe quel nombre de noeuds du plan de contrôle ou de noeuds maîtres qui exécutent cette commande sur chacun en tant que racine.
Voir : workflow de jointure kubeadm
kubeadm join 10.160.0.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0 \
--control-plane --certificate-key 66773b960199ef4530461ef4014e1432066902d4a3dee01669d8622579731701
Remarque : notez que la clé de certificat donne accès aux données sensibles du cluster. Gardez-la secrète !
Par mesure de sauvegarde, les certificats téléchargés sont supprimés en deux heures ; si nécessaire, vous pouvez les utiliser.
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.
Ensuite, vous pouvez joindre un nombre quelconque de noeuds de travail et exécuter ceci sur chacun en tant que racine.
kubeadm join 10.160.0.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0
Étape 7. Vérifiez le service DNS principal.
[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]#
Étape 8. Vérifiez l'état du noeud maître.
[root@kube-master1 vapadala]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube-master1 Ready control-plane 11m v1.25.3
Pour joindre plusieurs noeuds maîtres, cette commande de jointure est exécutée sur les noeuds maîtres.
kubeadm join 10.160.x.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0 \
--control-plane --certificate-key 66773b960199ef4530461ef4014e1432066902d4a3dee01669d8622579731701
Erreurs possibles rencontrées lors de la génération du jeton
Erreur 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
Résolution CRI d'erreur
Étape 1. Supprimez le fichier config.toml et redémarrez containerd.
rm -rf /etc/containerd/config.toml
systemctl restart containerd
kubeadm init
Étape 2. Installer le conteneur :
Installez le package containerd.io à partir des référentiels Docker officiels à l'aide de ces commandes.
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo.
yum install -y containerd.io
Étape 3. Configurez containerd :
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
Étape 4. Redémarrer le conteneur :
systemctl restart containerd
Erreur FileContent—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
Erreur FileContent—proc-sys-net-ipv4-ip_forward Resolution
Définissez la valeur ip_forward sur 1.
echo 1 > /proc/sys/net/ipv4/ip_forward
Le service DNS principal ne fonctionne pas
[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]#
Résolution
Le DNS principal est en attente, ce qui indique un problème de mise en réseau. Par conséquent, Calico doit être installé.
Référence : Calico
Exécutez ces deux commandes :
curl https://raw.githubusercontent.com/projectcalico/calico/v3.24.3/manifests/calico-typha.yaml -o calico.yaml
kubectl apply -f calico.yaml
Noeud Travailleur
Sur le noeud de travail lorsque le jeton est obtenu à partir du maître :
Étape 1. Activez le service kubelet.
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl restart kubelet
systemctl enable kubelet.service
Étape 2. Joignez tous les noeuds de travail avec le noeud maître à l'aide de cette commande de jointure.
kubeadm join 10.160.x.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0
Étape 3. Si des erreurs liées aux fichiers ou aux ports sont rencontrées, réinitialisez le kubeadm avec cette commande.
kubeadm reset
Après avoir réinitialisé, entrez le jeton à partir du noeud maître.
kubeadm join 10.160.x.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0
Sortie finale
Le cluster est maintenant formé, vérifiez-le avec la commande kubectl get nodes.
Remarque : au moment de la formation du cluster, seul le contrôle à partir des noeuds maîtres est configuré. L'hôte bastion n'est pas configuré comme serveur centralisé pour surveiller tous les Kube dans le cluster.
Révision | Date de publication | Commentaires |
---|---|---|
1.0 |
14-Dec-2022 |
Première publication |