Aller au contenu principal

Initialisation de mon HomeLab

· 3 minutes de lecture
Stéphane ROBERT
Consultant DevOps

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 :

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

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 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.

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.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 :

## 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 :

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, ...