Table des matières

Introduction

Conditions préalables

Exigences

Composants utilisés

Diagramme du réseau

Composants du noeud maître Kubernetes

Composants du noeud Travailleur Kubernetes

Architecture Multi-Master Kubernetes

Mise à disposition de machines virtuelles sur GCP

Présentation générale

Configurations de bas niveau

Configuration du réseau

Serveur Bastion

Erreurs possibles

Résolution

Installer Docker sur les noeuds maître et de travail

Installer Kubernetes sur les noeuds maîtres et travailleurs

Noeud maître

Erreurs possibles rencontrées lors de la génération du jeton

Erreur CRI

Résolution CRI d'erreur

Erreur FileContent—proc-sys-net-ipv4-ip_forward

Erreur FileContent—proc-sys-net-ipv4-ip_forward Resolution

Le service DNS principal ne fonctionne pas

Résolution

Noeud Travailleur

Sortie finale

Introduction

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).

Conditions préalables

Exigences

Cisco vous recommande de prendre connaissance des rubriques suivantes :

- Linux

- Dockers et Kubernetes

- Plateforme cloud Google

Composants utilisés

Les informations contenues dans ce document sont basées sur :

- OS - Machine virtuelle Centos 7

- Famille de machines (e2-standard-16) :

- vCPU - 16 vCPU

- RAM : 64 Go

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.

Diagramme du réseau

Hôte bastion, Kube-Master, Kube-node

Composants du noeud maître Kubernetes

Kube-apiserver :

i. Fournit une API qui sert d'extrémité avant d'un plan de contrôle Kubernetes.

ii. Il gère les demandes externes et internes qui déterminent si une demande est valide, puis la traite.

iii. L'API est accessible via l'interface de ligne de kubectl 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 en fonction de workflows automatisés et de 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 vers l'état souhaité par l'opérateur du cluster.

etc. :

i. Base de données de valeurs de clé qui contient des données sur l'état et la configuration de votre cluster.

ii. Etcd est tolérant aux pannes et distribué.

Composants du noeud Travailleur Kubernetes

Kubelet :

i. Chaque noeud contient un kubelet, qui est une petite application qui peut communiquer avec le plan de contrôle Kubernetes.

ii. La kubelet s'assure que les conteneurs spécifiés dans la configuration pod sont exécutés 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 à l'intérieur et à l'exté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.

Architecture Multi-Master Kubernetes

Grappe :

- 8 - Nombre total de noeuds

- 3 - Noeuds maîtres

- 4 - Noeuds de travail

- 1 - Bastion Server (équilibreur de charge)

Cluster Kubernetes hautement disponible avec trois plans de contrôle

Remarque : Configurez VPC sur GCP avant de provisionner les machines virtuelles. Référencez VPC sur GCP.

Mise à disposition de machines virtuelles sur GCP

Sur la fourniture de GCP un Centos7 du marché de GCP.

Marché Centos sur GCP

Cliquez sur Launch.

Machine virtuelle Centos 7

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.

Configuration du moteur de calcul Centos7

La configuration de la machine est la série E2 à usage général et le type de machine e2-standard-16 (16 vCPU, 64 GB memory).

Configuration des ressources Centos 7

Sélectionnez Allow default access et pour le pare-feu, Allow HTTP traffic et Allow HTTPS traffic.

Configuration réseau de Centos 7

Cliquez sur Create.

De même, créez 8 noeuds comme indiqué ici.

Déploiement multi-maître sur la plate-forme cloud de Google

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

Présentation générale

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 dans le 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. Initialisez le nouveau cluster Kubernetes (kubeadm init).

2. Installez Calico le 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 la kubectl get nodescommande.

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.

Configurations de bas niveau

Configuration du réseau

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érification des mises à jour

sudo yum check-update

Étape 2 : installation des mises à jour si elles ne sont pas à jour

yum update -y

Étape 3. Installation des utilitaires yum

yum -y install yum-utils

Étape 4 : installation du 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 en état d'échec après que vous ayez apporté des modifications à la 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érification des mises à jour

sudo yum check-update

Étape 2. Installer les mises à jour si elles ne sont pas à jour

yum update -y

Étape 3. Installation des utilitaires yum

yum -y install yum-utils

Étape 4. Installation de Docker

curl -fsSL https://get.docker.com/ | sh

Étape 5 : activation du docker

systemctl enable --now docker

Étape 6. Démarrez le service Docker.

sudo systemctl start docker

Étape 7. Vérifier 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 : ajout du 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. Installation de Kubernetes.

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

Étape 4. Activer Kubelet.

sudo systemctl enable --now kubelet

Étape 5. Configuration de 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.

Reportez-vous à : kubeadm join workflow

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érification du 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érification de 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. Installation du 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. Configuration du conteneur :

sudo mkdir -p /etc/containerd

containerd config default | sudo tee /etc/containerd/config.toml

Étape 4. Redémarrez 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 : activation du service kubelet

sudo systemctl daemon-reload

sudo systemctl restart docker

sudo systemctl restart kubelet

systemctl enable kubelet.service

Étape 2 : jointure de tous les noeuds de travail avec le noeud maître à l’aide de la commande join

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.

sortie de cluster kubernetes haute disponibilité

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.