Initialisation de mon HomeLab
Objectifs
Rappel sur les objectifs principaux de ce projet :
-
Le premier, c’est de vous aider à monter en compétences sur les outils que l’on utilise le plus souvent dans la mise en place d’une démarche Devops.
-
Le second permettre de le reconstruire à tout moment à partir de son code.
Composition de Mon Home Lab
Mon Home Lab Devops se compose actuellement de :
- deux mini-pc :
- un switch Ethernet ↗ 8 ports (8 pour ajouter les raspberry Pi) raccordé à ma box internet.
Sur le premier mini-pc tourne :
- un k3s mono noeud hébergeant les runners gitlab et Ansible AWX
- un serveur NFS pour y déposer les données persistantes
Sur le second :
- Libvirt est activé et prêt à héberger des applications à la demande du type : Nexus Repository Manager, Rundeck (en cours d’écriture). D’autres vont suivre. Le tout sera instancié avec du Terraform.
Provisionnement des machines
J’ai fait l’installation de la version server d’Ubuntu 22.04 avec juste le package OpenSSH (synchro des clés depuis mon compte github). J’ai autorisé le compte admuser, créé pendant l’installation, à utiliser sudo sans mot de passe ↗.
Pour simplifier la gestion des machines :
- Sur ma box internet, j’ai alloué des baux statiques.
- J’ai ajouté au fichier /etc/hosts de la machine depuis laquelle je fais l’administration les adresses IP.
Configuration bridge
Pour créer le bridge sur les machines libvirt, j’utilise cette configuration netplan /etc/netplan/00-installer-config.yaml
:
network: ethernets: enp1s0: dhcp4: no bridges: br0: dhcp4: true interfaces: - enp1s0 nameservers: addresses: - 192.168.1.1 search: - robert.local version: 2 renderer: NetworkManager
Modifier le nom de l’interface si besoin. Pour avoir son nom vous pouvez utiliser cette commande :
ip link | awk -F: '$0 !~ "lo|vir|wl|^[^0-9]"{print $2;getline}'enp1s0
Il faut mettre les bons droits sur le fichier :
chmod 600 /etc/netplan/00-installer-config.yaml
Pour appliquer la configuration :
sudo netplan apply
Pour voir si c’est bien br0 qui porte l’adresse réseau :
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000 link/ether 68:1d:ef:11:3d:36 brd ff:ff:ff:ff:ff:ff4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether ba:a4:02:90:14:ef brd ff:ff:ff:ff:ff:ff inet 192.168.1.29/24 brd 192.168.1.255 scope global dynamic noprefixroute br0 valid_lft 85989sec preferred_lft 85989sec inet6 fe80::b8a4:2ff:fe90:14ef/64 scope link valid_lft forever preferred_lft forever
Première Installation
Clonez le repository ↗ sur votre machine servant à l’installation.
git clone https://gitlab.com/b4288/infra-as-code-homelab.git
Avant de passer à l’installation il faut générer des certificats avec mkcert
asdf plugin add mkcert https://github.com/salasrod/asdf-mkcert.gitasdf install mkcert latestasdf set --home mkcert latest
## Génération du CA
mkcert -install
cd certificatscp ~/.local/share/mkcert/rootCA* .mkcert 'devbox1.robert.local' localhost 127.0.0.1 ::1mkcert 'devbox2.robert.local' localhost 127.0.0.1 ::1
Une fois les machines provisionnées les installations sont faites avec Ansible :
## Installation des outils de baseansible-playbook -i inventory playbooks/provision.yml## Installation de Kubernetes et Libvirtansible-playbook -i inventory playbooks/install.yml
Avant, il faudra certainement adapter certaines choses dans les playbooks ou dans l’inventaire.
Vous pouvez aussi utiliser le Vagrantfile pour tester le tout avant :
vagrant up# On utilise l'inventaire généré par vagrantansible-playbook -i ./.vagrant/provisioners/ansible/inventory playbooks/install.yml
La suite
L’automatisation de tout le reste AWX, Gitlab runners, Nexus, Rundeck, …