De Hello Minikube à Kubernetes Anywhere aux exemples d’applications microservices, les possibilités d’apprendre l’outil d’orchestration de conteneurs de Google et de débuter avec Kubernetes ne manquent pas.
Chaque innovation entraîne de nouvelles complications. Les conteneurs permettent de packager et d’exécuter les applications dans un format pratique et portable. Cependant, la gestion des conteneurs à l’échelle est pour le moins difficile.
Kubernetes est le produit du travail effectué en interne par Google pour résoudre ce problème. Il fournit un framework qui permet de gérer la manière dont les conteneurs sont gérés sur un cluster entier. Les services proposés sont généralement regroupés sous le terme générique d’orchestration. Cela couvre de nombreux domaines :
- Planification des conteneurs,
- Découverte de services entre conteneurs,
- Équilibrage de la charge sur plusieurs systèmes,
- Mises à jour et restaurations en continu,
- Haute disponibilité, etc
Dans ce guide, vous allez apprendre à débuter avec Kubernetes. En effet, nous allons expliquer les bases de la configuration de Kubernetes et de son utilisation avec des applications basées sur des conteneurs. Il ne s’agit pas d’une introduction aux concepts de Kubernetes. C’est plutôt une manière de montrer comment ces concepts sont réunis dans des exemples simples d’exécution de Kubernetes.
À lire aussi
Utiliser une distribution Kubernetes
À l’origine, Kubernetes permet de gérer les conteneurs Linux. Cependant, à partir de Kubernetes 1.5, Kubernetes prend également en charge les conteneurs Windows Server, bien que le plan de contrôle de Kubernetes doive continuer à s’exécuter sur Linux. Bien sûr, avec la virtualisation, vous pouvez utiliser Kubernetes sur n’importe quelle plate-forme.
Si vous choisissez de débuter avec Kubernetes en l’exécutant sur votre propre matériel ou sur des machines virtuelles, la méthode courante pour ce faire consiste à obtenir une distribution Kubernetes packagée. Celle-ci combine généralement les bits Kubernetes en amont avec d’autres éléments (registre de conteneur, réseau, stockage, sécurité, journalisation, surveillance, pipeline d’intégration continue, etc.).
Ces derniers sont nécessaires à un déploiement complet. De plus, il est possible d’installer et d’exécuter les distributions Kubernetes dans toute infrastructure de machine virtuelle : Amazon EC2, Azure Virtual Machines, Google Compute Engine, OpenStack, etc.
Canonical Kubernetes, Cloud Foundry Container Runtime, Mesosphere Kubernetes Service, Oracle Linux Container Services, Pivotal Container Service, Rancher, Red Hat OpenShift et Suse CaaS Platform sont quelques-unes des nombreuses distributions Kubernetes disponibles. Notez que les Canonical, Red Hat et Suse combinent Kubernetes avec une distribution Linux. Cela vous évite de configurer Kubernetes sur un système d’exploitation donné, non seulement le processus de téléchargement et d’installation, mais aussi une partie du processus de la configuration et de la gestion.
Exécuter Kubernetes sur une distribution Linux classique
Pour débuter avec Kubernetes, une autre méthode consiste à l’exécuter sur une distribution Linux classique. Cependant, cela se traduit généralement par plus de frais généraux pour la gestion et les manipulations manuelles.
À titre d’exemple, Kubernetes dans Red Hat Enterprise Linux, dans son référentiel de packages, mais même Red Hat recommande son utilisation uniquement à des fins de test et d’expérimentation. Au lieu d’essayer de faire les choses manuellement, il est recommandé aux utilisateurs de la pile Red Hat d’utiliser Kubernetes via OpenShift PaaS, étant donné qu’OpenShift utilise désormais Kubernetes comme son propre orchestrateur natif.
De nombreuses distributions Linux classiques fournissent des outils spéciaux pour configurer Kubernetes et d’autres piles logicielles volumineuses. Ubuntu, par exemple, offre un outil appelé Conjure-Up. Celui-ci permet de déployer la version en amont de Kubernetes sur des instances cloud et Bare-Metal. Canonical propose également MicroK8, une version de Kubernetes qui s’installe via le système de packages Snap.
Utiliser un service Kubernetes dans le cloud
Sur Google Cloud
Kubernetes est disponible en tant qu’élément standard dans de nombreux clouds. Ceci étant, il apparait de manière très visible en tant que fonctionnalité native de Google Cloud Platform (GCP). GCP offre deux façons principales d’exécuter Kubernetes. Le moyen le plus pratique et le plus étroitement intégré consiste à utiliser Google Kubernetes Engine. Cela vous permet d’exécuter les outils de ligne de commande de Kubernetes pour gérer le cluster créé.
Vous pouvez également utiliser Google Compute Engine pour configurer un cluster de calcul et déployer Kubernetes manuellement. Cette méthode nécessite davantage de travail. Cependant, il permet des personnalisations qui sont impossibles avec Container Engine.
Quoi qu’il en soit, utilisez Container Engine si vous n’êtes pas familier avec les conteneurs ou que vous débutez avec Kubernetes. Plus tard, vous le maîtriserez mieux et vous souhaiterez essayer quelque chose de plus avancé. Dans ce cas, vous pourrez essayer la version personnalisée de Kubernetes ou vos propres modifications. Vous pourrez aussi déployer des ordinateurs virtuels exécutant une distribution Kubernetes.
Sur AWS
Avec Amazon, il fallait à l’origine exécuter Kubernetes en déployant un cluster de calcul dans EC2. C’est toujours une option, mais Amazon propose désormais Elastic Container Service pour Kubernetes (EKS).
Avec EKS, Amazon exécute le plan de contrôle. Puis, vous vous concentrez sur le déploiement des conteneurs que vous utiliserez avec la configuration souhaitée. EKS exécute également une édition standard en amont de Kubernetes. Une fonctionnalité intelligente est l’intégration de Kubernetes avec le reste du portefeuille AWS.
Les services AWS apparaissent dans EKS en tant que définitions de ressources personnalisées natives pour Kubernetes. Ainsi, toute modification apportée à AWS ou à Kubernetes ne rompra pas ces connexions.
Provisioner un cluster Kubernetes
Pour bien débuter avec Kubernetes, des instructions détaillées accompagnent de nombreuses distributions Kubernetes pour la configuration sur AWS et ailleurs. Par exemple, Red Hat OpenShift peut être installé sur un ou plusieurs hébergeurs via un programme d’installation interactif ou un script, ou à l’aide de l’outil de provisioning Terraform « infrastructure en tant que code ».
L’outil Kops de Kubernetes peut également être utilisé pour provisionner un cluster de machines virtuelles génériques sur AWS, avec prise en charge de Google Cloud Engine, VMware vSphere et d’autres clouds.
Microsoft Azure prend en charge Kubernetes via le service Azure Kubernetes. En effet, Azure gère les nœuds maîtres Kubernetes. Mais, vous créez les clusters via des modèles Resource Manager ou Terraform. Si vous souhaitez contrôler les nœuds maîtres et l’agent, vous pouvez toujours installer une distribution Kubernetes sur une machine virtuelle Azure. Cela dit, l’un des principaux avantages d’AKS est que vous ne payez pas pour l’utilisation du nœud principal, mais uniquement des agents.
Un moyen rapide de provisionner un cluster Kubernetes de base dans divers environnements, dans le cloud ou non, consiste à utiliser un projet appelé Kubernetes Anywhere. Ce script fonctionne sur Google Compute Engine, Microsoft Azure, VMware vSphere (vCenter est requis) et OpenStack. Dans chaque cas, Kubernetes Anywhere fournit un certain degré d’automatisation pour la configuration.
Utiliser Minikube pour exécuter Kubernetes localement
Si vous n’exécutez Kubernetes que dans un environnement local tel qu’une machine de développement et que vous n’avez pas besoin de l’intégralité de Kubernetes, il existe différentes manières de configurer Kubernetes, « juste le nécessaire » pour une telle utilisation.
L’un des outils fournis par l’équipe de développement de Kubernetes est Minikube. Exécutez-le et vous obtiendrez un cluster Kubernetes à nœud unique déployé dans un hébergeur de virtualisation de votre choix. Minikube a quelques prérequis, mais ils sont tous assez faciles à respecter sous MacOS, Linux ou Windows.
Lancer une application de démonstration
Une fois que vous avez exécuté Kubernetes, vous êtes prêt à commencer à déployer et à gérer les conteneurs. Vous pouvez vous lancer dans les opérations en mode conteneur. Pour ce faire, basez-vous sur l’une des nombreuses démos d’applications disponibles basées sur un conteneur.
Prenez une démo d’application existante basée sur un conteneur. Ensuite, assemblez-la vous-même pour voir comment elle est composée. Déployez-la, puis modifiez-la progressivement jusqu’à ce qu’elle approche de quelque chose d’utile. Si vous avez choisi Minikube pour trouver votre équilibre, vous pouvez utiliser le tutoriel Hello Minikube.
Cela vous permet de créer un conteneur Docker contenant une application Node.js simple dans une installation de démonstration Kubernetes à un seul nœud. Une fois que vous avez eu l’idée, vous pouvez échanger vos propres conteneurs. Puis, vous pouvez aussi vous entraîner à les déployer.
La prochaine étape pour débuter avec Kubernetes consiste à déployer un exemple d’application. Cela doit ressembler à celui que vous utilisez peut-être en production. Vous devez aussi vous familiariser avec les concepts Kubernetes plus avancés. Ce sont :
- Les pods : un ou plusieurs conteneurs comprenant une application,
- Les services : ensembles logiques de pods,
- Les ensembles de réplicas : pour permettre l’auto-réparation en cas de panne d’ordinateur
- Les déploiements : versioning des applications.
Exemples de déploiement des éléments dans Kubernetes
Prenez l’exemple d’application WordPress/MySQL. Vous verrez plus que de simples instructions sur la manière de déployer les éléments dans Kubernetes et de les faire fonctionner. Il y aura aussi des détails sur la mise en œuvre de nombreux concepts utilisés par les applications Kubernetes au niveau de production. Vous apprendrez à configurer des volumes persistants. Cela vous aidera à préserver l’état d’une application et à exposer des pods entre eux et au monde extérieur par le biais de services, à stocker des mots de passe d’application et des clés d’API de manière secrète, etc.
Weaveworks propose un exemple d’application, Sock Shop. Celui-ci montre comment utiliser un modèle de microservices pour composer une application dans Kubernetes. Sock Shop sera particulièrement utile à ceux qui sont familiers aux technologies sous-jacentes. Ce sont Node.js, Go Kit et Spring Boot.
Cependant, les principes fondamentaux sont censés transcender les infrastructures en particulier et illustrer les technologies natives du cloud.
Si vous avez jeté un coup d’œil sur l’application WordPress/MySQL, vous avez imaginé qu’il existe déjà une application Kubernetes prête à répondre à vos besoins. En effet, vous avez probablement raison. Kubernetes dispose d’un système de définition d’application appelé Helm. Cela permet de packager, de versionner et de partager des applications Kubernetes.
Un certain nombre d’applications populaires (GitLab, WordPress) et de blocs de construction d’applications (MySQL, Nginx) ont des « graphiques » Helm. Ils sont facilement disponibles via le portail Kubeapps.
Apprendre à gérer les conteneurs
Kubernetes simplifie la gestion des conteneurs à partir des abstractions puissantes telles que des pods et des services. Il offre une grande flexibilité grâce à des mécanismes tels que les étiquettes et les espaces de noms. Ces derniers permettent de séparer les pods, les services et les déploiements (tels que les charges de travail du développement, du transfert et de production).
Si vous prenez l’un des exemples ci-dessus et configurez différentes instances dans plusieurs espaces de noms, vous pourrez ensuite vous entraîner à modifier les composants de chaque espace de noms indépendamment des autres. Vous pouvez ensuite utiliser des déploiements. Cela permet à ces mises à jour d’être déployées au fur à mesure sur des pods dans un espace de noms donné.
Quelle est la prochaine étape ?
L’étape suivante consiste à apprendre comment piloter Kubernetes par des outils de gestion d’infrastructure. Par exemple, Puppet possède un module pour créer et manipuler des ressources dans Kubernetes.
De même, Terraform de HashiCorp bénéficie d’une assistance pour Kubernetes en tant que ressource. Si vous envisagez d’utiliser un tel gestionnaire de ressources, notez que différents outils peuvent apporter des hypothèses très différentes à la table. Par exemple, Puppet et Terraform utilisent par défaut des infrastructures mutables et immuables. Ces différences philosophiques et de comportement peuvent déterminer la facilité ou la difficulté de créer la configuration Kubernetes dont vous avez besoin.