Premiers pas avec Kubernetes : une introduction pour les débutants
Kubernetes est un logiciel libre très répandu, conçu pour automatiser le développement d'applications conteneurisées.
Une étude annuelle de la Cloud Native Computing Foundation (CNCF) révèle que 96% des entreprises utilisent ou envisagent d'utiliser Kubernetes (K8). On estime à 5,8 millions le nombre de développeurs utilisant Kubernetes à l'échelle mondiale, ce qui représente 31% des développeurs backend dans le monde.
Kubernetes est privilégié pour sa capacité à optimiser l'évolutivité, la disponibilité et à réduire les délais de déploiement. Alors que de nombreux développeurs se familiarisent avec la conteneurisation via Docker (un outil s'appuyant sur une interface en ligne de commande pour gérer les conteneurs individuellement), K8s propose des abstractions de niveau supérieur pour définir les applications et leur infrastructure via des configurations, facilitant ainsi la collaboration.
Si vous débutez avec Kubernetes, cet article est spécialement conçu pour vous guider, vous introduire et vous fournir les informations essentielles pour démarrer. Vous découvrirez comment K8s peut vous aider à optimiser vos produits numériques en tant que développeur.
Qu'est-ce que Kubernetes et pourquoi est-ce utile ?
Kubernetes est un framework open source d'orchestration servant à automatiser le déploiement, la mise à l'échelle et la gestion des applications conteneurisées, tout en assurant leur prévisibilité et leur disponibilité.
Pour illustrer, prenons l'exemple d'une application que vous avez conteneurisée. Pour servir les utilisateurs, vous devez exécuter plusieurs instances de cette application. Le défi est de gérer tous ces conteneurs, surtout s'ils ne sont pas sur la même machine. Quelle solution ?
Kubernetes apporte une solution en permettant une gestion efficace et transparente de ces processus. Contrairement à un moteur de conteneur comme Docker, K8s est un orchestrateur de conteneurs. En tant que développeur débutant, vous n'avez pas à vous soucier du fonctionnement interne de l'orchestration. Il est peu probable que vous configuriez vous-même un cluster K8s pour votre application ; nous y reviendrons plus tard.
Cependant, vous interagirez avec les clusters configurés par votre équipe d'infrastructure. Il est crucial de se familiariser avec les éléments avec lesquels vous allez interagir. Mais avant cela, une compréhension générale de son architecture est nécessaire pour saisir ce qui se passe en arrière-plan.
Fonctionnalités de Kubernetes
Kubernetes offre une variété de fonctionnalités pour l'exécution de conteneurs et la gestion de l'infrastructure associée. En voici une liste :
- Déploiements, mise à l'échelle et restauration automatisés : K8s automatise la création du nombre spécifié de répliques, les distribue sur l'infrastructure appropriée et réorganise les conteneurs en cas de défaillance d'un nœud. Vous pouvez ajuster instantanément le nombre de répliques en fonction de la demande ou des besoins changeants, comme l'utilisation du processeur.
- Découverte de services, répartition de charge et accès réseau : Kubernetes offre une solution de mise en réseau complète, incluant la découverte de services internes et l'exposition de conteneurs publics.
- Applications avec et sans état : Initialement, K8s se concentrait principalement sur les conteneurs sans état. Cependant, avec l'évolution de la technologie, il prend désormais en charge des objets intégrés représentant des applications avec état. Toute application peut ainsi être exécutée sur Kubernetes.
- Gestion du stockage : Que le stockage soit local, en réseau ou dans le cloud, Kubernetes fournit un stockage persistant (abstrait) aux applications conteneurisées. Cette abstraction permet de définir les exigences de stockage indépendamment de l'infrastructure sous-jacente. Cela fonctionne via des principes tels que le volume persistant (PV), la revendication de volume persistant (PVC), les classes de stockage et les plug-ins de volume.
- État déclaratif : K8s utilise des fichiers YAML (Yet Ain't Markup Language), appelés manifestes d'objets, pour spécifier l'état souhaité du cluster. Les manifestes définissent l'apparence du cluster, y compris les instances d'application, les règles de mise en réseau et autres configurations. K8s gère automatiquement les transitions d'état, sans qu'il soit nécessaire d'écrire de scripts.
- Environnements de travail multiples : Kubernetes n'est pas limité à une utilisation dans le cloud ou sur votre poste de travail. Presque toutes les distributions sont disponibles pour s'adapter à vos besoins spécifiques. Les principaux fournisseurs de cloud comme Amazon Web Services, Google Cloud et Microsoft Azure proposent des services Kubernetes gérés, tandis que des distributions à nœud unique comme Minikube et K3s sont disponibles pour un usage local.
- Extensibilité : K8s est un ensemble de nombreuses fonctionnalités, et il est possible d'augmenter ses capacités via des extensions. Vous pouvez créer des types d'objets, des opérateurs et des contrôleurs personnalisés pour optimiser vos charges de travail.
Architecture Kubernetes
L'architecture de base de Kubernetes comprend un nœud maître et plusieurs nœuds de travail. Le nœud maître coordonne le cluster, tandis que les nœuds de travail exécutent les applications selon les directives du maître.
Source : kubernetes.io
Voici une description plus détaillée :
Le(s) nœud(s) maître(s)
Le nœud maître gère l'état du cluster et décide des actions à entreprendre par chaque nœud. Plusieurs processus sont nécessaires pour configurer un nœud maître :
- Serveur API : C'est le centre de toutes les communications du cluster. Il agit comme une passerelle pour l'échange d'informations entre tous les composants et expose l'API Kubernetes. Il joue deux rôles principaux : un point d'entrée pour les utilisateurs qui interagissent avec le cluster, par exemple via Kubectl, et un contrôle d'accès pour l'authentification et la validation des requêtes. Seuls les utilisateurs autorisés peuvent exécuter des requêtes.
- Planificateur : Le planificateur affecte les applications ou les charges de travail Kubernetes aux nœuds de travail en fonction de leurs besoins en ressources. Les pods, qui sont les plus petites unités de déploiement dans Kubernetes, sont placés sur les nœuds par le planificateur.
- Gestionnaire de contrôleur : Cette unité gère le cluster, en traitant notamment les défaillances de nœuds pour maintenir le nombre correct de pods. Il détecte les changements d'état du cluster et tente de restaurer les pods à leur état d'origine. Par exemple, si un pod est supprimé accidentellement, le gestionnaire de contrôleur demande au planificateur de lancer un nouveau pod de remplacement. Kubelet est ensuite responsable du lancement de ce nouveau pod.
- etcd : Également considéré comme le "cerveau" du cluster, etcd est un magasin de clés-valeurs qui stocke la configuration du cluster. Tous les changements du cluster sont enregistrés ici. En sauvegardant ce magasin, vous pouvez sauvegarder le cluster. Il est important de noter que seules les données d'état du cluster sont stockées ici, et non les données des applications. Cette unité sert à conserver les informations sur l'état du cluster et à les utiliser pour les processus précédents.
Le(s) nœud(s) esclave(s)
Chaque nœud esclave comporte trois processus qui permettent à K8s d'interagir avec lui et d'exécuter les pods séparément. Ces processus sont :
- Kubelet : C'est le service principal de Kubernetes qui gère l'exécution des conteneurs. Sans cette unité, Kubernetes n'est qu'une API REST reposant sur un magasin de clés-valeurs. K8s exécute les applications conteneurisées. Les conteneurs sont isolés entre eux et du système hôte, permettant de séparer la gestion des applications de l'infrastructure sous-jacente.
Bien que le contrôle d'admission de l'API puisse rejeter des pods ou ajouter des contraintes, kubelet est le responsable de l'exécution des pods sur un nœud spécifique. Pour résumer, les kubelets interagissent avec le nœud et le conteneur. Ils utilisent des fichiers de configuration et lancent les pods via l'environnement d'exécution du conteneur.
- Exécution du conteneur : Cette section exécute les conteneurs, utilisant par exemple Docker, rkt ou containerd.
- Proxy Kube : Cette unité fournit une couche d'abstraction pour les groupes de pods, en gérant notamment la répartition de charge. Tous les nœuds appliquent Kube-proxy pour fournir une adresse IP virtuelle aux clients accédant aux pods dynamiques, permettant ainsi un équilibrage de charge efficace.
Comment fonctionne la conteneurisation
La conteneurisation implique la virtualisation des éléments nécessaires d'une application logicielle dans une seule unité. Les conteneurs contiennent les bibliothèques, les binaires et toutes les configurations d'application nécessaires, mais n'incluent pas les ressources du noyau ni le matériel virtualisé.
Les environnements d'exécution de conteneurs sont exécutés "au-dessus" du système, décrivant les ressources. Les conteneurs ne comprenant que les composants de base et les dépendances des applications, ils sont légers et rapides, contrairement aux machines virtuelles.
À lire également : Conteneurs vs Machines virtuelles : explication des différences
Comment installer et configurer Kubernetes
Après cette partie théorique, passons à la pratique, en installant Kubernetes sur un système d'exploitation Windows. Cette installation peut être effectuée en utilisant la ligne de commande ou l'interface graphique, mais assurez-vous de respecter les spécifications requises.
Votre matériel a besoin d'un nœud maître avec au moins 2 Go de mémoire et de 700 Mo pour le nœud de travail. Côté logiciel, Hyper-V, Docker Desktop, une adresse MAC unique et un UUID de produit unique pour chaque nœud sont requis. Voici les étapes à suivre :
Installation et configuration d'Hyper-V
Hyper-V est le logiciel de virtualisation de Windows. Il vous permet de gérer les machines virtuelles via l'interface graphique ou la ligne de commande. Pour activer Hyper-V, suivez ces étapes :
- Ouvrez le Panneau de configuration.
- Cliquez sur "Programmes".
- Sous la page Programmes et fonctionnalités, cliquez sur "Activer ou désactiver des fonctionnalités Windows".
- Sélectionnez les fonctionnalités Hyper-V et Hyperviseur pour Windows.
- Cliquez sur "OK". Votre ordinateur redémarrera pour activer les nouveaux paramètres.
Votre PC peut redémarrer plusieurs fois. Pour vérifier l'installation, saisissez la commande suivante dans PowerShell :
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V
Confirmez que "Activé" apparaît à l'écran.
Installation de Docker
Comme vous l'avez appris, K8s est un outil d'orchestration construit au-dessus des conteneurs. Docker est un bon choix. K8s communique avec Docker et gère les applications au niveau de l'entreprise. Téléchargez Docker pour Windows. Docker Desktop simplifie le développement, l'expédition et l'exécution des applications dockerisées (conteneurisées).
C'est également le moyen le plus rapide de créer des applications Docker sur Windows via Hyper-V. Après l'installation, Docker est accessible sur n'importe quel terminal lorsqu'il est en cours d'exécution. Pour un guide détaillé sur l'installation, vous pouvez consulter la documentation officielle de Docker. Redémarrez votre ordinateur en cas de problème (par exemple, des icônes masquées).
Installation de Kubernetes
L'interface graphique de Docker vous permet de configurer, d'installer et d'activer Kubernetes. Voici les étapes à suivre :
- Cliquez avec le bouton droit sur l'icône Docker dans la barre d'état et sélectionnez "Propriétés".
- Sélectionnez "Paramètres" dans le menu déroulant.
- Dans le panneau de gauche, choisissez "Kubernetes" et cliquez sur "Appliquer".
Docker installera ensuite les packages et les dépendances supplémentaires. Le processus prend entre cinq et dix minutes. Vous pouvez utiliser l'application Docker pour vérifier que tout fonctionne correctement.
Les applications Kubernetes pouvant être déployées via la ligne de commande, vous devrez installer le tableau de bord K8s (non installé par défaut). Suivez les étapes suivantes :
- Téléchargez la configuration YAML.
- Déployez l'application via la commande : Kubectl apply -f .recommended.yaml.
- Confirmez l'installation via la commande : kubectl.exe get -f .recommended.yaml.txt.
Pour accéder au tableau de bord, exécutez la commande suivante dans PowerShell :
- Exécutez le code suivant : ((kubectl -n kube-system describe secret default | select-string "token:") -split " ")[1]
- Copiez le jeton généré et exécutez le proxy kubectl.
- Ouvrez ce lien dans votre navigateur.
- Cliquez sur `Token` et collez votre jeton ici.
- Connectez-vous.
Votre tableau de bord K8s devrait s'afficher. Vous pouvez désormais gérer vos applications sans utiliser la ligne de commande.
À lire également : Comment installer Kubernetes sur Ubuntu 18
Comment créer et gérer un cluster Kubernetes
Si vous êtes arrivé jusqu'ici, vous avez installé Kubernetes. Voici les étapes pour créer et gérer votre cluster :
- Configurer la mise en réseau : Configurez le réseau entre les nœuds du cluster pour qu'ils puissent communiquer.
- Configurer l'authentification du cluster : Créez les mécanismes d'authentification et d'autorisation pour accéder au cluster.
- Configurer les composants principaux : Mettez en place le serveur d'API, le planificateur et le gestionnaire de contrôleur.
- Joindre les nœuds de travail : Connectez les nœuds de travail au cluster via les fichiers de configuration.
- Déployer des modules complémentaires : Installez des extensions pour améliorer les fonctionnalités du cluster.
- Gérer les charges de travail : Déployez vos applications.
Il s'agit d'un aperçu du processus de création de cluster, qui implique de nombreuses commandes. Consultez la documentation officielle pour créer des clusters avant de les déployer. C'est votre guide de référence.
Comment déployer votre première application à l'aide de Kubernetes
La commande la plus utilisée est `kubectl`, qui vous permet d'effectuer des actions telles que la création ou la suppression d'une ressource.
Si vous êtes bloqué, utilisez `--help` après une sous-commande pour obtenir plus d'informations.
Par exemple, `Kubernetes get nodes --help`. Pour déployer votre première application, utilisez la commande : `kubectl create deployment Kubernetes-bootcamp --image=gcr.io/google-samples/Kubernetes-bootcamp:v1`.
Pour conclure
Ce guide est une introduction à Kubernetes. Vous avez découvert les avantages, les fonctionnalités et l'architecture de Kubernetes, ainsi que la façon dont les choses fonctionnent. Il vous a fallu consulter des ressources externes pour démarrer.
Bien que la compréhension de la pile technologique puisse sembler difficile pour un débutant, cet article est un guide simple pour vous familiariser avec K8s. La pratique est essentielle, consultez la documentation officielle de Kubernetes pour vous aider. Plus vous pratiquerez, plus vite vous deviendrez un expert de K8.
Ensuite, consultez les tutoriels Kubernetes pour les débutants pour approfondir vos connaissances.