Dans ce lab on a besoin de virtualisation imbriqué donc on doit l'ouvrir depuis le powershel de la machine hote par la commande suivante:
set-VMProcessor -VMName Ubuntu-Vagrant-ExposeVirtualizationExtensions $true
Activation d’accès par clés ssh à votre VM-LAB && Génération de clé SSH et Copie vers une Machine Cible
Pour générer une paire de clés SSH sur votre machine locale, utilisez la commande suivante dans votre terminal :
ssh-keygen
Pour copier le clé SSH de votre machine locale vers votre cible utilisez la commande suivante dans votre terminal:
ssh-copy-id @ip machinecible
pour lancer portainer il suffit de taper,dans la racine de fichier docker-compose.yml, la commande :
docker-compose up -d
--> docker-compose.yml
version: "3"
services:
portainer:
container_name: portainer
image: portainer/portainer-ce:latest
ports:
- 9555:9443
volumes:
- data:/data
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
volumes:
data:
pour crer une machine par vagrant on doit telecharger le box de Vbox du site https://app.vagrantup.com/
vagrant init generic/ubuntu2204
vagrant up
puis configurer le vagrantfile selon les besoins
- Update et upgrade du système
- Installation docker
- Ajout de l'utilisateur 'vagrant' au groupe docker
--> playbook d'installation docker et ajout da vagrant dans le groupe docker
---
- name: Configuration Docker
hosts: ubuntu22
become: true
tasks:
- name: Mise à jour des paquets
apt:
update_cache: yes
- name: Installation de Docker
apt:
name: docker.io
state: present
become: true
- name: Ajout de l'utilisateur vagrant au groupe docker
user:
name: vagrant
groups: docker
append: yes
- name: Configuration pour permettre à l'utilisateur vagrant d'utiliser Docker sans sudo
lineinfile:
path: /etc/sudoers.d/vagrant_docker
line: 'vagrant ALL=(ALL) NOPASSWD: /usr/bin/docker'
state: present
create: yes
--> playbook de configuration du docker pour que la machine doit accessibe via tcp:
---
- name: Configure and Verify Docker
hosts: ubuntu22
become: true
tasks:
- name: Create directory for Docker service configuration
file:
path: /etc/systemd/system/docker.service.d
state: directory
- name: Create options.conf file
blockinfile:
path: /etc/systemd/system/docker.service.d/options.conf
block: |
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H unix:// -H tcp://0.0.0.0:2375
create: yes
notify: Reload Docker
- name: Create daemon.json.backup file
blockinfile:
path: /etc/docker/daemon.json.backup
block: |
{
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
create: yes
notify: Reload Docker
- name: Verify Docker service status
systemd:
name: docker
state: started
- name: Show Docker info if successful
debug:
var: docker_info.stdout_lines
when: docker_info.rc == 0
handlers:
- name: Reload Docker
systemd:
name: docker
state: reloaded
- name: Restart Docker
systemd:
name: docker
state: restarted
ces deux playbook sont executé lors de l'execussion de vagrantfile
Création de l'application Spring Boot de site https://start.spring.io/; et telechargement du projet
- d'abord on fait
mvn clean install
de l'application puis on fait la construction de l'image en se basant sur dockerfile qui se trouve à la racine par la commandedocker build -t usernameDockerHub/nom-image:tag .
--> Dockerfile
FROM openjdk:17-jdk-alpine
WORKDIR /app
EXPOSE 8888
COPY target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
- pour deployer l'image dans dockerHub :
docker login
docker push usernameDockerHub/nom-image:tag
conteneur salutation qui utilise le port 9999 comme port externe
--> main.tf
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0.0"
}
}
}
provider "docker" {host = "tcp://@IPciblevagrant:2375"}
resource "docker_image" "salut_img" {
name = "chetouiiftikhar/salut:latest"
keep_locally = false
}
resource "docker_container" "salut_container" {
image = docker_image.salut_img.name
name = "salut_container"
ports {
internal = 8888
external = 9999
}
restart = "unless-stopped" # Politique de redémarrage
}
terraform init
terraform apply
- pour consulter le conteneure lancer dans la ma chine vagrant on utilise la commande :
docker -H tcp://@ipCibleVagrant:2375 ps
à partir de browser de windows on peut consulter le container lancer par terraform dans vagrantcible en tape : @IP cibleVagrant: 9999
Monitorer le système linux de votre VM-LAB avec le dashboard grafana en utilisant prometheus, grafana, alertmanger et node_exporter :
-
pour faire la tache de monitoring on doit d'abord placer les fichiers de configurations sous /etc
- /etc/prometheus/prometheus.yml
- /etc/prometheus/alert-rules.yml
- /etc/alertmanager/alertmanager.yml
pour voir le contenu de ces fichiers consulter le dossier monitoring !!
pour tester l'alert manager on a fait une petite modification dans le alert-rules.yml pour tester le systeme d'alerting en cas ou le disk utilisé est inferieur à 1%
- name: example
rules:
- alert: FilesystemSpaceLow
expr: 100 - (100 * node_filesystem_avail_bytes / node_filesystem_size_bytes) > 1
for: 5m
labels:
severity: warning
annotations:
summary: "Filesystem space is running low"
description: "Filesystem space is running low on instance {{$labels.instance}}"
![image](https://private-user-images.githubusercontent.com/115534833/294652439-4763beca-b294-41f9-9faa-3e77de65055b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ2OTQ1OTQsIm5iZiI6MTcyNDY5NDI5NCwicGF0aCI6Ii8xMTU1MzQ4MzMvMjk0NjUyNDM5LTQ3NjNiZWNhLWIyOTQtNDFmOS05ZmFhLTNlNzdkZTY1MDU1Yi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODI2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgyNlQxNzQ0NTRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02YjFiY2E0YjI3NGE4Y2VmNmRkYTlmY2MxZDBjYjc2ZWUwODFhZjc1ZmY1NWJjZjM0MDU2MDkwYzU0MTQ1OTc1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.DfcrtjNZtGRYQkfAIH2d3BdG2_PCCCbh0Wj7t8sLASM)
- si tout va bien prometheus detect les targets et les regles d'alert ce qui est claire dans l'interface de prometheus:
![image](https://private-user-images.githubusercontent.com/115534833/294652597-b16e1fde-b853-4241-8696-fdcaf8590a59.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ2OTQ1OTQsIm5iZiI6MTcyNDY5NDI5NCwicGF0aCI6Ii8xMTU1MzQ4MzMvMjk0NjUyNTk3LWIxNmUxZmRlLWI4NTMtNDI0MS04Njk2LWZkY2FmODU5MGE1OS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODI2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgyNlQxNzQ0NTRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mODhiN2FhOTJkOGY2YzY4MGZhNjVkMzE3M2JmNTRhOGIxZjhiMjhiMzUxYWM3MzYxMDA4ZDJjNjE3YTExZGJhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.2mWO4MF7X7EuqAiNUPEi61eSl1SOlrdd9mH3QE2CwSY)
![image](https://private-user-images.githubusercontent.com/115534833/294651910-18515f7b-7f8f-4354-a331-c6a630dcddc4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ2OTQ1OTQsIm5iZiI6MTcyNDY5NDI5NCwicGF0aCI6Ii8xMTU1MzQ4MzMvMjk0NjUxOTEwLTE4NTE1ZjdiLTdmOGYtNDM1NC1hMzMxLWM2YTYzMGRjZGRjNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODI2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgyNlQxNzQ0NTRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00NDRkODQzMWRmYWY1MzQzNjcyMDkyYTg4ZTU5MzFjYzU2NjYxNzA5YTU4YmYxYWM1YmIxZDk0YWEzYTZkYWNiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.4ja2gpHKjit9yWMd3q_UOZfZfWVcvF7TkvzHZ6bKiig)
![image](https://private-user-images.githubusercontent.com/115534833/294651970-fedc7dd4-5e90-4455-8f60-50233bb01c51.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ2OTQ1OTQsIm5iZiI6MTcyNDY5NDI5NCwicGF0aCI6Ii8xMTU1MzQ4MzMvMjk0NjUxOTcwLWZlZGM3ZGQ0LTVlOTAtNDQ1NS04ZjYwLTUwMjMzYmIwMWM1MS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODI2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgyNlQxNzQ0NTRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lNTVkNGY5NGUwMWQxYTQzNTE3ZGJhNGIxNzU5ZDk0ZDY5ZGVkZWJjY2Y3ZmFmZDIwN2E5MjdmNDU3MmVjNDFlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9._hCKO3jkzT8VY33QN34MxqCXxb1Ug7Xz4yMd1WwJXm4)
- Rapport des alertes envoyé dans l'interface de alert manager :
![image](https://private-user-images.githubusercontent.com/115534833/294652019-76cfd4e1-2c8a-4580-923b-63701b0aa1bd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ2OTQ1OTQsIm5iZiI6MTcyNDY5NDI5NCwicGF0aCI6Ii8xMTU1MzQ4MzMvMjk0NjUyMDE5LTc2Y2ZkNGUxLTJjOGEtNDU4MC05MjNiLTYzNzAxYjBhYTFiZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODI2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgyNlQxNzQ0NTRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zZjllODdlYjcwODUyMDE3MWJkMzZkNWQxODJhYTQ1MDI5MzE2YzlhNjZmYTc5MmIxZWNkYzk4ODFkMzFlY2RiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.z6c7v3IR2Cii3foPUaB1iXNwMsEziZfxst_YXn99S68)