
Bienvenue au cours de formation « Les fondamentaux ultimes de Kubernetes», dirigés par l'instructeur. Mamadou Lamine Diatta.
Remarque : certains contenus de ce cours, y compris les images, appartiennent à leurs propriétaires sur le Web. Je les ai empruntés pour des raisons d'uniformité et pour que nous puissions être sur la même longueur d'onde, quelle que soit la personne qui enseigne ce cours.
Je m'appelle, Mamadou Lamine Diatta, et j'utilise souvent le pseudonyme, Andialy Sokone, pour les cours de formation, afin de m'assurer que, je ne mélange pas, mes comptes personnels, sur différents fournisseurs, de services cloud.
J'ai plus de 25 ans, d'expérience en informatique, dans la mise en place, d'infrastructures sécurisées, facilement évolutives, et résilientes, ainsi que, dans la conception, et la livraison d'infrastructures cloud hybrides.
Une vaste expérience, dans la mise en place, et la relocalisation de centres de données, la consolidation de serveurs, la reprise après sinistre, la sécurité des systèmes, le développement de logiciels, le renforcement de la sécurité, des systèmes d'exploitation, des bases de données, ainsi que les réseaux et le stockage.
Pour plus de détails, veuillez consulter mon profil linked In
VEUILLEZ NOTER QUE, DANS CERTAINS COURS, VOUS DEVEZ PAYER NON SEULEMENT L'ABONNEMENT, MAIS AUSSI LES TP.
POUR CE COURS, à TOUS LES TP SONT EN LIGNE, GRATUITS ET SANS FRAIS SUPPLÉMENTAIRES.
VOICI UNE LISTE DE PERSONNES À QUI NOUS LE RECOMMANDONS :
§ Débutants avec Kubernetes et l'orchestration de conteneurs: Ce cours, est spécialement conçu pour, les personnes ayant peu, ou pas d'expérience avec, Kubernetes ou, l'orchestration de conteneurs, en général. Il aborde les concepts, fondamentaux et, établit des bases solides, pour comprendre et, utiliser la plateforme. Toute personne intéressée, par les principes, des architectures cloud-native modernes, des microservices et, des infrastructures évolutives, bénéficiera de ce cours. Comprendre Kubernetes est, essentiel pour évoluer, et contribuer, à l'évolution du cloud computing..
§
§Développeurs et professionnels de l'exploitation souhaitant adopter Kubernetes: Les développeurs de logiciels et, les professionnels de l'exploitation informatique, souhaitant apprendre à, déployer, gérer et, faire évoluer leurs applications, avec Kubernetes, trouveront cette formation précieuse. Elle leur apporte, les compétences pratiques, et les connaissances théoriques nécessaires, à l'intégration de Kubernetes, dans leurs workflows..
§
• Ingénieurs DevOps / Ingénieurs en fiabilité de site (SRE): Ces postes, sont au cœur de la gestion, des infrastructures et des déploiements, d'applications. Kubernetes est un outil, essentiel de leur arsenal. Ce cours leur fournira, les connaissances fondamentales, pour configurer, maintenir, surveiller et mettre à l'échelle, des clusters Kubernetes, leur permettant, de construire des pipelines CI/CD robustes et automatisés.
•
• Administrateurs système / Professionnels des opérations informatiques: A mesure que, les organisations migrent, vers des architectures cloud natives, les compétences traditionnelles, en matière d'administration système, doivent évoluer. Ce cours leur fournira, la compréhension essentielle, des concepts et des opérations, de Kubernetes, leur permettant de gérer, les charges de travail conteneurisées, de comprendre, la santé du cluster et, d'intégrer Kubernetes dans, l'infrastructure informatique existante.
•
•Architectes Cloud / Architectes de Solutions: Pour concevoir, des solutions cloud évolutives, résilientes et rentables, les architectes ont besoin, d'une compréhension approfondie, de l'orchestration de conteneurs. Ce cours, leur fournira les connaissances fondamentales, des capacités et, des limites de Kubernetes, les aidant à prendre, des décisions éclairées, concernant la conception, de l'infrastructure, la modernisation des applications, et la stratégie cloud.
•Étudiants / Futurs Professionnels du Cloud: Kubernetes est, une compétence très recherchée, dans l'industrie technologique. Ce cours offre, un point d'entrée solide, dans les technologies cloud-natives, les rendant plus compétitifs, sur le marché du travail, pour des rôles en DevOps, en ingénierie cloud, et en développement logiciel. Il construit une compréhension, fondamentale qui peut être, approfondie avec, des sujets plus avancés.
•Managers Techniques / Chefs de Projet: Bien qu'ils ne soient pas, directement opérationnels, comprendre les concepts fondamentaux, de Kubernetes, aide les managers à, prendre de meilleures décisions stratégiques, à estimer les délais de projet, plus précisément, à communiquer efficacement avec, les équipes techniques, et à comprendre, les implications de l'adoption, de l'orchestration, de conteneurs pour leurs projets, et produits.
•
En bref, toute personne impliquée, dans le cycle de vie, des applications logicielles modernes, du développement, au déploiement et aux opérations, trouvera ce cours, inestimable pour, naviguer dans le paysage cloud-natif.
Nous sommes heureux, de vous accueillir aujourd'hui pour : le cours sur, les principes fondamentaux de Kubernetes.
À partir des serveurs physiques et virtuelles, hébergés dans les centres de données, a travers le monde, les conteneurs Docker, sont construits et orchestrés, par Kubernetes pour alimenter, le cloud public, privé et hybride.
Qu’est-ce que Kubernetes ?
Wikipédia décrit: Kubernetes comme, un système d'orchestration, de conteneurs, open source, permettant d'automatiser, le déploiement, la mise à l'échelle et, la gestion d'applications informatiques. Il a été conçu à l'origine par, Google et, est désormais géré par, la Cloud Native Computing Foundation.
Dans ce cours sur Les Principes Fondamentaux de Kubernetes, nous devons étudier les éléments suivants :
THÉORIQUE . . . Ou nous allons vous donner les bases fondamentales de K8s comme . . .
Introduction à Kubernetes
Qu'est-ce que Kubernetes
Qu'est-ce que l'orchestration de conteneurs
Qu'est-ce qu'un conteneur
Architecture Kubernetes
Composants Kubernetes comprenant . . .
Kube-Apiserver
Kube-Controller-Manager
Kube-Scheduler
Etcd
Kubelet
Kube-proxy
Container-runtime
6. tockage de données à Ce qui est crucial pour la persistance des données
Volumes qui comprend PV (Persistent Volume) & PVC (Persistent Volume Claim)
7. Pods, Déploiement, ReplicatSet, DaemonSets et StatefulSets à Qui sont l'un des objets K8 les plus utilisés dans K8s . . .
8. Les Services Kubernetes à Ce qui a facilité l'accès à vos applications K8s
La deuxiemepartiec’est la partie pratique de cecours
PRATIQUE . . . Ou nous allons mettre en practique pour mieux asseoir nos connissances, nous allons étudier . . .
Création de pods qui sont les plus petites unités de calcul déployables que vous pouvez créer et gérer dans Kubernetes
Création de namespaces qui sont essentiels pour organiser et isoler les ressources au sein d'un cluster, permettant une gestion efficace de plusieurs environnements et équipes, et prévenant les conflits
Création de deployments qui simplifie le processus de packaging, de distribution et d'exécution des applications, de manière cohérente dans différents environnements, garantissant l'évolutivité et la portabilité
Création de replicas qui assure une haute disponibilité et une tolérance aux pannes en exécutant plusieurs instances d'un service conteneurisé, en répartissant les charges de travail sur plusieurs répliques, pour des performances et une fiabilité améliorées
Explication du fichier de configuration YAML qui est utilisé pour définir et configurer les ressources du cluster, telles que les pods, les services ou les déploiements, de manière déclarative.
Création de services Il fournit l'équilibrage de charge, le naming, and discovery DNS, afin d'isoler un microservice d'un autre.
Un service est une manière abstraite d'exposer une application, exécutée sur un ensemble de pods, en tant que service réseau.
Création de secrets et de ConfigMap ce qui est essentiel pour se protéger contre les vulnérabilités, les accès non autorisés et les violations de données, garantissant l'intégrité et la confidentialité des charges de travail
Explication de namespaces qui sont essentiels pour organiser et isoler les ressources
Tableau de bord K8s qui est une interface utilisateur Web qui fournit un aperçu des ressources et des charges de travail du cluster, permettant aux utilisateurs de gérer les applications, de surveiller les performances et de résoudre facilement les problèmes, améliorant ainsi l'efficacité opérationnelle
Installation de HELM
Approche pour exposer les applications en utilisant NodePort, LoadBalancer ou Ingress pour permettre l'accès externe aux services exécutés au sein du cluster, en garantissant qu'ils sont accessibles à partir de clients externes.
Service de type : NodePort, ClusterIP
Service de type : LoadBalancer, ExternalName, ExternalIP
Utiliser Ingress
Ingress expliqué Ingress est une ressource qui gère l'accès externe aux services au sein d'un cluster, généralement HTTP/HTTPS, permettant le routage, l'équilibrage de charge et la communication sécurisée avec les applications.
Installation du contrôleur Ingress NGINX
Utilisation du contrôleur Ingress NGINX avec MetalLB comme LoadBalancer
Routage Host et Path
Sécurisation d'une application exécutée sur K8 ce qui est essentiel pour se protéger contre les vulnérabilités, les accès non autorisés et les violations de données, garantissant l'intégrité et la confidentialité des charges de travail
Explication des volumes Kubernetes un volume fournit un stockage persistant pour les pods, garantissant que les données restent disponibles même si les conteneurs sont redémarrés ou reprogrammés.
Kubernetes StatefulSet expliqué Il s'agit d'un contrôleur Kubernetes qui garantit l'ordre de création et de suppression des pods, ce qui le rend idéal pour les applications nécessitant un stockage persistant ou des identités réseau spécifiques. Il est couramment utilisé pour les bases de données, les files d'attente de messages et autres services avec état.
Services Kubernetes expliqués Pour plus de détails sur le type de service . . .
Video Streaming
Référence d'installation du cluster Nous ne terminerons pas ce cours sans vous donner des références pour créer un cluster K8s local, si vous souhaitez créer le vôtre. Notez que ce cours est conçu pour offrir un accès gratuit et en ligne à des niveaux K8s..
Tout au long du voyage, nous déploierons des applications, exécutant des serveurs Web, des bases de données, des vidéos en streaming, etc., etc., à l'aide de K8s.
Prenez du recul, et reposez-vous pendant que, nous parcourons d'abord la théorie, pour acquérir, les bases fondamentales de K8s, avant de nous attaquer à, la pratique dans les labs.
Notez que, tous les labs de ce cours, seront faits sur, un site en ligne gratuit, qui vous fournit, des Machines Virtuelles, sur lesquelles, le Docker Engine / Docker daemon est installée, vous permettant ainsi, de créer vos conteneurs.
Neamoins, je vais vous montrer, comment creer, un environment Kubernetes, au cas ou vous aimeriez, le faire vous meme.
Un cluster Kubernetes, se compose d’un master, et d'un ensemble de machines, appelées worker nodes (nœuds qui font le travail), qui exécutent, des applications conteneurisées. Chaque cluster possède, au moins un master et un worker node.
Dans cette diapositive, voici notre simple environnement Docker, que j’ai créé chez moi.
Nous avons les éléments suivants :
- Le routeur ISP (le routeur de votre fournisseur d'accès Internet chez vous)
- Un LAPTOP HP Pavilion, avec un processeur, Intel Core i7 Quad-Core, de 10e génération, et 16 Go de RAM. (Je recommande 32 Go pour de meilleures performances, si vous pouvez vous le permettre). Chargé avec, MS Windows 10, sur lequel j'ai installé, un hyperviseur Oracle, appelé VirtualBox, pour me permettre de créer, des machines virtuelles.
J’ai créé, 3 machines virtuelles, pour le cluster Kubernetes, dont :
1 VM avec, 4 Go de RAM et, 2 vCPUs, pour être notre, nœud MAÎTRE Kubernetes
2 VMs avec, 2 Go de RAM et, 2 vCPUs chacune, pour être nos 2 nœuds de TRAVAIL.
Toutes doivent avoir, un accès Internet pour que le laboratoire fonctionne.
Voyez !!! Cela ne nécessite pas, d'équipement lourd, et très coûteux pour, s'initier à la technologie.
Vous pouvez apprendre cela avec peu de moyens.
REMARQUE IMPORTANTE: TOUS LES LABS, SONT CONÇUS POUR FONCTIONNER, SUR UN TIERS GRATUIT, SANS AUCUN COÛT POUR VOUS. VOUS N'AVEZ BESOIN QUE, D'UN ORDINATEUR CONNECTE, SUR INTERNET MUNI , D’UN NAVIGATEUR TEL QUE, Chrome, Firefox, Edge, Internet Explorer, Safari.
REFERENCE POUR, L’INSTALLATION DOCKER, ET KUBERNETES
Voici les liens, que nous avons utilisés pour, installer Docker et Kubernetes, sur Oracle Linux, dans notre environnement
Maintenant, si vous n’avez pas le temps, de configurer l'environnement vous-même,
eh bien !! Docker et K8s, ont mis en place, des sites en ligne, sur lesquels, vous pouvez, vous entraîner gratuitement, à l'aide d'exemples de ce cours.
https://labs.play-with-docker.com
https://labs.play-with-k8s.com/
https://training.play-with-kubernetes.com/
https://killercoda.com/
K8s ONLINE PLAYGROUND
Maintenant on va explorer the sites en line gratuits . . .
Une aire de jeux pour Kubernetes est Killercoda. . . https://killerccoda.com/playgrounds/scenario/kubernetes
Nous utiliserons, gratuitement cet environnement K8S en ligne, lors des déploiements K8S les moins longs. . .
. . . Dont l’URL est sur la diapositive. . . C’est un environnement interactif de KillerCoda à https://killerccoda.com/
. . . Vous pouvez utiliser, votre github, ou votre gitlab, ou votre gmail, ou tout autre compte de messagerie, pour vous connecter. . .
àSous [ Areas ] selectionnez [ Playgrounds ] puis selectionnez à [ Kubernetes 1.28 ]
àUn environment Kubernetes version 1.28
àCet environment, ne vous sera reserve, gratuitement, que pour: 60 minutes . . .
Remarque: Dans cet environnement précis, vous êtes censé terminer, votre travail dans les 60 minutes, sinon vous perdez les ressources, que vous avez déployées . . .
Ce terrain de jeu, aura toujours, la dernière version stable, Kubeadm Kubernetes, quelques semaines après la sortie.
Vous avez accès, a un cluster Kubeadm vide, avec deux nœuds a 2 GB.
Le nœud ControlPlane, qui est le master ici, a le Taint retiré, pour pouvoir également héberger une charge de travail.
Kubernetes Master, a le Taint, [node-role.kubernetes.io/master:noschedule] pour éviter, de planifier des pods dessus.
Ceci est juste un environnement vide, si vous recherchez des scénarios, decouvrez CKS, CKA, CKAD ou tous les domaines.
Remarque: Assurez-vous, pour activer, les fenêtres pop-ups/contextuelles, sur votre navigateur et utiliser le bon navigateur.
J'ai essayé cela, avec succès, avec les navigateurs Chrome et Edge.
Je choisis de me connecter, avec mon compte GitHub [asokone]. . . .
Vous pouvez choisir, toutes les options de connexion. Si vous avez un e-mail, cliquez sur e-mail, et suivez les étapes. . .
Dès que vous vous connectez, vous verrez. . .
[ Initializing Kubernetes... Done ]
. . . Suivi du prompt Unix PS1. . . Puis tapez . . .
controlplane $ apt install -y xterm
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
controlplane $
controlplane $
controlplane $ resize
COLUMNS=144;
LINES=42;
export COLUMNS LINES;
controlplane $
controlplane $
Voyons quels sont les nodes qui composent ce K8s cluster . . .
controlplane $ kubectl get nodes
NAME STATUS ROLES AGE VERSION
controlplane Ready control-plane 15d v1.28.4
node01 Ready <none> 15d v1.28.4
controlplane $
controlplane $
controlplane $ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
controlplane Ready control-plane 15d v1.28.4 172.30.1.2 <none> Ubuntu 20.04.5 LTS 5.4.0-131-generic containerd://1.6.12
node01 Ready <none> 15d v1.28.4 172.30.2.2 <none> Ubuntu 20.04.5 LTS 5.4.0-131-generic containerd://1.6.12
controlplane $
controlplane $
controlplane $ which docker
/usr/bin/docker
controlplane $
controlplane $
controlplane $ docker --version
Docker version 24.0.5, build 24.0.5-0ubuntu1~20.04.1
controlplane $
controlplane $
controlplane $ which kubectl
/usr/bin/kubectl
controlplane $
controlplane $
controlplane $ kubectl version
Client Version: v1.28.4
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.28.1
controlplane $
controlplane $
controlplane $ kubectl get pod
No resources found in default namespace.
\______ NO POD IN default NAMESPACE
controlplane $
controlplane $
. . .et les services? . . .
controlplane $ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9d
\______ YES THE FAMOUS kubernetes SERVICE IS HERE . . .
controlplane $
controlplane $
Voyons les namespaces? . . .
controlplane $ kubectl get ns
NAME STATUS AGE
default Active 15d
kube-node-lease Active 15d
kube-public Active 15d
kube-system Active 15d
local-path-storage Active 15d
controlplane $
controlplane $
Avons nous des pods dans le namespace kube-system . . .
controlplane $ kubectl get pod --namespace=kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-784cc4bcb7-b8bdm 1/1 Running 3 9d
canal-bnbnp 2/2 Running 0 32m
canal-sgvnp 2/2 Running 0 32m
coredns-5d769bfcf4-j6wzd 1/1 Running 0 9d
coredns-5d769bfcf4-z4wqc 1/1 Running 0 9d
etcd-controlplane 1/1 Running 0 9d
kube-apiserver-controlplane 1/1 Running 2 9d
kube-controller-manager-controlplane 1/1 Running 2 9d
kube-proxy-4c8vx 1/1 Running 0 9d
kube-proxy-wdr48 1/1 Running 0 9d
kube-scheduler-controlplane 1/1 Running 2 9d
controlplane $
controlplane $
Étant donné que, le controplane hébergera les pods, vous avez un cluster Kubernetes avec, 2 nœuds avec lesquels, vous pouvez jouer. . .
. . . Notez que, dans ce terrain de jeu, vous êtes chronométré pendant 60 minutes . . .
. . . 60 minutes . . . durant lesquels, tu dois finir tes labs, avant que les resources vous soient retirées
Voila une autre platforme gratuite pour vos labs . . .
Nous utiliserons gratuitement cet environnement K8s en ligne, lors des déploiements K8s plus longs. .
à Play with Kubernetes Classroom, Le URL est montré sur ce diapo . . .
Play with Kubernetes Classroom, est un nouveau site, fourni par Docker, qui vous aide à acquérir une expérience pratique, en utilisant Kubernetes.
Ils offrent un atelier qui vous permettra, à partir du navigateur internet, de suivre un tutoriel Kubernetes, sans avoir à installer une seule chose.
Lorsque vous accédez à l'URL, cliquez sur [ Kubernetes Hands-on Workshop ], pour accéder à votre serveur, suivez les instructions sur le panel de gauche, de la page pour créer, votre cluster K8S.
Remarque: Assurez-vous d'activer les fenêtres pop-ups/contextuelles ,sur votre navigateur et utilisez le bon navigateur. J'ai essayé avec succès sur Chrome.
Permettez-moi de montrer comment. . .
J'accéderai à cette URL: https://labs.play-with-k8s.com/
. . . et je me connecterai, avec mes informations d'identification [ asokone ], de hub.docker.com ou github
Puis sélectionnez [ START ]
WARNING!!!!
This is a sandbox environment. Using personal credentials
is HIGHLY! discouraged. Any consequences of doing so, are
completely the user's responsibilities.
Il s'agit d'un environnement sandbox. Utilisation des informations, d'identification personnelles
c'est hautement! découragé. Toute conséquence de cela, sont complètement les responsabilités de l'utilisateur.
Vous pouvez initialiser/créer un cluster comme suit:
1. Initialise le nœud maître, du cluster:
kubeadm init --apiserver-advertise-address $(hostname -i) --pod-network-cidr 10.5.0.0/16 ç COPIEZ CETTE LIGNE ET COLER LA SUR LE PS1 DU SERVEUR POUR CREER UN K8s CLUSTER
IMPORTANTE NOTE POUR COPIER ET COLLER SUR CET ENVIRONNEMENT:
avec le navigateur MS-Edge suivez cela
-Selectionnez votre texte puis ctrl + insert pour copier le texte
-and shift + insert pour coller le text sur le browser
2. Initialiser la mise en réseau du cluster:
kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml
3. (Optional) Create an nginx deployment:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/application/nginx-app.yaml
The PWK team.
VOILA LES ETAPES COMMENT S’Y FAIRE . . .
UN AUTRE MOYEN DE CRÉER UN CLUSTER KUBERNETES AVEC KIND
Dans un serveur physique ou une machine virtuelle . . .
. . . Dans mon cas, j'ai téléchargé Oracle VirtualBox pour créer des machines virtuelles, j'ai créé devopsoel82 . . . Puis . . .
>>>>>> BRING YOUR ORACLE VIRTUALBOX APPLICATION AND SHOW THE VM devopsoel82
Téléchargez Oracle Linux 8.2 depuis : https://edelivery.oracle.com/
•Installez le système d'exploitation sur votre machine physique ou virtuelle
•Installez Docker Engine :
•https://oracle-base.com/articles/linux/docker-install-docker-on-oracle-linux-ol8
Installez la commande kubectl
•https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/
Installez KIND
•https://kind.sigs.k8s.io/docs/user/quick-start/
•Créez votre cluster avec la commande KIND
•Vérifiez l'état du cluster
K8s – ARCHITECTURE DE PRODUCTION
Une architecture de production assure la stabilité, la performance et la scalabilité des applications dans un environnement réel, où la fiabilité est cruciale. Elle permet de minimiser les temps d'arrêt, garantir la sécurité, et optimiser les ressources pour répondre aux besoins des utilisateurs finaux.
En résumé, l'environnement Kubernetes typique comprend au moins 3 « Masters » / maîtres et autant de « worker nodes » / nœuds de travail que votre charge peut gérer.
Dans Kubernetes, les « master nodes » / nœuds maîtres, sont des nœuds qui, contrôlent et gèrent un ensemble de « worker nodes » / nœuds de travail.
Un « master node » / nœud maître, possède les composants suivants, pour aider à gérer les « worker nodes » / nœuds de travail :
Kube-Apiserver: est l'interface du panneau de contrôle du « master node » / nœud maître, et est responsable de l'établissement, de la communication entre Kubernetes Node et les composants de Kubernetes.
Kube-Controller-Manager: est un daemon qui, intègre des contrôleurs, et effectue la création de namespaces et la collecte des déchets.
Kube-Scheduler: est responsable de la distribution et de la gestion de la charge de travail sur les « worker nodes » / nœuds de travail
Etcd: est un “distributed key-value store”, utilisé pour coordonner le travail distribué. Etcd stocke les données de configuration du cluster Kubernetes, représentant l'état du cluster, à tout moment.
Dans Kubernetes, les « worker nodes » / nœuds de travail, exécutent votre charge de travail en plaçant des conteneurs dans des pods, pour s'exécuter sur des nœuds. Un nœud peut être une machine virtuelle ou physique, selon le cluster.
Chaque nœud est géré par le plan de contrôle et contient les services nécessaires à l'exécution des pods
Les requêtes des utilisateurs sont reçues par API-Server, dans le(s) nœud(s) maître(s), puis traitées et exécutées dans le nœud de travail, par le kubelet.
Le processus est un peu plus complexe lorsque sont impliqués le Déploiement, le Service / Ingress / le ReplicatSet et le StatefulSet.
Exemple : Une demande d'utilisateur pour planifier un nouveau Pod
1.Le serveur API reçoit la demande et l'analyse pour s'assurer qu'elle ne dépasse pas les spécifications
2.Ensuite, le serveur API l'envoie au Scheduler qui décide, en fonction de la disponibilité des ressources, où, dans quel « worker node »/ nœud de travail, placer le Pod
3.Ensuite, le kubelet obtient la demande du Scheduler, pour exécuter la demande de l'utilisateur
Un autre élément important est le Controller Manager, qui détecte les changements d'état (comme les pods échoués) et tente de récupérer, l'état souhaité du cluster, dès que possible.
Si le Controller Manager, détecte une déficience de, l'état souhaité du cluster, il contacte le Scheduler, pour qu'il prenne en charge les déficiences.
Enfin, l'ETCD, qui est le KEY:VALUE store, est mis à jour, sur le nouvel état du cluster. !!!!
Je l'appelle l'ETCD, le registre, la base de données du cluster. Il garde une trace, de tous les changements et, activités du cluster
Les utilisateurs accèdent au serveur API du cluster Kubernetes via
•Un « dashboard » / tableau de bord qui est, une interface Web pour Kubernetes
•Ou Kubectl, qui est l'outil, de ligne de commande Kubernetes (CLI) ç C'EST CELUI AVEC LEQUEL NOUS TRAVAILLERONS TOUT LE TEMPS
•Ou une API qui est (Application Programming Interface)
Dans un environnement de production, où vous avez au moins plus d’un « master » / maître, en charge entre les nœuds, l'etcd est, sur un stockage distribué, sur tous les maîtres.
Dans une production, où vous avez au moins, plus d’un « master » / maître,
-le serveur API est équilibré en charge, entre les nœuds,
-l'etcd est, sur un stockage distribué, sur tous les « masters » / maîtres.
K8s – THE INTRODUCTION
Maintenant, que nous avons une idée de comment on peut pratiquer, revenons au sujet principal: Kubernetes, pour apprendre les bases fondamentales necessaires pour comprendre la force derriere Kubernetes.
Eh Bien Kubernetes, est une plateforme, open source, permettant d'automatiser, le déploiement, et la gestion des applications conteneurisées.
Simulation d’Orchestration K8s
Ce jeu de Tetris des années 80, se contente d'orchestrer les cubes, en plaçant, chaque ensemble de cubes, au bon endroit, là où ils s'intègrent parfaitement, sans laisser d'espace perdu.
De la même manière, K8s fait exactement cela d'une manière plus complexe.
Qu'est-ce que Kubernetes ?
Selon Wikipédia, Kubernetes est un système d'orchestration de conteneurs, open source permettant, d'automatiser le déploiement, et la gestion d'applications informatiques.
Il a été conçu à l'origine par Google, et est désormais maintenu, par la Cloud Native Computing Foundation.
Version initiale : 7 juin 2014
Il peut gérer différents environnements de déploiement :
Public
Privé
Hybride
Qu'est-ce que l'orchestration de conteneurs ?
L'orchestration de conteneurs, est l'automatisation d'une grande partie, de l'effort opérationnel requis, pour exécuter des charges, de travail, et des services conteneurisés.
Cela inclut, un large éventail de choses, le cycle de vie du conteneur, y compris l'approvisionnement, le déploiement, la mise à l'échelle en Anglais SCALING, (vers le haut et vers le bas), la mise en réseau, l'équilibrage de charge, la haute disponibilité (HA – High Availability) et bien plus encore.
Qu'est-ce qu'un service dans ce cas précis ?
Service : il s'agit, d'une manière abstraite, d'exposer une application, exécutée sur un ensemble de pods, en tant que service réseau.
Les pods, étant éphémères, un service permet d'attribuer à un groupe de pods, qui fournissent des fonctions spécifiques, telles que, des services Web, des bases de données, le traitement d'images, etc., un nom et une adresse IP unique (clusterIP).
N'oubliez pas le mot : CLUSTERIP.
Qu'est-ce qu'un conteneur ?
Un conteneur, est un ensemble de logiciels légers, autonomes et exécutables qui comprend tout ce qui est nécessaire, pour exécuter une application, du code, des outils système exécutés sur un serveur physique ou virtuel, en parallèle avec d'autres conteneurs.
K8s – ARCHITECTURE
L'architecture de Kubernetes comprend un plan de contrôle et des nœuds de travail. Le plan de contrôle gère l'état du cluster, planifie les pods sur les nœuds et garantit leur santé, tandis que les nœuds de travail exécutent les pods et fournissent l'environnement d'exécution pour les conteneurs.
ØArchitecture Kubernetes
Ø
Un cluster Kubernetes se compose, d’un master/maître et d'un ensemble de machines de travail/worker nodes, appelées nœuds, qui exécutent des applications conteneurisées.
Chaque cluster possède, au moins, un master/maitre et un worker node/nœud de travail.
Le ou les worker nodes/nœuds de travail, hébergent les pods, qui sont les composants, de la charge de travail, de l'application.
Dans les environnements de production, un cluster fonctionne généralement, avec au moins 3 master/maîtres et plusieurs worker nodes / nœuds de travail, offrant une tolérance aux pannes et une haute disponibilité.
Dans notre cas, pour cette formation, nous avons un master/maître et 2 worker nodes/nœuds de travail, exécutés sur des machines virtuelles.
Parmi les composants Kubernetes, illustrés dans ce schéma de cluster, nous avons:
Sur Master
Kube-Apiserver
Kube-Controller-Manager
Kube-Scheduler
Etcd
Sur chaque worker node / nœud de travail
Kubelet
Kube-proxy
Container-runtime
Dans la diapositive suivante, nous allons passer en revue chacun des composants en détail.
K8s – COMPONENTS EXPLAINED
Dans ce chapitre, nous détaillerons le rôle de chaque élément du cluster K8s.
Composants Kubernetes (suite)
Parmi les composants Kubernetes, illustrés dans le schéma du cluster, dans la diapositive précédente :
Sur Master, nous exécutons les composants suivants :
Kube-Apiserver: est l'entité de gestion centrale d'un cluster Kubernetes, agissant comme le principal point d'interaction pour les administrateurs et les utilisateurs pour configurer et gérer le cluster. Il traite les requêtes API RESTful, les valide, et met à jour l'état du cluster, servant de frontal pour le plan de contrôle de Kubernetes.
L'API vous permet d'interroger, et de manipuler, l'état des objets API (par exemple : Pods, Namespaces, ConfigMaps et Events). La plupart des opérations peuvent être effectuées via command-line: kubectl ou d'autres outils command-line tels que kubeadm,
qui à leur tour utilisent l'API.
Cependant, vous pouvez également accéder directement à l'API à l'aide d'appels REST.
Vous pouvez exécuter plusieurs instances de kube-apiserver et équilibrer le trafic entre ces instances
Kube-Controller-Manager: Le Kube-Controller-Manager est responsable de l'exécution des processus de contrôle qui régulent l'état du cluster, en veillant à ce que l'état souhaité du système corresponde à l'état actuel...
Voici des exemples de contrôleurs fournis avec Kubernetes aujourd'hui : replication controller, endpoints controller, namespace controller et le serviceaccounts controller.
vKube-Scheduler: est responsable de la distribution et de la gestion de la charge de travail sur les worker nodes. Il sélectionne donc le nœud le plus approprié pour exécuter le pod, en fonction des besoins en ressources, et assure le suivi de l'utilisation des ressources. Il s'assure que la charge de travail n'est pas planifiée sur des nœuds déjà pleins. Il surveille les pods nouvellement créés, sans nœud attribué (on peut spécifier la ou l’on veut exécuter un pod), et sélectionne un nœud sur lequel les exécuter.
Etcd: est un “distributed key-value store”, utilisé pour coordonner le travail distribué. Etcd stocke les données de configuration du cluster Kubernetes, représentant l'état du cluster, à tout moment. Si votre cluster Kubernetes utilise etcd comme base de donnees, assurez-vous de disposer d'un plan de sauvegarde pour ces données..
J'ai mentionné le mot API RESTful, hein bien . .
Une API RESTful (Represen-tational State Transfer) est, un style architectural, pour concevoir des applications en réseau. Elle repose sur, un modèle de communication client-serveur, sans état, où les requêtes et les réponses sont effectuées en utilisant des méthodes HTTP standard telles que GET, POST, PUT et DELETE. Chaque ressource, dans une API RESTful, est identifiée par une URL, et les interactions avec ces ressources, sont réalisées via les méthodes standard, permettant ainsi, un développement d'applications, évolutif et flexible.
Composants Kubernetes (suite)
Sur chaque Worker Nodes, we have running the following components of Kubernetes.
Kubelet: un agent qui, s'exécute sur chaque nœud du cluster. Il s'assure que, les conteneurs s'exécutent dans un pod. Le kubelet, prend un ensemble de PodSpecs, qui sont fournis, via divers mécanismes, et garantit que, les conteneurs décrits dans ces PodSpecs, sont en cours d'exécution et en bon état.
REMARQUE: Le kubelet, ne gère pas les conteneurs, qui n'ont pas été créés par Kubernetes
Kube-proxy: est un proxy réseau, qui s'exécute sur chaque nœud, de votre cluster, et implémente une partie du concept de service Kubernetes.
Kube-proxy gère, les règles réseau sur les nœuds. Ces règles réseau permettent, la communication réseau, vers vos pods à partir de, sessions réseau, à l'intérieur ou à l'extérieur de votre cluster.
Kube-proxy utilise la couche de « packet filtering » du système d'exploitation, s'il y en a une et qu'elle est disponible. Sinon, kube-proxy transmet le trafic lui-même
Container-runtime: Le container-runtime est le logiciel responsable de l'exécution des conteneurs. Kubernetes prend en charge plusieurs environnements d'exécution de conteneurs : Docker, containerd, CRI-O et toute implémentation, de l'interface Kubernetes CRI (Container Runtime Interface).
DNS
Bien que, les autres modules complémentaires, ne soient pas strictement requis, tous les clusters Kubernetes, doivent disposer d'un DNS, car de nombreux exemples en dépendent.
Le DNS du cluster sert les enregistrements DNS pour les services Kubernetes, en plus des autres serveurs DNS, de votre environnement.
Les conteneurs démarrés par Kubernetes incluent automatiquement ce serveur DNS dans leurs recherches DNS.
CoreDNS est un serveur DNS flexible, et extensible, qui peut être installé, pour servir de DNS dans le cluster pour les pods.
Il peut être téléchargé de https://coredns.io/.
Composants Kubernetes (suite)
Sur chaque Worker Nodes, nous exécutons les composants suivants de Kubernetes.
Pods: Les pods sont les plus petites unités de calcul déployables que vous pouvez créer et gérer dans Kubernetes.
Un pod est un groupe d'un ou plusieurs conteneurs, avec des ressources de stockage et de réseau partagées, et une spécification sur la manière d'exécuter les conteneurs.
Le contenu d'un pod est toujours colocalisé et coplanifié, et s'exécute dans un contexte partagé.
Un pod modélise un « logical host/hôte logique » spécifique à l'application : il contient un ou plusieurs conteneurs d'application qui sont relativement étroitement couplés.
Dans les contextes non cloud, les applications exécutées sur la même machine physique ou virtuelle sont analogues aux applications cloud exécutées sur le même hôte logique.
REMARQUE IMPORTANTE : dans Kubernetes, c'est le POD qui obtient l'adresse IP, pas le conteneur. Vous accédez à la ressource du conteneur via l'IP du POD. Et le POD communique avec d'autres PODS à l'aide de l'adresse IP.
Composants Kubernetes (suite)
Add-Ons ou Module Complementaires
Les modules complémentaires étendent les fonctionnalités de Kubernetes. Voici une liste de certains des modules complémentaires disponibles :
Réseau et politique réseau
•ACI: fournit une mise en réseau de conteneurs intégrée et une sécurité réseau avec Cisco ACI.
•Flannel: est un fournisseur de réseau overlay network qui peut être utilisé avec Kubernetes, c’est bien celui que nous utiliserons
•Canal: Unit Flannel et Calico, fournissant des réseaux et des politiques réseau.
•Calico: est un fournisseur de réseaux et de politiques réseau
L'URL pour l'installation des modules complémentaires réseau est la suivante: https://kubernetes.io/docs/concepts/cluster-administration/addons/
WEB UI (Dashboard)
Dashboard est une interface Web de tableau de bord pour Kubernetes
Kubectl est l'outil de ligne de commande Kubernetes (CLI) ç C'EST CELUI AVEC LEQUEL NOUS TRAVAILLERONS TOUT LE TEMPS
Cluster-Level Logging
Il s'agit du mécanisme, responsable de la sauvegarde, des journaux/logs des conteneurs, dans un magasin de journaux central, avec une interface, de recherche/navigation.
La liste des composants Kubernetes ne s'arrête pas là, j'ai mis en évidence ceux que nous traiterons dans ces fondamentaux de Kubernetes
K8s – COMPOSANTS INTERACTIFS EXPLIQUÉS
Voila les Kubernetes objects, les composants importants, que nous allons configurer nous-mêmes, et traiter de manière interactive, au cours des sessions..
-Pod
-Service
-Ingress
-ConfigMap
-Secret
-Deployment
-StatefulSet
-DaemonSet
Nous passerons en revue, chacun d’eux, en détail, dans les diapositives à venir.
K8s – Explication des composants interactifs
Étant donné que, l'adresse IP d'un POD, est attribuée automatiquement par, Kubernetes lors de la création du POD, si les conteneurs d'un Pod échouent, un autre POD similaire, est créé avec une nouvelle adresse IP.
Cela rend difficile la communication entre les applications exécutées sur des conteneurs, sur des PODS différents . . .
. . . Imaginez si, un POD devait changer d'adresse IP, lorsqu'il est recréé après une panne !!!
Il sera difficile, de suivre la gestion, de ces changements d'adresse IP. Pour résoudre ce problème, le service Kubernetes a été introduit le . . .
Service : les services Kubernetes, fournissent l'équilibrage de charge, la dénomination et la découverte, pour isoler un microservice d'un autre.
à Un service est une manière abstraite d'exposer une application exécutée sur un ensemble de Pods en tant que service réseau.
Les pods étant éphémères, un service permet à un groupe de pods, qui fournissent des fonctions spécifiques (services Web, traitement d'images, bases de données, etc.) d'attribuer les éléments suivants :
- un Nom et
- une Adresse IP unique (clusterIP).
REMARQUE : Le cycle de vie d'un POD et d'un service ne sont PAS connectés. Un Pod peut bien mourir, le SERVICE et son adresse IP resteront
K8s – Explication des composants interactifs (suite)
External Service / Service Externe
Un service externe est un service qui ouvre la communication, depuis des sources externes vers le POD
Internal Service / Service Interne
Un service interne est un service que vous ne souhaitez pas exposer au monde, comme une base de données..
REMARQUE : En général, le service externe est effectué en exposant les ports du POD au monde. Regardez attentivement l'URL http://my-web-service-ip:port/, Nous avons le :PORT.
Dans le monde réel, vous voulez avoir quelque chose de sécurisé, avec HTTPS, et sans :PORT dans l'URL, simple comme https://my-web-service.com/, n'est-ce pas ?!?!?!
Pour cela, il existe un autre service appelé INGRESS . . .
. . . Que nous allons introduire sur la prochaine diapositive
K8s – Explication des composants interactifs (suite)
Qu'est-ce qu'Ingress ?
Ingress (et Kubernetes Load Balancer) fournit une interface utilisateur facile à utiliser, capable de combiner plusieurs microservices dans une seule surface d'API externalisée.
Ingress expose les routes HTTP et HTTPS, depuis l'extérieur du cluster, vers les services au sein du cluster. Le routage du trafic est contrôlé par des règles définies sur la ressource Ingress
K8s – Explication des composants interactifs (suite)
ConfigMap
ConfigMap vous permet de découpler, une configuration spécifique à l'environnement, de vos images de conteneur, afin que vos applications soient facilement portables.
ConfigMap est un objet API, utilisé pour stocker, des données non confidentielles, dans des « key-value pairs » / paires clé-valeur.
Les pods peuvent consommer, des ConfigMaps comme : - variables d'environnement, - arguments de ligne de commande, ou comme - fichiers de configuration dans un volume
Quelle est la MOTIVATION derrière ConfigMap ?
Il est utilisé pour, définir les données de configuration, séparément du code de l'application.
Par exemple, imaginez que vous développez une application, que vous pouvez exécuter, sur votre propre ordinateur (pour le développement) et dans le cloud (pour gérer le trafic réel).
Vous écrivez le code, pour rechercher dans une variable d'environnement, nommée DB_URL. Localement, vous définissez cette variable : mySQL-db et, dans l'environnement de production, mango-db
!! Dans le cloud, vous le définissez pour faire référence à, un service Kubernetes, qui expose le composant de base de données, à votre cluster. C'est aussi simple que cela !!!
Cela vous permet de, récupérer une image de conteneur, exécutée dans le cloud, et de déboguer exactement, le même code localement si nécessaire.
Mais, comme vous pouvez le voir, dans cette diapositive, nous avons ici, en texte clair, notre utilisateur et notre mot de passe SQL . . .
. . . Ca c'est un problème de sécurité majeur.
Et bien c'est là qu'un autre composant de Kubernetes appelé : - SECRETS, vient aider.
K8s – Explication des composants interactifs (suite)
Secrets
Les secrets Kubernetes vous permettent de stocker et de gérer des informations sensibles, telles que les mots de passe, les « Oauth token »/ jetons OAuth et les clés SSH
Stocker des informations confidentielles, dans un secret, est plus sûr et plus flexible que, de les placer textuellement, dans une définition de pod ou dans une image, de conteneur.
Attention : Les secrets Kubernetes, sont stockés par défaut sous forme, de chaînes codées en base64 non chiffrées. Toute personne, disposant d'un accès à l’API, ou d'un accès a la base de données sous-jacent de Kubernetes, etcd, peut les récupérer sous forme de texte brut.
Pour utiliser les secrets en toute sécurité, il est recommandé de, procéder au minimum comme suit :
1.Activer l’Encryption au repos pour les secrets.
2.Activer ou configurer les règles RBAC (Role Base Access Control), qui restreignent la lecture et l'écriture du secret.
3.Sachez que les secrets peuvent être obtenus, implicitement, par n'importe qui, avec l'autorisation de créer un pod.
Remarque : OAuth est une norme ouverte, de délégation d'accès, couramment utilisée, comme moyen pour, les utilisateurs d'Internet d'accorder, aux sites Web, ou aux applications, l'accès à leurs informations, sur d'autres sites Web, mais sans leur donner les mots de passe.
RBAC (Role Base Access Control) : contrôle d'accès basé sur les rôles, pour éviter les accidents inattendus, où une personne, dans le mauvais namespace, par erreur, arrête la production, alors qu'elle pense détruire son cluster de test.
K8s – Explication des composants interactifs (suite)
qNamespace: Namespaces sont des objets Kubernetes qui partitionnent, un cluster Kubernetes unique, en plusieurs clusters virtuels. Chaque espace de noms Kubernetes, fournit la portée, des noms Kubernetes qu'il contient ; ce qui signifie, qu'en utilisant la combinaison d'un nom d'objet, et d’un namespace, chaque objet obtient une identité unique dans le cluster..
qCgroups: cgroups, qui signifient groupes de contrôle, sont un mécanisme de noyau, permettant de limiter, et de mesurer les ressources totales utilisées, par un groupe de process, exécutés sur un système
En résumé
Cgroups = limite la quantité, de ressources que, vous pouvez utiliser (MEM/CPU/Disk IO/Réseau) ;
Namespaces = sont un moyen de répartir les ressources du cluster, entre plusieurs groupes d'utilisateurs
Libérez tout le potentiel de Kubernetes grâce à ce cours immersif et pratique, conçu pour les développeurs, ingénieurs DevOps et professionnels IT. « Les Fondamentaux Ultimes de Kubernetes – Laboratoires Pratiques » vous guide pas à pas, à travers des environnements réels, pour déployer, gérer et dépanner des applications conteneurisées modernes.
À travers des laboratoires guidés, vous comprendrez en profondeur l’architecture de Kubernetes, y compris les Pods, Deployments, ReplicaSets, Services, ConfigMaps et Secrets. Vous explorerez l’isolation via les Namespaces, la surveillance des ressources et le scaling des applications, tout en apprenant à exposer des applications de manière sécurisée avec des Ingress Controllers et le TLS.
Vous travaillerez avec les StatefulSets, DaemonSets, Jobs, Volumes, et le provisionnement dynamique de volumes avec les StorageClasses et PersistentVolumeClaims. Mettez en pratique vos connaissances à travers des projets concrets comme le déploiement d’un Guestbook PHP avec MongoDB et la création d’une application de collecte de visiteurs d’un site web.
Que vous prépariez une certification ou gériez des clusters en production, ce cours vous fournit les compétences pratiques indispensables. Chaque leçon est appuyée par des explications claires et des exercices réels — pas de théorie inutile, juste de la maîtrise concrète de Kubernetes.
Chaque chapitre est suivi d'une vingtaine de questions pour vous assurer de le maîtriser avant de passer au chapitre suivant.
Apprenez Kubernetes comme il se doit : en pratiquant.