Subscribe to my channel https://t.me/zufarexplained
Walkthroughs, tutorials, guides, and tips. This story will teach you how to do something new or how to do something better.
This story contains new, firsthand information uncovered by the writer.
Dans mon article précédent, j'ai plongé dans le monde fascinant des microservices - Modèles d'architecture de microservices, partie 1 : Modèles de décomposition . C'était le début de ma série complète d'articles sur les microservices et leurs modèles.
Bien que l'étape logique serait de continuer avec la partie 2 de cette série, j'ai décidé que la prochaine chose que j'aimerais explorer et vous parler est le processus vital de fourniture transparente de ces microservices à l'utilisateur final.
CI/CD est une technique permettant de fournir des applications aux clients, obtenue en ajoutant l'automatisation aux différentes étapes du développement des applications. Je pense que comprendre le CI/CD (Intégration continue et déploiement continu) peut permettre aux développeurs de mieux comprendre comment les artefacts du projet backend existent au-delà des limites du référentiel du projet. Cette compréhension peut également créer un changement fondamental dans la perspective d'un développeur. Au lieu de simplement considérer leur travail comme des lignes de code, ils peuvent commencer à considérer le contexte plus large de leur projet comme un produit de valeur.
Dans cet article, nous visons à démystifier le processus CI/CD grâce à une application pratique. Nous vous guiderons à travers un didacticiel étape par étape, le décomposant module par module, où vous créerez manuellement un pipeline CI/CD. Pour ce faire, nous exploiterons la puissance des outils DevOps contemporains tels qu'AWS, Docker, Kubernetes, Ansible, Git, Apache Maven et Jenkins . Alors commençons ce voyage !
Ce module est dédié à la création d'une instance de serveur virtuel AWS EC2. Dans le cadre de cet article, vous allez configurer trois instances EC2 pour Jenkins, Ansible et Kubernetes. Pour l'instant, vous pouvez passer aux modules suivants et revoir ce module dans les sections « [module 2] : Jenkins », « [module 6] : Ansible » et « [module 7] : Kubernetes ».
Accédez à https://aws.amazon.com.
Cliquez sur le bouton Créer un compte AWS .
La capture d'écran de la page Web principale d'AWS avec le pointeur vers le bouton « Créer un compte AWS »
Suivez les instructions sur la page Web de création de compte.
Accédez à https://console.aws.amazon.com/console/home. Cliquez sur le bouton Se connecter .
La capture d'écran de la page Web principale d'AWS avec le pointeur vers le bouton « Connexion »
Entrez toutes les informations d'identification nécessaires sur cette page Web.
Recherchez EC2 dans la zone de recherche.
La capture d'écran de la page Web AWS avec le pointeur vers le champ de recherche
Choisissez Serveur virtuel EC2 en cliquant sur Service EC2 .
La capture d'écran de la page Web AWS avec le pointeur vers le service AWS « EC2 »
Cliquez sur le bouton Lancer l'instance .
La capture d'écran de la page Web AWS avec le pointeur vers le bouton « Lancer l'instance »
Accédez à la section « Nom et tags » .
La capture d'écran de la page Web AWS avec le pointeur vers la section « Nom et balises »
Fournissez un nom pour une nouvelle instance de serveur virtuel AWS EC2 dans la section « Nom » .
La capture d'écran de la page Web AWS avec le pointeur vers la zone de saisie « Nom » dans la section « Nom et balises »
Vous pouvez également ajouter des balises supplémentaires pour votre serveur virtuel en cliquant sur « Ajouter des balises supplémentaires » .
Accédez à la section « Images d'application et de système d'exploitation (Amazon Machine Image) » .
La capture d'écran de la page Web AWS avec le pointeur vers la section « Images d'application et de système d'exploitation (Amazon Machine Image) »
Pour jouer GRATUITEMENT avec le serveur virtuel :
Capture d'écran de la page Web AWS avec le pointeur vers les boutons « OS » et « Type de machine » dans la section « Images d'application et de système d'exploitation (Amazon Machine Image) »
Allez dans la section « Type d'instance » .
La capture d'écran de la page Web AWS avec le pointeur vers la section « Type d'instance »
Pour jouer GRATUITEMENT avec le serveur virtuel :
Sélectionnez un type avec la balise éligible à l'offre gratuite dans la section Type d'instance .
Pour moi, c'est t2.micro (Family: t2 1cCPU 1 GiB Memory Current Generation:true) .
La capture d'écran de la page Web AWS avec le pointeur vers la liste déroulante « Type d'instance » dans la section « Type d'instance »
Accédez à la section « Configurer le stockage » .
La capture d'écran de la page Web AWS avec le pointeur vers la section « Configurer le stockage »
Pour jouer GRATUITEMENT avec le serveur virtuel :
Ne modifiez pas les paramètres par défaut. Les clients éligibles au niveau gratuit peuvent obtenir 30 Go de stockage EBS à usage général (SSD) ou magnétique .
La capture d'écran de la page Web AWS avec le pointeur vers les configurations possibles de stockage dans la section « Configurer le stockage »
Accédez à la section « Paramètres réseau » .
La capture d'écran de la page Web AWS avec le pointeur vers la section « Paramètres réseau »
Vous devez configurer la sécurité de votre serveur virtuel. Pour faire ça,
Par défaut, votre serveur virtuel est accessible via ( Type - SSH, Protocole - TCP, Port - 22 ). Si vous avez besoin de types de connexion supplémentaires, ajoutez-les en ajoutant des règles de groupe de sécurité entrantes supplémentaires.
La capture d'écran de la page Web AWS avec le pointeur vers « Groupe de sécurité » dans la section « Paramètres réseau »
Rendez-vous dans la section « Bi-clé (Connexion) » .
La capture d'écran de la page Web AWS avec le pointeur vers la section "Ket pair (login)"
Créez une nouvelle paire de clés si vous ne l'avez pas encore créée.
La capture d'écran de la page Web AWS avec le pointeur vers « Nom de la paire de clés », « Type de paire de clés », « Format de fichier de clé privée » dans la section « Paire de clés (connexion) »
Si vous n'avez pas encore créé de « paire de clés » :
Lancez l'instance du serveur virtuel EC2 en cliquant sur le bouton « Lancer l'instance » .
La capture d'écran de la page Web AWS avec le pointeur vers le bouton « Lancer l'instance »
Une fois le processus de création de l'instance de serveur virtuel EC2 terminé, vous verrez ce qui suit.
La capture d'écran de la page Web AWS affichant une notification « Succès », indiquant la réussite du processus de création de l'instance de serveur virtuel EC2
Ensuite, vous devez vous rendre dans la section « Instances » en cliquant sur le bouton « Afficher toutes les instances » .
La capture d'écran de la page Web AWS avec le pointeur vers l'exécution de l'instance EC2
Vous pouvez maintenant voir que votre instance de serveur virtuel AWS EC2 est en cours d'exécution.
Maintenant, configurons JenkinsServer sur l'instance de serveur virtuel EC2.
Vous avez besoin d'un serveur virtuel pour exécuter Jenkins.
Suivez les instructions de la section [Module 1] : AWS EC2 Virtual Server de ce didacticiel pour terminer cette étape et créer une instance de serveur virtuel EC2 portant le nom JenkinsServer.
N'oubliez pas d'ajouter une configuration de groupe de sécurité. Il permet à Jenkins et SSH de fonctionner respectivement sur les ports 8080 et 22 .
Utilisez le nom « JenkinsServer » pour distinguer votre instance de serveur virtuel EC2.
Créez le groupe de sécurité « CI_CD_Pipeline » et « CI_CD_Pipeline_Key_Pair » pour une nouvelle instance AWS EC2 « JenkinsServer » . Vous pouvez les réutiliser plus loin dans l'article.
Accédez à la page d'accueil de la console AWS → Tableau de bord de la console de gestion EC2 → Instances.
Ensuite, vous devez choisir JenkinsServer puis cliquer sur le bouton « Connecter » .
La capture d'écran de la page Web AWS "Instances" avec le pointeur vers le bouton "Connecter"
Ensuite, vous verrez cette page Web. Vous devez à nouveau cliquer sur le bouton « Connecter » .
La capture d'écran de la page Web AWS « Connecter à l'instance » avec le pointeur vers le bouton « Connecter »
Vous pouvez maintenant voir le terminal en ligne de l'instance de serveur virtuel EC2.
La capture d'écran du terminal en ligne de l'instance AWS EC2 Virtual Server
Vous devez maintenant télécharger Jenkins sur votre instance de serveur virtuel EC2.
Suivez ces instructions :
Accédez à la page Web de téléchargement de Jenkins.
Vous pouvez voir les options de versions stables (LTS) et régulières (hebdomadaires). Choisissez l'option Red Hat/Fedora/Alma/Rocky/CentOS LTS.
Vous verrez cette page Web.
La capture d'écran de la page Web de téléchargement de Jenkins
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
Jenkins est maintenant téléchargé.
Pour terminer l'installation de Jenkins, nous devons importer la clé Jenkins.
Pour importer la clé Jenkins, nous devons copier la commande « sudo rpm.. » et l'exécuter.
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
De cette façon, le gestionnaire de packages « rpm » peut vérifier que les packages Jenkins que vous installez sont exactement ceux publiés par le projet Jenkins, et qu'ils n'ont pas été falsifiés ou corrompus.
Pour exécuter Jenkins, nous devons installer Java sur notre instance de serveur virtuel EC2.
Pour installer Java , utilisez cette commande.
sudo amazon-linux-extras install java-openjdk11 -y
Vérifiez si Java a été installé correctement à l'aide de cette commande :
java -version
Vous verrez quelque chose comme ça.
La capture d'écran du terminal en ligne de l'instance de serveur virtuel AWS EC2 avec JDK 11 installé
Pour exécuter Jenkins, vous devez installer fontconfig sur notre instance de serveur virtuel EC2.
Utilisez cette commande.
sudo yum install fontconfig java-11-openjdk -y
Fontconfig est une bibliothèque conçue pour fournir une configuration, une personnalisation et un accès aux applications à l'échelle du système. C'est requis par Jenkins car Jenkins possède des fonctionnalités qui restituent les polices.
Au cours des étapes précédentes, vous avez configuré votre instance de serveur virtuel EC2 pour utiliser un référentiel Jenkins spécifique, puis vous avez importé la clé GPG associée à ce référentiel. Maintenant, vous devez exécuter la commande qui recherchera tous les référentiels connus, y compris celui de Jenkins que vous avez ajouté, pour trouver le package Jenkins. Une fois qu'il aura trouvé le package Jenkins dans le référentiel Jenkins, il le téléchargera et l'installera.
Exécutons cette commande.
sudo yum install jenkins -y
Vous pouvez démarrer Jenkins en utilisant cette commande.
sudo systemctl start jenkins
Pour vérifier que Jenkins est en cours d'exécution, utilisez cette commande.
sudo systemctl status jenkins
Vous verrez le résultat tel qu'il est sur la capture d'écran ci-dessous :
La capture d'écran du terminal en ligne de l'instance de serveur virtuel AWS EC2 avec Jenkins installé
Jenkins devrait maintenant être opérationnel.
Pour accéder à l'application Jenkins, ouvrez n'importe quel navigateur Web et saisissez l'adresse IP publique ou le nom de domaine de votre instance EC2 suivi du port 8080.
http://<your-ec2-ip>:8080
La première fois que vous accéderez à Jenkins, il sera verrouillé avec un mot de passe généré automatiquement.
La capture d'écran de Jenkins installé sur le serveur virtuel AWS EC2 avec le pointeur vers le mot de passe administrateur
Vous devez afficher ce mot de passe à l'aide de la commande suivante.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Copiez ce mot de passe, revenez à votre navigateur, collez-le dans le champ Mot de passe administrateur et cliquez sur « Continuer ».
Ensuite, vous pourrez voir cette page Web.
La capture d'écran de Jenkins installé sur le serveur virtuel AWS EC2 avec le pointeur vers la page Web « Personnaliser Jenkins »
Maintenant, vous pouvez utiliser votre serveur Jenkins.
Maintenant que Jenkins fonctionne correctement, vous pouvez commencer à créer le pipeline Jenkins. Pour créer un pipeline Jenkins, vous devez créer un nouveau « projet Freestyle ». Pour créer un nouveau « projet Freestyle », vous devez accéder au tableau de bord Jenkins et cliquer sur le bouton « Nouvel élément » .
La capture d'écran de la page Web du tableau de bord Jenkins avec le pointeur vers le bouton "Nouvel élément"
Entrez le nom du « projet Freestyle » Github (le nom du « pipeline » sera utilisé plus loin) puis cliquez sur le bouton « OK » .
La capture d'écran de la page Web du nouvel élément Jenkins avec le pointeur vers la zone d'élément "Nom de l'élément"
Fournissez ensuite la description du pipeline.
La capture d'écran de la page Web de configuration du travail Jenkins avec le pointeur vers la zone de saisie "Description"
Cliquez ensuite sur les boutons « Appliquer » et « Enregistrer ». Après cela, cela signifie que vous avez créé les bases du pipeline qui va être construit dans ce tutoriel.
Maintenant que Jenkins s'exécute sur l'instance de serveur virtuel AWS EC2, vous pouvez configurer Git avec le pipeline.
Git est un système de contrôle de version distribué (VCS) gratuit et open source conçu pour aider les équipes logicielles à suivre chaque modification du code dans un type spécial de base de données. Si une erreur est commise, les développeurs peuvent revenir en arrière et comparer les versions antérieures du code pour aider à corriger l'erreur tout en minimisant les perturbations pour tous les membres de l'équipe. VCS est particulièrement utile pour
Git, en tant que système de contrôle de version le plus populaire, nous permet d'extraire le dernier code du référentiel Github de votre projet vers votre instance de serveur virtuel EC2 sur laquelle votre Jenkins est installé.
Utilisez cette commande pour installer Git.
sudo yum install git -y
Vérifiez maintenant que Git fonctionne à l’aide de cette commande.
git --version
Maintenant, Git fonctionne correctement sur l'instance de serveur virtuel EC2.
Comme Git fonctionne correctement sur l'instance de serveur virtuel EC2, nous pouvons maintenant intégrer Jenkins à Git.
Pour démarrer cette intégration, installons le plugin Jenkins Github.
Accédez à la section du tableau de bord Jenkins.
La capture d'écran du tableau de bord Jenkins
Cliquez sur le bouton « Gérer Jenkins » puis cliquez sur le bouton « Gérer les plugins » .
La capture d'écran du tableau de bord Jenkins avec le pointeur vers le bouton "Gérer les plugins"
Cliquez sur le bouton « Plugins disponibles » .
La capture d'écran de la page Web de Jenkins Plugin Manager avec le pointeur vers le bouton "Plugins disponibles"
Recherchez la zone de recherche du plugin Github .
La capture d'écran de la page Web de Jenkins Plugin Manager avec le pointeur vers le plugin "Github"
Sélectionnez le plug-in Github .
Sélectionnez le plug-in Github . Et puis cliquez sur le bouton « Installer sans redémarrage » .
La capture d'écran de la page Web de Jenkins Plugin Manager avec le pointeur vers le bouton "Installer sans redémarrer"
Attendez la fin du téléchargement du plugin Github.
La capture d'écran de la page Web de Jenkins Plugin Manager avec le téléchargement du plugin Github
Oui! Le plugin Jenkins Github est installé.
Maintenant que le plugin GitHub Jenkins est installé, vous pouvez configurer ce plugin pour enfin intégrer Jenkins à Git. Pour ce faire, vous devez revenir à la page principale en cliquant sur le bouton « Revenir à la page d'accueil ».
La capture d'écran de la page Web de Jenkins Plugin Manager avec le pointeur vers le bouton "Retour à la page d'accueil"
Ensuite, sur la page principale, vous devez cliquer sur le bouton « Gérer Jenkins » puis cliquer sur le bouton « Configuration globale de l'outil » .
La capture d'écran de la page Web de Jenkins Plugin Manager avec le pointeur vers le bouton "Configuration globale de l'outil"
Ensuite, sur la page Web Global Tool Configuration, vous devez accéder à la section Git.
La capture d'écran de la page Web de configuration globale de Jenkins avec le pointeur vers les zones de saisie "Nom" et "Chemin d'accès à l'exécutable Git".
Dans la section Git, vous devez configurer Git en fournissant le nom et le chemin d'accès à Git sur l'ordinateur.
Cliquez ensuite sur les boutons « Appliquer » et « Enregistrer » **.**
Ici, vous avez terminé de configurer le plugin Jenkins Github.
Maintenant que le plugin Jenkins Github est installé et configuré, vous pouvez désormais utiliser ce plugin dans votre pipeline. Cela permettra à votre pipeline que vous avez créé dans le module 2 d'extraire le code de votre projet du référentiel GitHub spécifié.
Eh bien, pour intégrer ce plugin dans votre pipeline, vous devez vous rendre dans la section Gestion du code source et choisir Git dans votre pipeline. Ensuite, vous devez fournir l'URL du référentiel de votre projet. Si le référentiel de votre projet est public sur Github, vous n'avez pas besoin de fournir d'informations d'identification. Si le référentiel du projet est privé sur Github, vous devez fournir des informations d'identification.
La capture d'écran de la page Web de configuration du travail Jenkins avec les paramètres « Gestion du code source »
Vous pouvez utiliser mon projet avec la prochaine URL du référentiel : https://github.com/Sunagatov/Hello.git .
Copiez-le et collez-le simplement dans l'entrée « URL du référentiel » . Cliquez ensuite sur les boutons « Appliquer » et « Enregistrer » pour terminer l'intégration de Git avec le pipeline.
Vous pouvez désormais utiliser votre pipeline mis à jour pour extraire un projet de Github. Pour ce faire, vous devez cliquer sur le bouton **« Construire maintenant »**. En conséquence, vous verrez une build réussie dans l’historique des builds.
La capture d'écran de la page Web de Jenkins avec des pointeurs vers le bouton « Construire maintenant » et la section « Historique de construction »
Ouvrez la première build à partir de l’historique des builds.
La capture d'écran de Jenkins Pull_Code_From_Github_Job avec un résultat de travail réussi
Vous pouvez maintenant voir le résultat réussi du premier build. Si vous ouvrez votre terminal AWS EC2. Vous pouvez vérifier que le pipeline fonctionne bien.
Utilisez simplement cette commande.
cd /var/lib/jenkins/workspace/{your pipeline name}
De cette façon, vous pouvez voir que votre projet de Github a été transféré vers votre instance de serveur virtuel AWS EC2.
La capture d'écran du projet Github téléchargée dans le terminal d'instance EC2
Apache Maven est un outil d'automatisation de build et de gestion de projet largement utilisé dans le développement de logiciels. Il rationalise le processus de compilation, de test et de packaging du code en gérant les dépendances du projet et en fournissant un cycle de vie de construction cohérent. Maven utilise des fichiers de configuration basés sur XML (fichiers POM) pour définir la structure, les dépendances et les tâches du projet, permettant ainsi aux développeurs de gérer et de déployer efficacement des projets logiciels complexes.
Maintenant que vous avez intégré Git dans le pipeline, vous pouvez améliorer davantage le pipeline en incorporant Apache Maven, qui vous permet de créer, tester et empaqueter votre projet. Pour ce faire, vous devez installer Apache Maven sur votre instance de serveur virtuel AWS EC2 sur laquelle Jenkins et Git ont été installés.
Pour télécharger Apache Maven, allez dans le répertoire «/opt» .
cd /opt
Et puis utilisez cette commande.
sudo wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz
Cette commande téléchargera la dernière version officielle d'Apache Maven (vérifiez la dernière version sur le site officiel d'Apache Maven). Pour trouver la dernière version officielle d'Apache Maven, utilisez le lien https://maven.apache.org/download.cgi .
Utilisez cette commande pour extraire Apache Maven de l'archive téléchargée :
sudo tar -xvzf apache-maven-*.tar.gz
Accédez au dossier racine à l’aide de cette commande.
cd ~
Modifiez le fichier .bash_profile à l'aide de cette commande.
vi .bash_profile
Ajoutez les variables JAVA_HOME et M2_HOME.
Attribuez le chemin d'accès au JDK11 pour JAVA_HOME et le chemin d'accès au répertoire maven pour la variable M2_HOME .
Pour trouver le chemin du JDK, utilisez cette commande.
sudo find / -name java
La capture d'écran de la page Web du terminal d'instance AWS EC2 Virtual Server avec le fichier .bash_profile
Comment utiliser VIM
Enregistrez les modifications.
Ensuite, exécutez cette commande pour actualiser les variables système.
source .bash_profile
Pour vérifier $PATH , utilisez cette commande.
echo $PATH
Pour vérifier Apache Maven , utilisez cette commande.
mvn -v
Si vous avez tout fait correctement, vous pourrez visualiser la version d'Apache Maven.
La capture d'écran de la page Web du terminal d'instance AWS EC2 Virtual Server avec la version d'Apache Maven
Étant donné qu'Apache Maven peut être utilisé sur une instance EC2, vous pouvez installer le plugin Apache Maven pour l'intégrer au pipeline.
Pour y parvenir, suivez ces étapes :
La capture d'écran de Jenkins installé sur le serveur virtuel AWS EC2 avec le pointeur vers le plugin Maven
Attendez la fin du processus de téléchargement.
Et puis cliquez sur le bouton « Revenir à la page d'accueil » .
La capture d'écran de Jenkins installé sur le serveur virtuel AWS EC2 avec le pointeur vers le processus de téléchargement du plugin Maven
Avec l'installation réussie du plugin Apache Maven Jenkins, vous pouvez désormais utiliser ce plugin dans le pipeline que vous avez créé et mis à jour dans les modules 2 et 3.
Pour ce faire, procédez comme suit :
La capture d'écran de Jenkins installé sur AWS EC2 Virtual Server avec le pointeur vers la configuration JDK
Allez ensuite dans la section « Maven » . Cliquez sur le bouton « Ajouter Maven » . Décochez « Installer automatiquement ».
Ajoutez ensuite le nom et le chemin MAVEN_HOME .
La capture d'écran de Jenkins installé sur le serveur virtuel AWS EC2 avec le pointeur vers la configuration d'Apache Maven
Cliquez sur les boutons « Appliquer » et « Enregistrer » .
Ici, vous avez terminé de configurer le plugin Apache Maven Jenkins.
Maintenant que le plugin Apache Maven GitHub est installé et configuré, vous pouvez désormais utiliser Apache Maven dans votre pipeline. Cela permettra à votre pipeline que vous avez créé dans le « [module 2] : Jenkins Server » de construire le code de votre projet pour créer un artefact jar.
Pour intégrer Apache Maven dans le pipeline, vous devez suivre ces étapes :
La capture d'écran de la section « Étapes de construction » dans la configuration du pipeline avec des pointeurs vers les boutons « Appliquer » et « Enregistrer »
Enfin, vous devez cliquer sur les boutons « Appliquer » et « Enregistrer » pour terminer l'intégration d'Apache Maven avec le pipeline.
Vous pouvez désormais utiliser votre pipeline mis à jour pour créer votre projet Github. Pour ce faire, vous devez cliquer sur le bouton **« Construire maintenant »**. En conséquence, vous verrez un résultat de travail réussi dans l’historique de construction.
Si vous ouvrez votre terminal AWS EC2. Vous pouvez vérifier que le pipeline fonctionne bien.
Utilisez simplement cette commande.
cd /var/lib/jenkins/workspace/{your pipeline name}/target
De cette façon, vous pouvez voir l'artefact JAR, indiquant la réussite de la construction de votre projet à partir de GitHub.
Créons maintenant une nouvelle instance EC2 avec le nom « Ansible Server » sur laquelle vous allez installer Docker et Ansible.
Utilisez les instructions de la section « Lancer une instance de serveur virtuel AWS EC2 » de ce didacticiel pour terminer cette étape. N'oubliez pas d'ajouter une configuration de groupe de sécurité. Il permet à Docker et SSH de fonctionner respectivement sur les ports 8080 et 22.
Cliquez sur le bouton « Connecter ».
La capture d'écran de la page Web AWS avec le pointeur vers le bouton « Connecter »
Vous pouvez maintenant voir le terminal en ligne de l'instance de serveur virtuel EC2.
La capture d'écran du terminal en ligne de l'instance AWS EC2 Virtual Server
sudo chown ansible-admin:ansible-admin /opt/docker
Vous devez maintenant installer Docker sur votre instance Ansible EC2. Pour ce faire, vous devez créer un nouveau dossier Docker.
sudo mkdir /opt/docker
Ensuite, installez Docker en exécutant la commande suivante.
sudo yum install docker -y
Vous devez ajouter l'utilisateur actuel « ansible-admin » au groupe Docker sur le serveur virtuel EC2 « AnsibleServer » pour accorder les privilèges d'administrateur Docker.
sudo usermod -a -G docker ansible-admin
Vous devrez vous déconnecter et vous reconnecter pour que ces modifications prennent effet.
Ensuite, vous pouvez exécuter la commande suivante
id ansible-admin
pour voir que le nouvel utilisateur Docker existe.
La capture d'écran de l'instance Ansible EC2 avec le pointeur vers l'utilisateur Docker
Maintenant que Docker est installé sur l'instance Ansible EC2, vous pouvez le lancer en exécutant la commande suivante.
sudo systemctl start docker
Une fois Docker démarré, vous pouvez exécuter la commande suivante
sudo systemctl status docker
pour voir que Docker est actif et fonctionne maintenant.
La capture d'écran de l'instance Ansible EC2 avec le statut du docker actif
Dans la version finale du pipeline, le processus impliquera la création d'une nouvelle image Docker à partir de votre projet GitHub et sa transmission vers Docker Hub. Pour ce faire, votre projet GitHub doit contenir un Dockerfile.
Si vous avez utilisé le projet « Hello » qui était proposé dans le module « [Module 3] : Git et Github » , alors vous n'avez pas besoin de créer un nouveau Dockerfile car ce référentiel de projet contenait déjà Dockerfile.
FROM eclipse-temurin:17-jre-jammy ENV HOME=/opt/app WORKDIR $HOME ADD hello-0.0.1-SNAPSHOT.jar $HOME ENTRYPOINT ["java", "-jar", "/opt/app/hello-0.0.1-SNAPSHOT.jar" ]
Si vous avez utilisé votre propre référentiel de projet et qu'il ne contenait pas de Dockerfile, vous devrez créer un nouveau Dockerfile.
Pour créer un nouveau Dockerfile, exécutez la commande suivante, qui créera le nouveau fichier.
sudo touch Dockerfile
Vous pouvez ensuite remplir ce fichier avec une séquence de commandes décrivant comment créer un environnement d'application conteneurisé. Ces commandes incluent des actions telles que la copie de fichiers dans l'image, l'installation de logiciels, la définition de variables d'environnement et la configuration du conteneur.
Pour remplir le Dockerfile avec ces commandes, exécutez la commande suivante.
vim Dockerfile
Le Dockerfile est prêt à être utilisé.
Maintenant que votre Dockerfile est prêt à être utilisé, copiez l'artefact JAR de votre projet à partir de l'instance EC2 **"JenkinsServer"** et collez-le sur l'instance EC2 "AnsibleServer" . Il est important de noter que ce transfert sera davantage automatisé à travers le pipeline.
En complétant cette étape, vous serez prêt à tester votre Dockerfile ainsi que l'environnement Docker que vous avez configuré.
Avant de commencer les tests, assurez-vous de vous authentifier sur Dockerhub. Exécutez la commande suivante.
docker login
Cette commande vous demandera de fournir vos informations de connexion Dockerhub, y compris votre nom d'utilisateur et votre mot de passe.
La capture d'écran d'une connexion Docker réussie dans l'instance EC2 "AnsibleServer"
Avec cela, vous avez terminé le processus de connexion à Docker et êtes maintenant prêt à procéder aux tests.
Une fois votre connexion réussie à Dockerhub terminée, vous êtes maintenant prêt à commencer à tester le Dockerfile que vous avez préparé.
Exécutez cette commande pour créer une image Docker.
docker build -t hello:latest .
Ensuite, exécutez la commande suivante pour établir une balise qui facilitera le téléchargement de l'image sur Dockerhub :
docker tag hello:latest zufarexplainedit/hello:latest
Enfin, procédez au transfert de l'image Docker vers Dockerhub en exécutant cette commande.
docker push zufarexplainedit/hello:latest
En suivant ces étapes, accédez à votre compte Dockerhub pour vérifier si vous pouvez voir une nouvelle image ou non.
La capture d'écran du compte Dockerhub avec la nouvelle image ajoutée
Vous devriez maintenant constater que l'image a été effectivement ajoutée. Ce résultat confirme la réussite de l'installation de l'environnement Docker et que votre Dockerfile est correct.
Configurons maintenant le serveur Ansible sur l'instance de serveur virtuel EC2.
Vous avez besoin d'un serveur virtuel pour exécuter Ansible.
Suivez les instructions de la section [Module 1] : AWS EC2 Virtual Server de ce didacticiel pour terminer cette étape et créer une instance de serveur virtuel EC2 pour Ansible.
N'oubliez pas d'ajouter une configuration de groupe de sécurité. Il permet à Ansible et SSH de fonctionner respectivement sur les ports 8080 et 22 .
Utilisez le nom « AnsibleServer » pour distinguer votre instance de serveur virtuel EC2.
Vous pouvez réutiliser le groupe de sécurité « CI_CD_Pipeline » et « CI_CD_Pipeline_Key_Pair » pour une nouvelle instance EC2 « AnsibleServer » .
Accédez à la page d'accueil de la console AWS → Tableau de bord de la console de gestion EC2 → Instances → AnsibleServer.
Cliquez ensuite sur le bouton « Connecter » .
La capture d'écran de la page Web AWS avec le pointeur vers le bouton « Connecter »
Ensuite, vous verrez cette page Web. Vous devez à nouveau cliquer sur le bouton « Connecter » .
La capture d'écran de la page Web AWS « Connecter à l'instance » avec le pointeur vers le bouton « Connecter »
Vous pouvez maintenant voir le terminal en ligne de l'instance de serveur virtuel EC2.
La capture d'écran du terminal en ligne de l'instance AWS EC2 Virtual Server
Configurons maintenant Ansible Server sur l'instance de serveur virtuel EC2.
La première chose que vous devez faire lorsque vous souhaitez configurer AnsibleServer sur une instance de serveur virtuel EC2 est de modifier son nom d'hôte.
Faisons-le. Exécutez cette commande pour ouvrir le fichier de nom d'hôte :
sudo vi /etc/hostname
Vous devriez voir quelque chose comme ceci :
La capture d'écran de l'instance de serveur virtuel AWS EC2 avec le fichier de nom d'hôte
Remplacez ce nom d'hôte par « ansible-server ». Ensuite, redémarrez-le.
sudo init 6
La capture d'écran du terminal d'instance AWS EC2 Virtual Server avec le pointeur vers le nom d'hôte
Ajoutons maintenant un nouvel utilisateur ansible-admin à l'instance de serveur virtuel AWS EC2.
Pour ce faire, utilisez cette commande :
sudo useradd ansible-admin
Ensuite, définissez le mot de passe pour l'utilisateur ansible-admin .
sudo passwd ansible-admin
Vous devez également configurer les privilèges utilisateur en modifiant le fichier sudoers .
sudo visudo
Ajoutez « ansible-admin ALL=(ALL) ALL » à ce fichier sudoers .
La capture d'écran du terminal d'instance AWS EC2 Virtual Server avec le pointeur vers les privilèges d'administrateur
Vous devez également modifier le fichier /etc/ssh/sshd_config pour activer l'authentification par mot de passe.
sudo vi /etc/ssh/sshd_config
La capture d'écran du terminal d'instance AWS EC2 Virtual Server avec le pointeur vers les paramètres d'administration
Ensuite, vous devez recharger le service pour confirmer ces modifications.
sudo service sshd reload
À la suite de l'exécution de cette commande, vous verrez :
La capture d'écran du terminal d'instance AWS EC2 Virtual Server avec le pointeur vers le résultat du rechargement sshd
Vous pouvez maintenant utiliser cette commande pour éviter d'ajouter sudo pour toutes les autres commandes.
sudo su - ansible-admin
Vous envisagez de gérer des serveurs distants tels que les instances de serveur virtuel K8s EC2 plus loin dans cet article. C'est pourquoi vous devez configurer des clés SSH.
ssh-keygen
À la suite de l'exécution de cette commande, vous verrez :
La capture d'écran du terminal d'instance AWS EC2 Virtual Server avec le pointeur vers le résultat ssh-keygen
Les clés SSH sont désormais générées et prêtes à être utilisées.
Vous pouvez maintenant installer Ansible sur votre instance de serveur virtuel EC2 « AnsibleServer » .
Faisons-le.
Exécutez cette commande pour installer Ansible.
sudo amazon-linux-extras install ansible2
Pour vérifier Ansible, utilisez cette commande :
ansible --version
À la suite de l'exécution de cette commande, vous verrez :
La capture d'écran du terminal d'instance AWS EC2 Virtual Server avec le pointeur vers sudo yum install ansible result
Comme Ansible est installé sur votre instance de serveur virtuel EC2 « AnsibleServer » , vous pouvez configurer Jenkins pour l'intégrer à Ansible. Vous devez installer le plugin « Publier via SSH » pour intégrer Jenkins à l'instance de serveur virtuel EC2 sur laquelle Ansible est installé et à d'autres instances de serveur virtuel EC2 sur lesquelles Kubernetes est installé.
Allez dans « Tableau de bord » → « Gérer Jenkins » → « Configurer le système » → « Plugins disponibles » .
Saisissez ensuite « Publier via SSH » dans le champ de recherche.
La capture d'écran de Jenkins installé sur le serveur virtuel AWS EC2 avec le pointeur vers la page Web « Plugins disponibles »
Cliquez sur le bouton « Installer sans redémarrage » . Attendez la fin du processus de téléchargement.
La capture d'écran de Jenkins installé sur le serveur virtuel AWS EC2 avec le pointeur vers la page Web « Progression du téléchargement »
Le plugin « Publier via SSH » est désormais installé sur l'instance de serveur virtuel Jenkins EC2.
Avec l'installation réussie du plugin Apache Maven Jenkins, vous pouvez désormais utiliser ce plugin dans le pipeline que vous avez créé et mis à jour dans les modules 2 et 3.
Pour ce faire, procédez comme suit :
Allez dans « Tableau de bord » → « Gérer Jenkins » → « Configurer le système » → « Publier via SSH » .
La capture d'écran du terminal d'instance AWS EC2 Virtual Server avec le plugin "Publish over SSH"
Entrez toutes les données requises telles qu'elles figurent sur la capture d'écran, y compris le nom d'hôte, le nom d'utilisateur et la clé privée (ou le mot de passe le cas échéant).
La capture d'écran du terminal d'instance AWS EC2 Virtual Server avec le plugin "Publish over SSH"
Cliquez ensuite sur les boutons « Appliquer » et « Enregistrer » .
Ici, vous avez terminé de configurer le plugin Jenkins « Publier via SSH » .
Ensuite, cliquez sur « Tester la configuration » pour valider que le plugin fonctionne correctement.
La capture d'écran du plugin "Publish over SSH" avec le bouton "Test Configuration"
Sur le côté gauche, vous pouvez voir que l'état de configuration du plugin de test est « Succès ». Cela signifie que la configuration du plugin est correcte.
Vous devez créer un nouveau dossier sur l'instance AnsibleServer EC2 où le JAR du projet sera stocké. Ce pot sera utilisé ultérieurement pour créer une image Docker.
Commençons.
Accédez au dossier « /opt » dans l’instance AnsibleServer EC2.
cd /opt
Créez-y un nouveau dossier « docker » .
sudo mkdir docker
Donnez des privilèges à ce dossier « docker » .
sudo chown ansible-admin:ansible-admin docker
Maintenant, vérifiez les privilèges du dossier « docker » en exécutant cette commande.
ll
Vous pouvez voir que le dossier « docker » est accessible avec l'utilisateur « ansible-admin » .
La capture d'écran du dossier "docker" dans l'instance EC2 "AnsibleServer"
Maintenant que le plugin Github « Publier via SSH » est installé et configuré, vous pouvez maintenant l'intégrer dans le pipeline que vous avez créé dans le « [module 2] : Jenkins Server » pour transférer un artefact jar de projet de « JenkinsServer » vers "AnsibleServeur" .
Eh bien, pour intégrer le plugin Github « Publier via SSH » dans le pipeline, vous devez suivre ces étapes :
La capture d'écran de la section « Envoyer l'artefact de build via SSH » dans la configuration du pipeline
Enfin, vous devez cliquer sur les boutons « Appliquer » et « Enregistrer » pour terminer l'intégration du plugin « Publier via SSH » avec le pipeline.
Vous pouvez désormais utiliser votre pipeline mis à jour pour transférer un artefact jar de projet de « JenkinsServer » vers « AnsibleServer » . Pour ce faire, vous devez cliquer sur le bouton « Construire maintenant » . En conséquence, vous verrez un résultat de travail réussi dans l’historique de construction.
Si vous ouvrez votre terminal AWS EC2 « AnsibleServer » . Vous pouvez vérifier que le pipeline fonctionne bien.
Utilisez simplement cette commande.
cd /opt/docker
De cette façon, vous pouvez voir l'artefact JAR, indiquant la réussite de la construction de votre projet à partir de GitHub.
La capture d'écran du répertoire /opt/docker avec l'artefact jar du projet
Lorsque vous exécutez un playbook Ansible, vous spécifiez les hôtes sur lesquels il doit s'exécuter. Vous pouvez le faire de deux manières :
hosts
sur une liste d'adresses IP ou de noms d'hôtes./etc/ansible/hosts
.
En modifiant /etc/ansible/hosts
, vous pouvez facilement gérer des groupes d'hôtes sans avoir à écrire leurs adresses IP à chaque fois que vous exécutez un playbook.
Découvrons l'hôte de l'instance AnsibleServer EC2 en exécutant la commande suivante.
sudo ifconfig
La capture d'écran du paramètre d'interface réseau de l'instance AnsibleServer EC2
Après avoir découvert l'hôte de l'instance AnsibleServer EC2, vous pouvez l'ajouter au fichier hôtes Ansible en exécutant la commande suivante.
sudo vi /etc/ansible/hosts
Vous pouvez également ajouter « [ansible] » comme référence
La capture d'écran du fichier d'hôtes Ansible
Si vous gérez un cluster de serveurs et que vous souhaitez appliquer un playbook à chacun d'entre eux, au lieu de spécifier l'adresse IP de chaque serveur dans le playbook, vous pouvez simplement ajouter tous les serveurs à un groupe dans le fichier d'inventaire, puis spécifier le groupe dans le playbook.
Ansible est conçu pour automatiser les tâches sur des serveurs distants. L'authentification SSH sans mot de passe permet à Ansible de se connecter à ces serveurs sans avoir besoin de saisir manuellement un mot de passe.
Exécutez cette commande pour créer une connexion sécurisée de votre ordinateur à un autre ordinateur (comme celui à l'adresse IP 172.31.34.41), en utilisant la clé SSH de l'utilisateur ansible-admin.
sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}
Dans mon cas, cela ressemble à ceci.
sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub ansible-admin@172.31.34.41
La capture d'écran du résultat réussi de l'installation de l'authentification SSH sans mot de passe
Vous pouvez maintenant voir « Nombre de clé(s) ajoutée(s) : 1 » . Cela signifie que l'installation de l'authentification SSH sans mot de passe a été terminée avec succès.
Maintenant qu'Ansible est configuré et prêt à fonctionner, vous pouvez créer un nouveau playbook Ansible pour votre pipeline. Ce playbook permettra à Ansible de créer et d'envoyer une nouvelle image Docker à Dockerhub.
Voici comment procéder :
touch hello-app.yml
hello-app.yml
. Ouvrez-le pour le modifier avec cette commande. vi hello-app.yml
--- - hosts: ansible user: root tasks: - name: create docker image command: docker build -t hello:latest . args: chdir: /opt/docker - name: create tag to push image onto dockerhub command: docker tag hello:latest zufarexplainedit/hello:latest - name: push docker image onto dockerhub command: docker push zufarexplainedit/hello:latest
Le playbook Ansible pour les tâches Docker est prêt à être utilisé.
Avec Ansible, Ansible playbook, AnsibleServer et JenkinsServer tous correctement configurés, il est temps de tester le playbook Ansible.
Accédez à l’emplacement de votre playbook Ansible.
cd /opt/docker
Ensuite, exécutez la commande suivante.
sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml
Une fois terminé, vous verrez le résultat de l’exécution réussie de votre playbook Ansible.
La capture d'écran du résultat de l'exécution réussie du playbook ansible pour les tâches Docker
De plus, prenez un moment pour visiter votre compte Dockerhub et vérifiez si une nouvelle image est désormais visible.
La capture d'écran du compte Dockerhub avec la nouvelle image ajoutée
Vous devriez voir l'image nouvellement ajoutée. Ce résultat confirme que votre playbook Ansible est correct.
Maintenant que le plugin Github « Publier via SSH » , Ansible et Docker sont installés et configurés, vous pouvez désormais tous les intégrer dans le pipeline que vous avez créé dans le « [module 2] : Jenkins Server » pour transférer un artefact jar de projet. de « JenkinsServer » à « AnsibleServer » , puis créez une nouvelle image Docker à partir de votre projet, puis transférez cette image Docker sur Dockerhub.
Pour y parvenir, vous devez suivre ces étapes :
La capture d'écran de la section « Envoyer l'artefact de build via SSH » dans la configuration du pipeline
Enfin, cliquez sur les boutons « Appliquer » et « Enregistrer » pour terminer l'intégration des tâches Ansible Docker avec le pipeline.
Vous pouvez maintenant tester votre pipeline mis à niveau pour transférer de manière transparente un artefact jar de projet de « JenkinsServer » vers « AnsibleServer » , puis créer une nouvelle image Docker à partir de votre projet, puis transférer cette image Docker sur Dockerhub. Pour ce faire, vous devez cliquer sur le bouton « Construire maintenant » . En conséquence, vous verrez un résultat de travail réussi dans l’historique de construction.
De plus, prenez un moment pour visiter votre compte Dockerhub et vérifiez si une nouvelle image est désormais visible.
La capture d'écran du compte Dockerhub avec la nouvelle image ajoutée
Vous devriez voir l'image nouvellement ajoutée. Ce résultat confirme que votre playbook Ansible avec les tâches Docker a été intégré avec succès dans le pipeline.
Configurons maintenant les K8 sur l'instance EC2. Vous allez créer une nouvelle instance EC2 et installer leur outil de ligne de commande kubectl pour interagir davantage avec un cluster Kubernetes .
Utilisez les instructions de la section « Lancer une instance de serveur virtuel AWS EC2 » de ce didacticiel pour terminer cette étape.
N'oubliez pas d'ajouter une configuration de groupe de sécurité. Il permet à tous les outils et SSH de fonctionner respectivement sur les ports 8080 et 22 .
Utilisez le nom « K8sServer » pour distinguer votre instance de serveur virtuel EC2.
Vous pouvez réutiliser le groupe de sécurité « CI_CD_Pipeline » et « CI_CD_Pipeline_Key_Pair » pour une nouvelle instance EC2 « K8sServer » .
Cliquez sur le bouton « Connecter ».
La capture d'écran de la page Web AWS avec le pointeur vers le bouton « Connecter »
Vous pouvez maintenant voir le terminal en ligne de l'instance de serveur virtuel EC2.
La capture d'écran du terminal en ligne de l'instance AWS EC2 Virtual Server
La première chose que vous devez faire lorsque vous souhaitez configurer KuberenetesServer sur une instance de serveur virtuel EC2 est de modifier son nom d'hôte.
Faisons-le. Exécutez cette commande pour ouvrir le fichier de nom d'hôte :
sudo vi /etc/hostname
Vous devriez voir quelque chose comme ça.
La capture d'écran de l'instance de serveur virtuel AWS EC2 avec le fichier de nom d'hôte
Remplacez ce nom d'hôte par « kubernetes-server », puis redémarrez-le.
sudo init 6
Votre nom d'hôte a été modifié.
La capture d'écran du terminal d'instance AWS EC2 Virtual Server avec le pointeur vers le nom d'hôte
Utilisez cette commande pour vérifier la version AWS .
aws --version
De cette façon, vous pouvez voir votre version actuelle d'Aws-cli.
La capture d'écran du terminal en ligne de l'instance de serveur virtuel AWS EC2 avec le résultat de la commande de version aws
Si vous voyez la version aws-cli/1.18 , vous devez télécharger la dernière version.
Maintenant que vous avez découvert que vous disposez d'une ancienne version d'Aws-cli sur votre instance EC2, vous devez la mettre à jour. Pour cela, accédez à AWS → Documentation → AWS Command Line Interface → Guide de l'utilisateur pour la version 2.
La capture d'écran de la page Web de l'instance de serveur virtuel AWS EC2 avec le guide de l'utilisateur pour la version 2
Copiez-collez la commande curl .
Tout d'abord, exécutez cette commande pour télécharger awscli version 2.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
Attendez que le processus de téléchargement commence.
Vous devriez voir quelque chose comme ça.
La capture d'écran du terminal en ligne de l'instance de serveur virtuel AWS EC2 avec le téléchargement du résultat aws version 2
Deuxièmement, vous devez exécuter cette commande pour décompresser l'archive awscli version 2.
unzip awscliv2.zip
Troisièmement, vous devez exécuter cette commande pour installer awscli version 2.
sudo ./aws/install
Ensuite, rechargez le terminal en ligne de l'instance de serveur virtuel Kubernetes EC2.
Ensuite, utilisez cette commande pour vérifier la version AWS
aws --version
Vous pouvez voir que aws cli a aws-cli/2.
La capture d'écran du terminal en ligne de l'instance de serveur virtuel AWS EC2 avec le résultat de la commande de version AWS
Kubectl est un outil de ligne de commande fondamental pour interagir avec n'importe quel cluster Kubernetes, quelle que soit l'infrastructure sous-jacente. Il vous permet de gérer les ressources, de déployer des applications, de configurer la mise en réseau, d'accéder aux journaux et d'effectuer diverses autres tâches au sein d'un cluster Kubernetes.
Vous devez maintenant installer l'outil de ligne de commande kubectl pour interagir davantage avec un cluster Kubernetes. Pour cela, vous devez accéder à AWS → Documentation → Amazon EKS → Guide de l'utilisateur → Installation ou mise à jour de kubectl → Linux .
Ou cliquez simplement sur le lien https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html .
La capture d'écran du guide de l'utilisateur AWS EKS
Tout d’abord, exécutez cette commande pour télécharger kubectl.
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl
Attendez le processus de téléchargement.
Vous verrez quelque chose comme ça.
La capture d'écran du terminal en ligne de l'instance de serveur virtuel AWS EC2 avec le téléchargement du résultat kubectl
Donnez la permission à kubectl.
chmod +x kubectl
Déplacez kubectl vers le dossier /usr/local/bin.
sudo mv kubectl /usr/local/bin
Vérifiez la version de kubectl.
kubectl version --output=yaml
Eksctl est un autre outil de ligne de commande spécifiquement adapté au service Amazon EKS. Eksctl peut être utilisé pour créer des clusters AWS EKS, gérer des groupes de nœuds et effectuer des tâches spécifiques à EKS, telles que l'intégration avec des rôles IAM et d'autres services AWS en supprimant une grande partie de la configuration et de la gestion de l'infrastructure AWS.
Exécutez la commande pour télécharger kubectl.
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
Déplacez eksctl vers le dossier /usr/local/bin.
sudo mv /tmp/eksctl /usr/local/bin
Vérifiez la version d'eksctl.
eksctl version
Tu devrais voir la version
La capture d'écran du terminal en ligne de l'instance AWS EC2 Virtual Server avec la version eksctl
Vous devez créer un rôle IAM et l'attacher à votre instance EC2 « KubernetesServer » .
Pour ce faire, vous devez trouver EC2 dans la zone de recherche.
Choisissez EC2 Virtual Server en cliquant sur le lien https://us-east-1.console.aws.amazon.com/ec2/ .
La capture d'écran de la page Web AWS avec le pointeur vers "IAM"
Accédez au tableau de bord IAM → Rôles .
La capture d'écran de la page Web AWS avec le pointeur vers « Rôles IAM »
Cliquez sur le bouton « Créer un rôle » sur la page Web des rôles IAM .
Choisissez ensuite « Service AWS », « EC2 ». Et cliquez sur le bouton « Suivant » .
La capture d'écran de la page Web AWS avec le pointeur vers « Configuration des rôles IAM »
Ensuite, recherchez « AmazonEC2FullAccess » , « AmazonEC2FullAccess » , « IAMFullAccess » et « AWSCloudFormationFullAccess » dans la zone de recherche, puis cliquez sur le bouton « Ajouter des autorisations » .
Et puis cliquez sur le bouton « Suivant » .
La capture d'écran de la page Web AWS avec le pointeur vers l'autorisation AdministratorAccess
Tapez ensuite « Eksctl_Role » dans l’entrée « Nom du rôle » .
Et cliquez sur le bouton « Créer un rôle » .
La capture d'écran de la page Web AWS avec le pointeur vers la configuration du rôle d'autorisation
Le rôle est enfin créé.
Accédez à la page Web de l'instance AWS EC2. Choisissez « KuberbetesServer ». Cliquez ensuite sur « Actions » → « Sécurité » → « Modifier le rôle IAM ».
La capture d'écran de la page Web AWS avec le pointeur vers le bouton KubernetesServer Security
Choisissez « Eksctl_Role » , puis cliquez sur le bouton « Mettre à jour le rôle IAM » .
La capture d'écran de la page Web AWS avec le pointeur vers le rôle IAM Elsctl_Role
Votre rôle IAM est désormais connecté à votre outil « EKS_Server » et eksctl.
Un cluster Amazon EKS (Elastic Kubernetes Service) est un environnement Kubernetes géré sur AWS, automatisant des tâches d'infrastructure complexes telles que la configuration, la mise à l'échelle et la maintenance. Il est essentiel car il fournit une plate-forme efficace, sécurisée et optimisée pour AWS pour le déploiement, la gestion et la mise à l'échelle d'applications conteneurisées, rationalisant les opérations et permettant aux développeurs de se concentrer sur le codage plutôt que sur la gestion de l'infrastructure sous-jacente.
Il est maintenant temps de configurer votre cluster EKS.
Pour y parvenir, suivez ces étapes :
eksctl create cluster --name cluster-name \ --region region-name \ --node-type instance-type \ --nodes-min 2 \ --nodes-max 2 \ --zones <AZ-1>,<AZ-2>
Par exemple, dans mon cas, cela ressemble à ceci.
eksctl create cluster --name zufarexplainedit \ --region eu-north-1 \ --node-type t3.micro
Exécutez la commande modifiée et attendez patiemment la fin du processus de création du cluster. Vous remarquerez que l'état du cluster EKS est indiqué comme « création » sur la page Web AWS CloudFormation.
La capture d'écran de la page Web AWS avec le pointeur vers AWS CloudFormation où vous pouvez voir l'état de « création » du cluster EKS
La procédure de création de cluster prend généralement environ 20 minutes. Une fois terminé, le terminal affichera le résultat du processus.
La capture d'écran de la page Web AWS avec le pointeur vers le terminal AWS EC2 où vous pouvez voir le résultat de la création du cluster EKS
De plus, vous pouvez vérifier l'état de création réussie du cluster EKS sur la page Web AWS CloudFormation.
La capture d'écran de la page Web AWS avec le pointeur vers AWS CloudFormation où vous pouvez voir le résultat de la création du cluster EKS
Un fichier YAML de déploiement Kubernetes est un script de configuration écrit au format YAML qui définit comment gérer et maintenir une application ou un service spécifique au sein d'un cluster Kubernetes. Il encapsule les instructions permettant d'orchestrer le déploiement, la mise à l'échelle, la mise à jour et la surveillance des conteneurs exécutant l'application. Ce fichier comprend des détails tels que l'image du conteneur, le nombre souhaité de répliques, les limites de ressources, les variables d'environnement, les paramètres réseau, etc. Lorsqu'il est appliqué à un cluster Kubernetes, le fichier YAML de déploiement garantit l'état souhaité de l'application, en gérant automatiquement la création, la mise à l'échelle et la récupération des conteneurs pour maintenir le niveau souhaité de disponibilité et de fiabilité.
Maintenant que le cluster Kubernetes, eksctl et kubectl sont installés et configurés, vous pouvez créer un fichier yaml de déploiement Kubernetes.
Vous pouvez le faire en exécutant la commande suivante.
touch hello-app-deployment.yaml
Ensuite, modifiez ce fichier en exécutant la commande suivante.
vi hello-app-deployment.yaml
Ajoutez ce contenu au hello-app-deployment.yaml.
apiVersion: apps/v1 kind: Deployment metadata: name: zufarexplainedit-hello-app labels: app: hello-app spec: replicas: 2 selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: zufarexplainedit/hello imagePullPolicy: Always ports: - containerPort: 8080 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1
Hello-app-deployment.yaml est maintenant créé et prêt à être utilisé.
Un fichier YAML du service Kubernetes est un script de configuration écrit au format YAML qui définit une abstraction réseau pour un ensemble de pods, permettant d'y accéder de manière cohérente au sein d'un cluster Kubernetes. Ce fichier décrit comment le service doit être découvert, accessible et équilibré en charge par d'autres services ou clients externes. Il comprend des spécifications telles que le type de service (ClusterIP, NodePort, LoadBalancer), les numéros de port, les sélecteurs pour identifier les pods, etc. Lorsqu'il est appliqué à un cluster Kubernetes, le fichier Service YAML crée une adresse IP et un port virtuels qui acheminent le trafic vers les pods appropriés, en faisant abstraction des modifications de pod sous-jacentes et en fournissant un point de terminaison stable pour la communication, permettant une connectivité transparente et une mise à l'échelle dynamique.
Une fois le cluster Kubernetes, eksctl et kubectl installés et configurés, vous pouvez créer le fichier yaml du service Kubernetes.
Pour ce faire, vous devez créer un fichier yaml du service Kubernetes en exécutant la commande suivante.
touch hello-app-service.yaml
Ensuite, modifiez ce fichier en exécutant la commande suivante.
vi hello-app-service.yaml
Ajoutez ce contenu au hello-app-deployment.yaml.
apiVersion: v1 kind: Service metadata: name: zufarexplainedit-hello-app-service labels: app: hello-app spec: selector: app: hello-app ports: - port: 8080 targetPort: 8080 type: LoadBalancer
Hello-app-service.yaml est maintenant créé et prêt à être utilisé.
Une fois votre cluster Kubernetes EKS installé et configuré avec succès, et votre service Kubernetes et vos fichiers de déploiement prêts, il est temps de tester les choses à l'aide des commandes kubectl.
Appliquer le déploiement.
Utilisez la commande suivante pour appliquer la configuration de déploiement.
kubectl apply -f hello-app-deployment.yaml
Cela créera un déploiement avec le nombre spécifié de réplicas et une stratégie de mise à jour continue, garantissant la disponibilité et la gérabilité de votre application.
2. Appliquer le service.
Ensuite, appliquez la configuration du service.
kubectl apply -f hello-app-service.yaml
Cela mettra en place un service de type LoadBalancer, exposant votre application à Internet.
Notez que le provisionnement du LoadBalancer et l'acquisition d'une adresse IP externe peuvent prendre un certain temps.
Vérifiez l'état de LoadBalancer.
Surveillez l'état de votre service en utilisant.
kubectl get service zufarexplainedit-hello-app-service
Lorsqu'une IP externe est attribuée, vous êtes presque prêt à accéder à votre application.
Accédez à votre candidature.
À l’aide d’un navigateur Web, saisissez l’adresse IP externe attribuée suivie de :8080. Après un bref instant, la page se chargera, affichant le message « HelloWorld ». Gardez à l’esprit que le chargement initial peut prendre quelques secondes.
La capture d'écran de la page Web de l'application Hello
Lorsque vous avez besoin de ranger les ressources dans votre environnement Kubernetes, vous pouvez utiliser les commandes kubectl suivantes pour supprimer efficacement les déploiements, les pods et les services.
1. Supprimez tous les déploiements .
Pour supprimer tous les déploiements, vous pouvez utiliser la commande suivante.
kubectl delete deployments --all
Cette action garantit qu'aucune instance de déploiement active n'est laissée dans votre cluster.
2. Supprimez tous les modules .
Si vous devez supprimer tous les pods, qu'ils soient gérés par un déploiement ou non, vous pouvez utiliser la commande suivante.
kubectl delete pods --all
La suppression des pods peut vous aider à réinitialiser l'état de votre cluster ou à préparer de nouveaux déploiements.
3. Supprimez tous les services .
Pour nettoyer les services qui exposent vos applications au réseau, vous pouvez utiliser la commande suivante.
kubectl delete services --all
La suppression de services peut impliquer des temps d'arrêt, alors réfléchissez aux implications avant de continuer.
Pour supprimer toutes les ressources associées au cluster Amazon EKS spécifié créé avec eksctl
, y compris les nœuds de travail, les composants réseau et d'autres ressources, vous pouvez utiliser la commande suivante.
eksctl delete cluster --name {your cluster name} --region {your region name}
Pour moi c'est.
eksctl delete cluster --name zufarexplainedit --region eu-north-1
Assurez-vous d'être certain d'arrêter le cluster, car cette action est irréversible et entraînera une perte de données.
Ajoutons maintenant un nouvel utilisateur ansible-admin à l'instance de serveur virtuel AWS EC2 « KubernetesServer » .
Pour ce faire, utilisez cette commande.
sudo useradd ansible-admin
Ensuite, définissez le mot de passe pour l'utilisateur ansible-admin .
sudo passwd ansible-admin
Vous devez également configurer les privilèges utilisateur en modifiant le fichier sudoers .
sudo visudo
Ajoutez « ansible-admin ALL=(ALL) ALL » à ce fichier sudoers .
La capture d'écran du terminal d'instance AWS EC2 Virtual Server avec le pointeur vers les privilèges d'administrateur
Vous devez également modifier le fichier /etc/ssh/sshd_config pour activer l'authentification par mot de passe.
sudo vi /etc/ssh/sshd_config
La capture d'écran du terminal d'instance AWS EC2 Virtual Server avec le pointeur vers les paramètres d'administration
Ensuite, vous devez recharger le service pour apporter ces modifications.
sudo service sshd reload
À la suite de l'exécution de cette commande, vous verrez :
La capture d'écran du terminal d'instance AWS EC2 Virtual Server avec le pointeur vers le résultat du rechargement sshd
Vous pouvez maintenant utiliser cette commande pour éviter d'ajouter sudo pour toutes les autres commandes.
sudo su - ansible-admin
Vous envisagez de gérer des serveurs distants tels que l'instance de serveur virtuel K8s EC2 plus loin dans cet article. C'est pourquoi vous devez configurer des clés SSH.
ssh-keygen
À la suite de l'exécution de cette commande, vous verrez :
La capture d'écran du terminal d'instance AWS EC2 Virtual Server avec le pointeur vers le résultat ssh-keygen
Les clés SSH sont désormais générées et prêtes à être utilisées.
Ansible est conçu pour automatiser les tâches sur des serveurs distants. L'authentification SSH sans mot de passe permet à Ansible de se connecter à ces serveurs sans avoir besoin de saisir manuellement un mot de passe.
Exécutez cette commande pour créer une connexion sécurisée de votre ordinateur à un autre ordinateur (comme celui à l'adresse IP 172.31.34.41), en utilisant la clé SSH de l'utilisateur ansible-admin.
sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}
Dans mon cas, cela ressemble à ceci.
sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub ansible-admin@172.31.34.41
La capture d'écran du résultat réussi de l'installation de l'authentification SSH sans mot de passe
Vous pouvez maintenant voir « Nombre de clé(s) ajoutée(s) : 1 » . Cela signifie que l'installation de l'authentification SSH sans mot de passe a été terminée avec succès.
Lorsque vous exécutez un playbook Ansible, vous spécifiez les hôtes sur lesquels il doit s'exécuter. Dans cette étape, vous devez spécifier l'hôte de l'instance KubernetesServer EC2. Pour ce faire, vous devez répéter les mêmes étapes que celles que vous avez suivies dans « [Module 6] : Ansible ».
Découvrons l'hôte de l'instance KubernetesServer EC2 en exécutant la commande suivante.
sudo ifconfig
La capture d'écran du fichier "ifconfig"
Après avoir trouvé l'hôte de l'instance KubernetesServer EC2, vous pouvez l'ajouter au fichier d'hôtes Ansible en exécutant la commande suivante.
sudo vi /etc/ansible/hosts
La capture d'écran des fichiers "hosts" avec les hôtes ansible et kubernetes
Vous pouvez également ajouter « [kubernetes] » comme référence
Maintenant que Kubernetes est configuré et prêt à fonctionner, vous pouvez créer un nouveau playbook Ansible avec des tâches Kubernetes pour votre pipeline. Ce playbook permettra à Ansible d'exécuter votre application sur le cluster Kubernetes avec les commandes kubectl.
Voici comment procéder :
touch kubernetes-hello-app.yml
hello-app.yml
. Ouvrez-le pour le modifier avec cette commande. vi kubernetes-hello-app.yml
--- - hosts: kubernetes tasks: - name: deploy regapp on kubernetes command: kubectl apply -f hello-app-deployment.yaml - name: create service for regapp command: kubectl apply -f hello-app-service.yaml - name: update deployment with new pods if image updated in docker hub command: kubectl rollout restart deployment.apps/zufarexplainedit-hello-app
Le playbook Ansible pour les tâches Kubernetes est prêt à être utilisé.
Maintenant que Kubernetes, Ansible et Ansible playbook pour les tâches Kubernetes sont tous configurés et prêts à fonctionner, vous pouvez l'intégrer à Jenkins.
Accédez à JenkinsServer → Tableau de bord Jenkins → Nouvel élément.
Créez un nouveau projet Jenkins Freestyle avec le nom « CD-Job ».
La capture d'écran d'un nouveau projet freestyle de Jenkins "CD-Job"
Cliquez sur le bouton « OK ».
Accédez à la section « Actions post-construction ».
Cliquez sur le bouton « Ajouter une action post-construction ».
Choisissez l’option « Envoyer les artefacts de build via SSH ».
Choisissez « AnsibleServer » comme serveur SSH.
Ajoutez cette commande à l’entrée « commande exécutable ».
sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml
Cliquez sur les boutons « Appliquer » et « Enregistrer ».
Accédez au tableau de bord Jenkins → « CI_CD_Pipeline » → Configurer → section « Actions post-build ».
Cliquez sur le bouton « Ajouter une action post-construction ».
Choisissez l’option « Construire d’autres projets ».
Allez dans la section « Construire d’autres projets ».
Choisissez l’option « Déclencher uniquement si la construction est stable ».
Ajoutez « CD-Job » à l’entrée « Projet à construire ».
La capture d'écran de la section "Construire d'autres projets"
Cliquez sur les boutons « Appliquer » et « Enregistrer ».
Vous pouvez désormais considérer que le pipeline est complètement terminé et prêt à être utilisé.
Il est maintenant temps de tester la version finale du pipeline.
Accédez à Jenkins → Tableau de bord Jenkins → « CI_CD_Pipeline ».
Cliquez sur le bouton "Construire maintenant".
Pour voir les résultats, consultez les journaux de la console de build.
La capture d'écran des journaux de la console de build
Vous remarquerez que le "CD-Job" a été déclenché dans les journaux de la console de build et que le statut final est marqué comme SUCCÈS.
4
De plus, vous pouvez vous rendre sur Dockerhub pour confirmer l'ajout de la nouvelle image Docker.
Et enfin, vous pouvez accéder à votre application à l'aide d'un navigateur Web. Saisissez l'adresse IP externe attribuée suivie de ":8080". Après un bref instant, la page se chargera, affichant le message « HelloWorld ».
Bravo pour la mise en place de ce pipeline CI/CD moderne !
Vous avez fait un travail formidable et vous êtes un véritable héros !
Merci pour tous vos efforts!
Zufar Sunagatov est un ingénieur logiciel senior expérimenté, passionné par la conception de systèmes logiciels modernes.
Zufar Sunagatov
Création d'un pipeline CI/CD avec AWS, K8S, Docker, Ansible, Git, Github, Apache Maven et Jenkins | HackerNoon