Installer Jenkins sur Kubernetes

CI/CD (Continuous Integration/ Continuous Deployment) est un concept central du monde DevOps. Il nous aide à automatiser les processus de développement logiciel : construction, test et déploiement des codes sources.

Parmi de nombreux outils CI/CD, Jenkins est l’un des outils open source les plus connus qui aident à configurer les pipelines pour l’intégration continue et le déploiement continu.

Ce tutoriel va vous montrer comment installer Jenkins sur un cluster Kubernetes.

Préparer un cluster Kubernetes

Il existe de nombreuses façons de configurer un cluster Kubernetes. Vous pouvez utiliser les services de cloud public pour provisionner votre propre cluster sur AWS, GCP, Linode, etc. En outre, le moyen le plus simple consiste à installer minikube sur votre machine locale.

Ici, j’ai un cluster Kubernetes avec 5 nœuds provisionnés à l’aide de kubespray.

$ kubectl get node

cluster Kubernetes

Installation de Jenkins

Tout d’abord, nous allons créer un nouvel espace de noms pour fournir le mécanisme d’isolation pour contrôler l’environnement CI :

$ kubectl create namespace jenkins
namespace/jenkins created

Vérifiez que l’espace de noms jenkins a été créé avec succès en exécutant la commande suivante :

$ kubectl get namespaces

espace de noms-jenkinsEspace de noms jenkins

Ensuite, créons le déploiement Jenkins. Vous pouvez utiliser le fichier manifeste suivant pour créer un déploiement d’instance unique de Jenkins.

Création du fichier `jenkins-deployment.yaml` :

apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins-deployment
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins/jenkins:lts
ports:
- name: http-port
containerPort: 8080
- name: jnlp-port
containerPort: 50000
volumeMounts:
- name: jenkins-vol
mountPath: /var/jenkins_vol
volumes:
- name: jenkins-vol
emptyDir: {}

Le déploiement à l’aide de l’image Docker `jenkins/jenkins:lts` et des ports d’exposition `8080` et `50000`.

Appliquez le manifeste ci-dessus :

$ kubectl create -f jenkins-deployment.yaml --namespace jenkins

Il faut quelques minutes pour extraire l’image jenkins/jenkins:lts et faire fonctionner le pod. Vérifier que le déploiement Jenkins a été déployé avec succès :

$ kubectl get pod -n jenkins

NAME READY STATUS RESTARTS AGE
jenkins-deployment-794699f9bc-rln7x 1/1 Running 0 66s

Déploiement du service Jenkins

Après avoir créé le déploiement Jenkins et que le pod Jenkins est en cours d’exécution, vous devez exposer la connexion au pod en cours d’exécution à l’aide d’un service. Dans ce tutoriel, nous utiliserons les services NodePort et ClusterIP.

Créons le fichier `jenkins-svc.yaml` comme suit :

apiVersion: v1
kind: Service
metadata:
name: jenkins
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30000
selector:
app: jenkins

---
apiVersion: v1
kind: Service
metadata:
name: jenkins-jnlp
spec:
type: ClusterIP
ports:
- port: 50000
targetPort: 50000
selector:
app: jenkins

Maintenant, appliquez le manifeste ci-dessus et créez le service dans l’espace de noms « jenkins » :

$ kubectl create -f jenkins-svc.yaml --namespace jenkins

Vérifiez que le service est en cours d’exécution :

$ kubectl get svc --namespace jenkins
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins NodePort 10.233.2.81 8080:30000/TCP 30s
jenkins-jnlp ClusterIP 10.233.53.44 50000/TCP 30s

Désormais, nous pouvons accéder au tableau de bord Jenkins en utilisant le service NodePort.

Accéder au tableau de bord Jenkins

Le service NodePort est accessible à partir du port “30000” sur n’importe quel nœud de travail du cluster Kubernetes :

`https://worker_node_ip_address:30000`

Vous pouvez obtenir l’adresse IP des nœuds de travail à l’aide de la commande suivante :

$ kubectl get node -o wide

NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node1 Ready master 149m v1.19.2 192.168.0.111 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node2 Ready master 148m v1.19.2 192.168.0.112 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node3 Ready master 148m v1.19.2 192.168.0.113 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node4 Ready 147m v1.19.2 192.168.0.114 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node5 Ready 147m v1.19.2 192.168.0.115 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13

Pour example, ouvrons le navigateur Web et allons sur : `https://192.168.0.111:30000`

jenkins-setup-administrateur-mot de passeMot de passe administrateur de configuration Jenkins

Afin de récupérer le mot de passe administrateur, vous pouvez exécuter la commande suivante :

$ kubectl logs jenkins-deployment-794699f9bc-rln7x --namespace jenkins

Obtenir le mot de passe administrateur jenkinsObtenir le mot de passe administrateur jenkins

Enter le mot de passe administrateur puis suivez les étapes de configuration suivantes et vous accéderez avec succès au tableau de bord Jenkins.

page d'accueil de jenkinsPage d’accueil de Jenkins

Conclusion

Jenkins est un outil CI/CD vraiment puissant pour tout ingénieur DevOps et développeur de logiciels. Ce didacticiel a parcouru toutes les étapes du déploiement de Jenkins sur un cluster Kubernetes. Grâce à Jenkins, nous serons plus productifs et cela nous aide à réduire le temps de création, de test et de déploiement des codes.

Merci d’avoir lu et s’il vous plaît laissez votre suggestion dans la section commentaire ci-dessous.