CoreOS est le système d'exploitation conçu pour les conteneurs Docker. CoreOS a Docker pré-installé prêt à l'emploi. Kubernetes peut être installé sur CoreOS à l'aide de CloudFormation, comme expliqué en détail dans un article précédent, « Premiers pas avec Kubernetes sur Amazon Web Services (AWS) ».
Problème
Kubernetes n'est pas préinstallé sur CoreOS et peut être installé à l'aide de kube-aws outil et il nécessite une entrée et une configuration de l'utilisateur. L'installation de Kubernetes sur CoreOS est un processus complexe et comprend les étapes suivantes illustrées à la figure 1.
Figure 1 : Installation de Kubernetes sur CoreOS Stages
Solution
Un pipeline Jenkins peut être utilisé pour automatiser l'installation de Kubernetes, comme illustré à la figure 2. Les différentes étapes de l'installation peuvent être configurées dans un Jenkinsfile et, lorsque le Pipeline est exécuté, le kube-aws l'outil est téléchargé, le CloudFormation la pile est initialisée, le contenu du répertoire d'actifs est rendu, les paramètres du cluster tels que le nombre d'instances de travail sont personnalisés, puis le cluster est validé et lancé.
Figure 2 : Pipeline Jenkins pour l'installation de Kubernetes sur CoreOS
L'installation de Kubernetes à l'aide d'un pipeline Jenkins est un exemple d'automatisation Modèle de conception DevOps.
Dans un tutoriel de trois articles, nous allons automatiser le processus d'installation de Kubernetes à l'aide d'un pipeline Jenkins. Cet article comporte les sections suivantes :
- Configuration de l'environnement
- Création des artefacts prérequis
- Création d'un nœud Jenkins
- Conclusion
Configuration de l'environnement
Nous allons installer Jenkins en utilisant l'image Docker "jenkins" sur une instance CoreOS. Nous allons lancer un cluster Kubernetes sur une instance Amazon AMI Linux EC2 à l'aide d'un pipeline Jenkins. Tout d'abord, lancez deux instances EC2, l'une exécutant Amazon Linux et l'autre exécutant CoreOS, comme illustré à la figure 3.
Figure 3 : Obtention de l'adresse IP publique
Lors de la création de l'instance Amazon Linux, créez une nouvelle paire de clés ("jenkins", par exemple) en sélectionnant "Créer une nouvelle paire de clés" et téléchargez la clé privée "jenkins.pem" à utiliser pour configurer un agent Jenkins. Obtenez l'adresse IP publique de l'instance EC2 exécutant CoreOS et connectez-vous en SSH à l'instance.
ssh -i "jenkins.pem" [email protected]
Exécutez l'image Docker pour Jenkins pour lancer Jenkins.
docker run -name jenkins -p 8080:8080 -p 50000:50000 jenkins
L'image Docker "Jenkins" est téléchargée. Jenkins se lance. Copiez le mot de passe généré. Obtenez le DNS public de l'instance EC2 exécutant Jenkins. Utilisation de l'url
Figure 4 : Console d'administration Jenkins
Création des artefacts prérequis
Maintenant, nous devons créer des artefacts pour un cluster Kubernetes qui ne se prêtent pas à l'automatisation.
- Paire de clés EC2
- Clé KMS
- Répertoire Jenkins /var/jenkins
- Connexion SSH à l'instance Amazon EC2 exécutant Amazon Linux
ssh -i "jenkins.pem" [email protected]
Étant donné qu'Amazon EC2 est utilisé, un compte AWS est requis. Nous devons créer un ensemble d'informations d'identification AWS Security, que nous utiliserons pour configurer l'instance EC2 à partir de laquelle la pile CloudFormation est lancée. Pour créer de nouvelles informations d'identification de sécurité AWS, cliquez sur Informations d'identification de sécurité pour le compte d'utilisateur et cliquez sur Créer une nouvelle clé d'accès pour créer une clé d'accès. Copiez l'ID de clé d'accès et la clé d'accès. Dans l'instance Amazon Linux, exécutez la commande suivante pour configurer l'instance avec les informations d'identification AWS :
aws configure
Spécifiez l'ID de la clé d'accès et la clé d'accès lorsque vous y êtes invité. Spécifiez le nom de la région par défaut (us-east-1 ) et le format de sortie (json ), comme illustré à la figure 5.
Figure 5 : Configuration de l'instance Jenkins avec les informations d'identification AWS, la région et le format de sortie par défaut
Ensuite, créez une paire de clés EC2. Exécutez la commande suivante pour créer une paire de clés appelée kubernetes-coreos et enregistrez-le sous kubernetes-coreos.pem .
aws ec2 create-key-pair --key-name kubernetes-coreos --query 'KeyMaterial' --output text > kubernetes-coreos.pem
Modifiez les autorisations d'accès de la paire de clés en utilisant le mode 400, qui définit les autorisations d'accès en lecture par propriétaire.
chmod 400 kubernetes-coreos.pem
Une paire de clés est créée et les autorisations d'accès sont définies (voir Figure 6).
Figure 6 : Créer une paire de clés pour Kubernetes
La paire de clés est également répertoriée dans la console AWS EC2, comme illustré à la figure 7.
Figure 7 : Obtention de l'adresse IP publique
Ensuite, créez une clé KMS, qui est utilisée pour chiffrer/déchiffrer les actifs TLS du cluster et est identifiée par une chaîne Arn. Utilisez les aws interface de ligne de commande pour créer une clé KMS pour la région us-east-1 .
aws kms --region=us-east-1 create-key --description="kube-aws assets"
Une clé KMS est créée, comme illustré à la figure 8. Copiez le fichier KeyMetadata.Arn chaîne commençant par arn:aws:kms:us-east-1 à utiliser ultérieurement pour initialiser le cluster CloudFormation.
Figure 8 : Création d'une clé KMS
Nous devons également créer un répertoire pour Jenkins :
sudo mkdir /var/Jenkins sudo chmod 777 /var/jenkins
Un répertoire est créé et les autorisations sont définies, comme illustré à la figure 9.
Figure 9 : Création d'un répertoire pour Jenkins
Création d'un nœud Jenkins
Un pipeline Jenkins est un projet Jenkins qui utilise le plug-in Jenkins Pipeline. Un pipeline se compose généralement d'une séquence d'étapes, chaque étape exécutant une tâche. Les exécuteurs disponibles sur les agents sont utilisés pour exécuter un projet Jenkins. Un « agent » est une machine configurée pour décharger des projets du nœud maître. Le nœud "maître" est la machine sur laquelle Jenkins est installé et gère toutes les tâches du système de construction, y compris l'analyse des scripts Pipeline et l'exécution d'un projet Jenkins sur un exécuteur. Un « exécuteur » est une ressource de calcul pour la compilation de code et il peut être configuré sur les nœuds maître ou agent. Dans cette section, nous allons créer un nœud agent et configurer un exécuteur sur le nœud. Sélectionnez Gérer Jenkins dans le tableau de bord Jenkins, comme illustré à la figure 10.
Figure 10 : Obtention de l'adresse IP publique
Ensuite, sélectionnez Gérer les nœuds , comme illustré à la figure 11.
Figure 11 : Obtention de l'adresse IP publique
Le nœud « maître » doit être répertorié. Cliquez sur Nouveau nœud pour créer un nœud d'agent, comme illustré à la figure 12.
Figure 12 : Obtention de l'adresse IP publique
Spécifiez un nom de nœud (jenkins , par exemple) et sélectionnez l'Agent permanent bouton radio, comme illustré à la Figure 13. Cliquez sur OK.
Figure 13 : Obtention de l'adresse IP publique
Pour configurer le nouveau nœud de l'agent, nous aurons besoin du DNS hôte sur lequel l'agent doit être créé. Copiez le DNS public à partir de la console AWS EC2 pour l'instance EC2 exécutant une image Amazon Linux, comme illustré à la figure 14.
Figure 14 : Obtention de l'adresse IP publique
Dans la nouvelle interface utilisateur d'entrée d'agent, spécifiez un Nom (jenkins , par exemple). Spécifiez le nombre d'exécuteurs comme 1. Spécifiez un répertoire racine distant comme /var/jenkins , qui a été créé plus tôt. Spécifiez les libellés comme "jenkins", dont nous discuterons la signification dans une section ultérieure. En utilisation , conservez le paramètre par défaut "Utiliser ce nœud autant que possible". Dans Méthode de lancement , sélectionnez "Lancer les agents esclaves sur les machines Unix via SSH". Dans Hébergement , spécifiez le DNS public copié depuis la console EC2. En disponibilité , sélectionnez "Gardez cet agent en ligne autant que possible". Pour les identifiants , cliquez sur Ajouter déroulant et sélectionnez Fournisseur d'informations d'identification Jenkins , comme illustré à la Figure 15.
Figure 15 : Obtention de l'adresse IP publique
Dans la section Ajouter des informations d'identification boîte de dialogue, sélectionnez Domaine comme informations d'identification globales et gentil comme Global . Spécifiez le nom d'utilisateur en tant que "ec2-user" et sélectionnez Entrer directement . Copiez et collez le contenu du fichier de clé privée jenkins.pem dans la clé champ, comme illustré à la Figure 16.
Figure 16 : Ajouter des identifiants Jenkins
Cliquez sur Ajouter , comme illustré à la Figure 17.
Figure 17 : Fournisseur d'informations d'identification Jenkins>Ajouter
Sélectionnez l'utilisateur ec2 identifiant dans Identifiants , comme illustré à la Figure 18. Cliquez sur Enregistrer .
Figure 18 : Configuration du nœud Jenkins
Un nouvel agent est ajouté, comme illustré à la figure 19. Initialement, l'agent peut ne pas être disponible car il est encore en cours de démarrage.
Figure 19 : Agent Jenkins créé
Cliquez sur le lien de l'agent et cliquez sur Relancer l'agent , si nécessaire, comme illustré à la Figure 20.
Figure 20 : Agent de relance
Le message de sortie "Agent connecté avec succès et en ligne" indique que l'agent a été lancé (voir Figure 21).
Figure 21 : Agent connecté et en ligne avec succès
L'agent « jenkins » doit être répertorié comme étant en cours d'exécution, comme illustré à la figure 22.
Figure 22 : Agent Jenkins en cours d'exécution
Conclusion
Dans cet article, nous avons présenté l'importance d'automatiser une installation Kubernetes avec Jenkins. Nous avons commencé par installer Jenkins sur CoreOS, en créant les artefacts prérequis et en créant un nœud Jenkins. Dans un article ultérieur, nous configurerons un fichier Jenkins pour un pipeline Jenkins et créerons un pipeline Jenkins. Et, dans un 3ème article, nous lancerons le pipeline Jenkins pour installer Kubernetes.