Découvrez comment installer Kubernetes sur Ubuntu.

Kubernetes est un outil d’orchestration de conteneurs open-source développé par Google. Dans cet article, vous apprendrez à configurer Kubernetes avec un nœud maître et un nœud travailleur. Assurez-vous que Docker est installé sur le nœud maître et le nœud travailleur.

Détails de l’environnement et configuration

Pour la démonstration, j’ai 2 systèmes Ubuntu, l’un sera le nœud maître et l’autre le nœud travailleur. La configuration des deux serveurs est la suivante.

  • 2 CPUs
  • Maître – 4 GB RAM / Travailleur – 2 GB RAM
  • disque dur de 10 Go

Utilisez la commande hostnamectl pour définir le nom d’hôte sur les deux systèmes.

Sur le nœud maître :

geekflare@geekflare:~$ sudo hostnamectl set-hostname kubernetes-master

Sur le nœud de travail :

geekflare@geekflare:~$ sudo hostnamectl set-hostname kubernetes-worker

Voici donc les détails des deux nœuds.

Nœud maître

  • Nom d’hôte : kubernetes-master
  • Adresse IP : 192.168.0.107

Nœud de travail

  • Nom d’hôte : kubernetes-worker
  • Adresse IP : 192.168.0.108

Modifiez le fichier hosts sur les deux systèmes.

geekflare@geekflare:~$ sudo gedit /etc/hosts

192.168.0.107 kubernetes-master
192.168.0.109 kubernetes-worker

Avant de commencer l’installation de Kubernetes, exécutez la commande ci-dessous sur les nœuds maître et travailleur pour vérifier que Docker est opérationnel.

geekflare@geekflare:~$ sudo service docker status
<x><x>[sudo]</x></x> mot de passe pour geekflare :
● docker.service - Moteur de conteneur d'application Docker
Loaded : chargé (/lib/systemd/system/docker.service ; activé ; vendor preset : activé)
Active : active (running) since Sat 2019-11-23 15:39:36 EST ; 3 weeks 0 days ago
Docs : https://docs.docker.com
PID principal : 8840 (dockerd)
Tâches : 17
Mémoire : 42.3M
CGroup : /system.slice/docker.service
└─8840 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Nov 23 15:39:35 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:35.091941184-05:00" level=warning msg="Votre noyau ne supporte pas le cgrou
Nov 23 15:39:35 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:35.093149218-05:00" level=info msg="Chargement des conteneurs : start."
Nov 23 15:39:35 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:35.957842188-05:00" level=info msg="Le pont par défaut (docker0) est affecté
Nov 23 15:39:36 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:36.078753190-05:00" level=info msg="Loading containers : done."
Nov 23 15:39:36 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:36.664727326-05:00" level=info msg="Docker daemon" commit=481bc77 graphdr
Nov 23 15:39:36 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:36.817929464-05:00" level=error msg="cluster exited with error : error whi
Nov 23 15:39:36 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:36.820439024-05:00" level=error msg="Le composant swarm n'a pas pu être démarré"
Nov 23 15:39:36 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:36.820821712-05:00" level=info msg="Daemon has completed initialization"
Nov 23 15:39:36 geekflare systemd[1]: Démarré Docker Application Container Engine.
Nov 23 15:39:36 geekflare dockerd<x><x><x><x><x><x><x><x>[8840]</x></x></x></x></x></x></x></x>: time="2019-11-23T15:39:36.883382952-05:00" level=info msg="API listen on /home/geekflare/docker.sock
lignes 1-20/20 (FIN)

Installez Kubernetes

Exécutez toutes les commandes mentionnées dans cette section sur les nœuds maître et travailleur.

Tout d’abord, ajoutez la clé du dépôt de paquets Kubernetes.

geekflare@kubernetes-master:~$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
mot de passe<x><x>[sudo]</x></x> pour geekflare :
OK

Exécutez la commande ci-dessous pour configurer le dépôt de paquets Kubernetes.

geekflare@kubernetes-master:~$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
Hit:1 https://download.docker.com/linux/ubuntu bionic InRelease
Hit:2 http://ppa.launchpad.net/ansible/ansible/ubuntu cosmic InRelease
Get:3 http://apt.puppetlabs.com bionic InRelease [85.3 kB]
Hit:5 http://security.ubuntu.com/ubuntu cosmic-security InRelease
Hit:6 http://us.archive.ubuntu.com/ubuntu cosmic InRelease
Hit:7 http://pkg.jenkins.io/debian-stable binary/ InRelease
Hit:8 http://us.archive.ubuntu.com/ubuntu cosmic-updates InRelease
Hit:9 http://pkg.jenkins.io/debian-stable binary/ Release
Hit:10 http://us.archive.ubuntu.com/ubuntu cosmic-backports InRelease
Get:4 https://packages.cloud.google.com/apt kubernetes-xenial InRelease [8,993 B]
Get:11 http://apt.puppetlabs.com bionic/puppet6 amd64 Packages [36.1 kB]
Get:13 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 Packages [32.2 kB]
Récupéré 163 kB en 3s (49.1 kB/s)
Lecture des listes de paquets... Terminé

Avant de continuer, désactivez le swap sur les deux noeuds.

geekflare@kubernetes-master:~$ sudo swapoff -a

Installez Kubeadm

Vous devez maintenant installer kubeadm.

kubeadm est un outil de Kubernetes qui est utilisé pour ajouter des nœuds dans le cluster Kubernetes.

geekflare@kubernetes-master:~$ sudo apt-get install kubeadm -y
Lecture des listes de paquets... Terminé
Construction de l'arbre des dépendances
Lecture des informations d'état... Terminé
Les paquets supplémentaires suivants seront installés :
conntrack cri-tools ebtables ethtool kubectl kubelet kubernetes-cni socat
Les NOUVEAUX paquets suivants seront installés :
conntrack cri-tools ebtables ethtool kubeadm kubectl kubelet kubernetes-cni socat
0 mis à jour, 9 nouvellement installés, 0 à supprimer et 235 non mis à jour.
Besoin de récupérer 51,8 Mo d'archives.
Après cette opération, 273 Mo d'espace disque supplémentaire seront utilisés.
Get:3 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 conntrack amd64 1:1.4.5-1 [30.2 kB]
Get:1 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 cri-tools amd64 1.13.0-00 [8,776 kB]
Get:6 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 ebtables amd64 2.0.10.4-3.5ubuntu5 [79.8 kB]
Get:8 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 ethtool amd64 1:4.16-1 [115 kB]
Get:9 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 socat amd64 1.7.3.2-2ubuntu2 [342 kB]
Get:2 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubernetes-cni amd64 0.7.5-00 [6,473 kB]
Get:4 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubelet amd64 1.17.0-00 [19.2 MB]
Get:5 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubectl amd64 1.17.0-00 [8,742 kB]
Get:7 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubeadm amd64 1.17.0-00 [8,059 kB]
Récupéré 51,8 Mo en 8s (6 419 kB/s)
Sélection du paquet conntrack précédemment non sélectionné.
(Lecture de la base de données ... 318151 fichiers et répertoires actuellement installés)
Préparation du déballage de .../0-conntrack_1:1.4.5-1_amd64.deb ...
Déballage de conntrack (1:1.4.5-1) ...
Sélection du paquet cri-tools précédemment non sélectionné.
Préparation du déballage de .../1-cri-tools_1.13.0-00_amd64.deb ...
Décompression de cri-tools (1.13.0-00) ...
Sélection du paquet ebtables précédemment non sélectionné.
Préparation du déballage de .../2-ebtables_2.0.10.4-3.5ubuntu5_amd64.deb ...
Décompression de ebtables (2.0.10.4-3.5ubuntu5) ...
Sélection du paquet ethtool précédemment non sélectionné.
Préparation du déballage de .../3-ethtool_1:4.16-1_amd64.deb ...
Décompression de ethtool (1:4.16-1) ...
Sélection du paquet non sélectionné précédemment kubernetes-cni.
Préparation du déballage de .../4-kubernetes-cni_0.7.5-00_amd64.deb ...
Décompression de kubernetes-cni (0.7.5-00) ...
Sélection du paquet socat précédemment non sélectionné.
Préparation du déballage de .../5-socat_1.7.3.2-2ubuntu2_amd64.deb ...
Décompression de socat (1.7.3.2-2ubuntu2) ...
Sélection du paquet kubelet non sélectionné précédemment.
Préparation du déballage de .../6-kubelet_1.17.0-00_amd64.deb ...
Décompression de kubelet (1.17.0-00) ...
Sélection du paquet non sélectionné précédemment kubectl.
Préparation du déballage de .../7-kubectl_1.17.0-00_amd64.deb ...
Décompression de kubectl (1.17.0-00) ...
Sélection du paquet non sélectionné précédemment kubeadm.
Préparation du déballage de .../8-kubeadm_1.17.0-00_amd64.deb ...
Décompression de kubeadm (1.17.0-00) ...
Installation de conntrack (1:1.4.5-1) ...
Installation de kubernetes-cni (0.7.5-00) ...
Installation de cri-tools (1.13.0-00) ...
Installation de socat (1.7.3.2-2ubuntu2) ...
Traitement des déclencheurs pour systemd (239-7ubuntu10.12) ...
Installation de ebtables (2.0.10.4-3.5ubuntu5) ...
Création du lien symbolique /etc/systemd/system/multi-user.target.wants/ebtables.service → /lib/systemd/system/ebtables.service.
update-rc.d : warning : start and stop actions are no longer supported ; falling back to defaults
Mise en place de kubectl (1.17.0-00) ...
Traitement des déclencheurs pour man-db (2.8.4-2) ...
Mise en place de ethtool (1:4.16-1) ...
Installation de kubelet (1.17.0-00) ...
Création du lien symbolique /etc/systemd/system/multi-user.target.wants/kubelet.service → /lib/systemd/system/kubelet.service.
Mise en place de kubeadm (1.17.0-00) ...
Traitement des déclencheurs pour systemd (239-7ubuntu10.12) ...

Vérifiez la version de kubeadm pour vous assurer qu’il a été installé correctement.

geekflare@kubernetes-master:~$ kubeadm version
kubeadm version : &version.Info{Major : "1", Minor : "17", GitVersion : "v1.17.0", GitCommit : "70132b0f130acc0bed193d9ba59dd186f0e634cf", GitTreeState : "clean", BuildDate : "2019-12-07T21:17:50Z", GoVersion : "go1.13.4", Compiler : "gc", Platform : "linux/amd64"}

Initialiser le cluster Kubernetes

Maintenant, exécutez la commande init pour initialiser le cluster Kubernetes uniquement sur le nœud maître. Utilisez --apiserver-adver-adtise-address pour indiquer au nœud travailleur l’adresse IP du maître.

geekflare@kubernetes-master:~$ sudo kubeadm init --apiserver-adtisever-address=192.168.0.107 --pod-network-cidr=10.244.0.0/16
W1217 11:05:15.474854 10193 validation.go:28] Impossible de valider la configuration de kube-proxy - aucun validateur n'est disponible
W1217 11:05:15.474935 10193 validation.go:28] Impossible de valider la configuration du kubelet - aucun validateur n'est disponible
[init] Utilisation de la version de Kubernetes : v1.17.0
<x><x><x><x><x><x><x>[preflight]</x></x></x></x></x></x></x> Exécution des vérifications avant le vol
[WARNING IsDockerSystemdCheck] : a détecté "cgroupfs" comme pilote de cgroupe Docker. Le pilote recommandé est "systemd". Veuillez suivre le guide à l'adresse https://kubernetes.io/docs/setup/cri/
<x><x><x><x><x><x><x>[preflight]</x></x></x></x></x></x></x> Extraction des images nécessaires à la mise en place d'un cluster Kubernetes
[Cela peut prendre une minute ou deux, en fonction de la vitesse de votre connexion Internet<x><x><x><x><x><x><x></x></x></x></x></x></x></x> 
[<x><x><x><x><x><x><x>Preflight</x></x></x></x></x></x></x> ] Vous pouvez également effectuer cette action à l'avance en utilisant 'kubeadm config images pull'
[kubelet-start] Écriture du fichier d'environnement kubelet avec les drapeaux dans le fichier "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Écriture de la configuration du kubelet dans le fichier "/var/lib/kubelet/config.yaml"
[kubelet-start] Démarrage du kubelet
[certs<x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> Utilisation du dossier certificateDir "/etc/kubernetes/pki"
<x><x><x><x><x><x><x><x><x><x><x><x><x><x>[</x></x></x></x></x></x></x></x></x></x></x></x></x></x> certs] Génération du certificat et de la clé "ca
[certs<x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> Génération du certificat et de la clé "apiserver
[certs<x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> apiserver serving cert est signé pour les noms DNS [kubernetes-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] et les IP [10.96.0.1 192.168.0.107]
[certs<x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> Génération du certificat et de la clé "apiserver-kubelet-client"
[certs<x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> Génération du certificat et de la clé "front-proxy-ca
[certs<x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> Génération du certificat et de la clé "front-proxy-client
[certs<x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> Génération du certificat et de la clé "etcd/ca
[certs<x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> Génération du certificat et de la clé "etcd/server
[certs<x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> etcd/server serving cert est signé pour les noms DNS [kubernetes-master localhost] et les IP [192.168.0.107 127.0.0.1 ::1]
<x><x><x><x><x><x><x><x><x><x><x><x><x><x>[</x></x></x></x></x></x></x></x></x></x></x></x></x></x> certs] Génération du certificat et de la clé "etcd/peer"
[certs<x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> etcd/peer serving cert est signé pour les noms DNS [kubernetes-master localhost] et les IP [192.168.0.107 127.0.0.1 ::1]
[certs<x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> Génération du certificat et de la clé "etcd/healthcheck-client"
[certs<x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x> Génération du certificat et de la clé "apiserver-etcd-client
[<x><x><x><x><x><x><x><x><x><x><x><x><x><x>certs</x></x></x></x></x></x></x></x></x></x></x></x></x></x> ] Génération de la clé "sa" et de la clé publique
[<x><x><x><x>kubeconfig]</x></x></x></x> Utilisation du dossier "/etc/kubernetes" de kubeconfig
[<x><x><x><x>kubeconfig</x></x></x></x> ] Écriture du fichier kubeconfig "admin.conf" [kubeconfig] Écriture du fichier kubeconfig "admin.conf
[<x><x><x><x>kubeconfig]</x></x></x></x> Écriture du fichier kubeconfig "kubelet.conf" [kubeconfig] Écriture du fichier kubeconfig "admin.conf
[<x><x><x><x>kubeconfig]</x></x></x></x> Écriture du fichier kubeconfig "controller-manager.conf" [kubeconfig] Écriture du fichier kubeconfig "kubelet.conf
[<x><x><x><x>kubeconfig]</x></x></x></x> Écriture du fichier kubeconfig "scheduler.conf
[control-plane] Utilisation du dossier manifest "/etc/kubernetes/manifests"
[control-plane] Création d'un manifeste Pod statique pour "kube-apiserver"
[control-plane] Création d'un manifeste Pod statique pour "kube-controller-manager"
W1217 11:05:25.584769 10193 manifests.go:214] le mode d'autorisation par défaut de kube-apiserver est "Node,RBAC" ; utiliser "Node,RBAC"
[control-plane] Création d'un manifeste Pod statique pour "kube-scheduler"
W1217 11:05:25.587128 10193 manifests.go:214] le mode d'autorisation par défaut de kube-apiserver est "Node,RBAC" ; utilisation de "Node,RBAC"
[etcd] Création d'un manifeste Pod statique pour etcd local dans "/etc/kubernetes/manifests"
[wait-control-plane] Attendre que le kubelet démarre le plan de contrôle en tant que Pods statiques à partir du répertoire "/etc/kubernetes/manifests". Cela peut prendre jusqu'à 40 minutes
[apiclient] Tous les composants du plan de contrôle sont sains après 35,010368 secondes
[upload-config] Stockage de la configuration utilisée dans le ConfigMap "kubeadm-config" dans l'espace de nom "kube-system"
[kubelet] Création d'un ConfigMap "kubelet-config-1.17" dans l'espace de noms "kube-system" avec la configuration pour les kubelets dans le cluster
[upload-certs] Sauter la phase. Veuillez consulter --upload-certs
[mark-control-plane] Marquer le noeud kubernetes-master comme control-plane en ajoutant le label "node-role.kubernetes.io/master=''"
[mark-control-plane] Marquer le noeud kubernetes-master comme control-plane en ajoutant les taints [node-role.kubernetes.io/master:NoSchedule]
[bootstrap-token] Utilisation du jeton : dmamk9.0nmo62mhom8961qw
[bootstrap-token] Configuration des jetons bootstrap, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] Configuration des règles RBAC pour permettre aux jetons Node Bootstrap de poster des CSR afin que les nœuds obtiennent des certificats à long terme
[bootstrap-token] configuration des règles RBAC pour permettre au contrôleur csrapprover d'approuver automatiquement les CSR à partir d'un jeton d'amorçage de nœud
[bootstrap-token] configuration des règles RBAC pour autoriser la rotation des certificats pour tous les certificats clients des nœuds dans le cluster
[bootstrap-token] Création du ConfigMap "cluster-info" dans l'espace de noms "kube-public
[kubelet-finalize] Mise à jour de "/etc/kubernetes/kubelet.conf" pour pointer vers un certificat et une clé client kubelet rotatifs
<x>[addons]</x> Application de l'addon essentiel : CoreDNS
[addons<x>]</x> Application de l'addon essentiel : kube-proxy

Votre plan de contrôle Kubernetes a été initialisé avec succès !

Pour commencer à utiliser votre cluster, vous devez exécuter ce qui suit en tant qu’utilisateur normal :

mkdir -p $HOME/.kube 
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Ensuite, vous devez déployer un réseau de pods sur le cluster.

Exécutez kubectl apply -f [podnetwork].yaml avec l’une des options listées sur https://kubernetes.io/docs/concepts/cluster-administration/addons/

Ensuite, vous pouvez joindre n’importe quel nombre de nœuds de travail en exécutant ce qui suit sur chacun d’entre eux en tant que root :

kubeadm join 192.168.0.107:6443 --token dmamk9.0nmo62mhom8961qw --discovery-token-ca-cert-hash sha256:2de92f42e84d20d8b19b1778785df5f8196e5eedaa5664ad911e8c23f58963

Comme indiqué dans la sortie ci-dessus, créez un répertoire .kube et copiez le fichier admin.conf dans le fichier de configuration du répertoire .kube.

geekflare@kubernetes-master:~$ mkdir -p $HOME/.kube
geekflare@kubernetes-master:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
geekflare@kubernetes-master:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

À ce moment, lorsque vous exécutez la commande kubectl get nodes, vous verrez que le statut du nœud maître est NotReady.

geekflare@kubernetes-master:~$ sudo kubectl get nodes
NOM STATUT RÔLES ÂGE VERSION
kubernetes-master NotReady master 2m34s v1.17.0

Déployer un réseau de pods – Flannel

Ensuite, vous devez déployer un réseau de pods sur le nœud maître. J’utilise le réseau de pods Flannel. Il est utilisé pour communiquer entre les nœuds du cluster Kubernetes.

geekflare@kubernetes-master:~$ sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged créé
clusterrole.rbac.authorization.k8s.io/flannel créé
clusterrolebinding.rbac.authorization.k8s.io/flannel créé
serviceaccount/flannel créé
configmap/kube-flannel-cfg créé
daemonset.apps/kube-flannel-ds-amd64 créé
daemonset.apps/kube-flannel-ds-arm64 créé
daemonset.apps/kube-flannel-ds-arm créé
daemonset.apps/kube-flannel-ds-ppc64le créé
daemonset.apps/kube-flannel-ds-s390x créé

Vérifiez l’état du nœud maître, il doit être dans l’état Ready.

geekflare@kubernetes-master:~$ sudo kubectl get nodes
NOM STATUT RÔLES ÂGE VERSION
kubernetes-master Ready master 4m41s v1.17.0

Après quelques secondes, vérifiez si tous les pods sont opérationnels.

geekflare@kubernetes-master:~$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6955765f44-rzw9d 1/1 Running 0 4m17s
kube-system coredns-6955765f44-xvgdp 1/1 Running 0 4m17s
kube-system etcd-kubernetes-master 1/1 En cours d'exécution 0 4m27s
kube-system kube-apiserver-kubernetes-master 1/1 Running 0 4m27s
kube-system kube-controller-manager-kubernetes-master 1/1 Running 0 4m27s
kube-system kube-flannel-ds-amd64-c2rf5 1/1 Exécution 0 81s
kube-system kube-proxy-mvdd7 1/1 En cours d'exécution 0 4m17s
kube-system kube-scheduler-kubernetes-master 1/1 En cours d'exécution 0 4m27s

Ajouter un nœud de travail au cluster

Maintenant que votre nœud maître est correctement configuré et fonctionne, il est temps d’ajouter le nœud de travail. Ici, vous devez exécuter la commande join sur le nœud de travail, que vous avez obtenu après avoir initialisé kubeadm.

Exécutez la commande ci-dessous sur le nœud de travailleur pour rejoindre le nœud maître.

geekflare@kubernetes-worker:~$ sudo kubeadm join 192.168.0.107:6443 --token dmamk9.0nmo62mhom8961qw --discovery-token-ca-cert-hash sha256:2de92f42e84d2020d8b19b1778785df5f8196e5eedaa5664ad911e8c23f58963
<x><x>[sudo]</x></x> mot de passe pour geekflare :
W1217 11:08:01.066191 28968 join.go:346] <x><x><x><x><x><x><x>[preflight]</x></x></x></x></x></x></x> WARNING : Les paramètres de JoinControlPane.controlPlane seront ignorés si le drapeau control-plane n'est pas défini.
<x><x><x><x><x><x><x>[preflight]</x></x></x></x></x></x></x> Exécution des vérifications avant le vol
[WARNING IsDockerSystemdCheck] : a détecté "cgroupfs" comme pilote de cgroupe Docker. Le pilote recommandé est "systemd". Veuillez suivre le guide à l'adresse https://kubernetes.io/docs/setup/cri/
<x><x><x><x><x><x><x>[preflight]</x></x></x></x></x></x></x> Lecture de la configuration du cluster...
[preflight<x><x><x><x><x><x><x>]</x></x></x></x></x></x></x> FYI : Vous pouvez consulter ce fichier de configuration avec 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Téléchargement de la configuration pour le kubelet depuis le ConfigMap "kubelet-config-1.17" dans l'espace de noms kube-system
[kubelet-start] Écriture de la configuration du kubelet dans le fichier "/var/lib/kubelet/config.yaml"
[kubelet-start] Écriture d'un fichier d'environnement kubelet avec des drapeaux dans le fichier "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Démarrage du kubelet
[kubelet-start] Attendre que le kubelet effectue le TLS Bootstrap...

Ce nœud a rejoint le cluster :
* Une demande de signature de certificat a été envoyée à apiserver et une réponse a été reçue.
* Le Kubelet a été informé des nouveaux détails de la connexion sécurisée.

Exécutez 'kubectl get nodes' sur le plan de contrôle pour voir ce nœud rejoindre le cluster.

Sur le nœud maître :

Vous verrez que quelques pods supplémentaires sont en cours d’exécution après que le nœud de travail ait rejoint le cluster.

geekflare@kubernetes-master:~$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6955765f44-9c7jc 1/1 Running 0 5m3s
kube-system coredns-6955765f44-c9s9r 1/1 Running 0 5m3s
kube-system etcd-kubernetes-master 1/1 En cours d'exécution 0 5m12s
kube-system kube-apiserver-kubernetes-master 1/1 Running 0 5m12s
kube-system kube-controller-manager-kubernetes-master 1/1 Running 0 5m13s
kube-system kube-flannel-ds-amd64-lgr62 1/1 Running 0 3m35s
kube-system kube-flannel-ds-amd64-n6vwm 1/1 Exécution 0 27s
kube-system kube-proxy-9mqp6 1/1 En cours d'exécution 0 27s
kube-system kube-proxy-kwkz2 1/1 En cours d'exécution 0 5m3s
kube-system kube-scheduler-kubernetes-master 1/1 Running 0 5m13s

Maintenant, exécutez à nouveau la commande kubectl sur le nœud maître pour vérifier si le nœud de travail a rejoint le cluster et s’il fonctionne dans l’état Ready.

geekflare@kubernetes-master:~$ kubectl get nodes
NOM ÉTAT RÔLES ÂGE VERSION
kubernetes-master Ready master 5m27s v1.17.0
kubernetes-worker Prêt <none> 31s v1.17.0

Conclusion

Maintenant que la configuration de Kubernetes est prête, vous pouvez commencer à orchestrer des conteneurs sur le cluster Kubernetes. Si Kubernetes vous intéresse, vous pouvez suivre ce cours Udemy.