Aller au contenu

Initialisation de mon HomeLab

logo

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 :

Sur le premier mini-pc tourne :

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 :

Terminal window
ip link | awk -F: '$0 !~ "lo|vir|wl|^[^0-9]"{print $2;getline}'
enp1s0

Il faut mettre les bons droits sur le fichier :

Terminal window
chmod 600 /etc/netplan/00-installer-config.yaml

Pour appliquer la configuration :

Terminal window
sudo netplan apply

Pour voir si c’est bien br0 qui porte l’adresse réseau :

Terminal window
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 forever
2: 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:ff
4: 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.

Terminal window
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

Terminal window
asdf plugin add mkcert https://github.com/salasrod/asdf-mkcert.git
asdf install mkcert latest
asdf global mkcert latest
## Génération du CA
mkcert -install
cd certificats
cp ~/.local/share/mkcert/rootCA* .
mkcert 'devbox1.robert.local' localhost 127.0.0.1 ::1
mkcert 'devbox2.robert.local' localhost 127.0.0.1 ::1

Une fois les machines provisionnées les installations sont faites avec Ansible :

Terminal window
## Installation des outils de base
ansible-playbook -i inventory playbooks/provision.yml
## Installation de Kubernetes et Libvirt
ansible-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 :

Terminal window
vagrant up
# On utilise l'inventaire généré par vagrant
ansible-playbook -i ./.vagrant/provisioners/ansible/inventory playbooks/install.yml

La suite

L’automatisation de tout le reste AWX, Gitlab runners, Nexus, Rundeck, …