Aller au contenu principal

Installer Proxmox VE avec Ansible

Homelab proxmox-ve

Dans le prolongement du précédent guide, où je vous ai expliqué comment configurer une machine de rebond pour sécuriser l'accès à notre infrastructure, nous allons maintenant aborder une étape importante pour ajouter un environnement de virtualisation à notre HomeLab DevOps : l'installation de Proxmox VE sur Debian 12 à l'aide d'Ansible. Ce processus, bien que technique, est essentiel pour qui souhaite déployer une solution robuste de gestion de machines virtuelles et de conteneurs. Grâce à Ansible, nous automatiserons cette installation, rendant la tâche non seulement plus rapide mais aussi reproductible à l'identique sur plusieurs serveurs, assurant ainsi une cohérence et une efficacité optimales de votre infrastructure.

Pourquoi choisir Proxmox VE pour le homelab ?

Pour ceux d'entre vous souhaitant approfondir l'histoire et les origines de Proxmox VE, je vous invite à consulter un guide détaillé que j'ai précédemment rédigé, accessible via ce lien. Là, vous trouverez une mine d'informations sur l'évolution de Proxmox VE, son positionnement dans l'écosystème de la virtualisation et comment il s'est imposé comme une solution de choix face à ses concurrents.

L'un des principaux atouts de Proxmox VE est sa capacité à consolider votre infrastructure sur une seule et même plateforme, permettant ainsi une gestion centralisée de vos ressources. Ceci est particulièrement avantageux dans des environnements complexes, où la simplification de la surveillance et de la maintenance peut significativement réduire les coûts opérationnels et améliorer l'efficacité.

De plus, Proxmox VE intègre nativement des fonctionnalités avancées telles que le clustering, la réplication en direct et la sauvegarde/restore à chaud, offrant ainsi une haute disponibilité et une résilience face aux pannes. La prise en charge des réseaux définis par logiciel (SDN) et des stockages définis par logiciel (SDS) permet une flexibilité accrue dans la configuration et l'optimisation de l'infrastructure selon les besoins spécifiques de chaque projet.

Prérequis à l'installation

Avant de plonger dans l'installation de Proxmox VE sur une machine Debian 12 via Ansible, il est essentiel de s'assurer que certains prérequis sont bien en place. Ces prérequis concernent à la fois le matériel et le logiciel et leur vérification garantit une installation sans encombre.

Tout d'abord, du côté matériel, votre machine doit répondre à des spécifications minimales pour exécuter Proxmox VE de manière optimale. Bien que Proxmox VE puisse techniquement fonctionner sur des configurations matérielles modestes, je recommande vivement de disposer au minimum d'un processeur multi-cœur, de 16 Go de RAM et de suffisamment d'espace disque pour vos machines virtuelles et conteneurs. De plus, comme le sujet de ce guide concerne une installation sur une machine avec deux cartes réseau, assurez-vous que ces deux interfaces sont correctement reconnues par Debian. Ex de configuration

Il vous faut aussi un petit switch 4/8 ports qui sera connecté à la seconde interface réseau de la machine de rebond et sur lequel vous connecterez aussi la machine proxmox.

Sur le plan logiciel, votre système doit être une installation fraîche de Debian 12, sans environnement de bureau. Proxmox VE sera installé par-dessus ce système, transformant ainsi votre machine en un puissant hôte de virtualisation.

L'installation de Proxmox VE via Ansible nécessite, bien entendu, que Ansible soit installé sur votre machine de contrôle, dans mon cas il s'agit de la machine de rebond.

Enfin, assurez-vous d'avoir accès à un utilisateur disposant des droits sudo sur la machine cible, ainsi que la possibilité de vous connecter à cette machine via SSH.

Avec ces prérequis vérifiés et en place, vous êtes prêt à procéder à l'installation de Proxmox VE sur votre machine Debian 12, en utilisant le playbook Ansible que je vous fournirai dans les prochaines sections.

Configuration de l'environnement Ansible et déploiement de Proxmox VE

Une fois que vous avez préparé votre système Debian 12 et installé Ansible sur votre machine de contrôle, l'étape suivante consiste à configurer votre environnement Ansible pour déployer Proxmox VE. Cette configuration comprend l'ajout de votre machine cible (sur laquelle Proxmox VE sera installé) dans l'inventaire d'Ansible et l'écriture du rôle Ansible qui sera utilisé pour l'installation.

Ajout de la machine Proxmox dans l'inventaire Ansible

L'inventaire Ansible est un fichier qui répertorie les machines sur lesquelles Ansible peut exécuter des tâches. Pour ajouter votre serveur Debian 12 qui accueillera Proxmox VE, ouvrez ou créez un fichier d'inventaire dans votre répertoire Ansible. Vous pouvez nommer ce fichier hosts (ou tout autre nom de votre choix) et y ajouter les informations suivantes :

all:
children:
bastions:
hosts:
bastion:
ansible_host: 192.168.1.92
proxmoxs:
hosts:
proxmox1:
ansible_host: 192.168.20.10

Dans cet exemple, proxmoxs est le groupe contenant votre serveur Proxmox. proxmox1 est l'alias de votre serveur, ansible_host est l'adresse IP de votre serveur. Assurez-vous de remplacer ces valeurs par celles correspondant à votre configuration.

Ecriture d'un playbook pour configurer tous les serveurs

Je vois propose un playbook Ansible pour configurer tous les futurs serveurs en exécutant une série de tâches et en appliquant des rôles spécifiques. Il vise à automatiser des configurations communes telles que la gestion des droits sudo, la personnalisation du message du jour (MOTD) et la configuration du service SSH :

---
- name: Configure All
hosts: all
gather_facts: false
become: true
vars:
user: bob
tasks:
- name: Make bob sudoers
community.general.sudoers:
name: "{{ user }}"
user: "{{ user }}"
nopassword: true
commands: ALL
roles:
- role: stephrobert.bootstrap
- role: stephrobert.motd
vars:
motd_banner: " {{ ansible_hostname }} "
- role: stephrobert.sshd
vars:
sshd_allowagentforwarding: "yes"
sshd_allowtcpforwarding: "yes"
sshd_allowusers: bob

Écriture du rôle Ansible pour l'installation de Proxmox VE

Un rôle Ansible permet de regrouper des tâches liées qui accomplissent un objectif commun, en l'occurrence, l'installation de Proxmox VE. Pour créer un rôle, vous devez structurer votre projet Ansible avec les dossiers et fichiers suivants :

roles/proxmox
├── defaults
│ └── main.yml
├── files
│ ├── proxmox1.robert.local-key.pem
│ └── proxmox1.robert.local.pem
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
└── vars
└── main.yml

Dans le dossier tasks, le fichier main.yml contiendra toutes les tâches nécessaires à l'installation de Proxmox VE. Voici le contenu de ce fichier :

---
- name: Remove packages
become: true
ansible.builtin.package:
name:
- os-prober
state: absent
- name: Install packages
become: true
ansible.builtin.package:
name:
- gpg
state: present
- name: Clean /etc/hosts
become: true
ansible.builtin.lineinfile:
path: /etc/hosts
regexp: "^127.0.1.1.*"
owner: root
group: root
mode: "0644"
state: absent
- name: Add host in /etc/hosts
become: true
ansible.builtin.lineinfile:
path: /etc/hosts
regexp: "^{{ ansible_all_ipv4_addresses[0] }}"
owner: root
group: root
mode: "0644"
state: present
line: "{{ ansible_all_ipv4_addresses[0] }} {{ ansible_hostname }}.{{ domainname }} {{ ansible_hostname }}"
- name: Set IPV4
become: true
ansible.posix.sysctl:
sysctl_file: /etc/sysctl.d/proxmox.conf
name: "{{ item.name }}"
value: "{{ item.value }}"
state: present
loop:
- {name: net.ipv4.conf.all.rp_filter, value: 1 }
- {name: net.ipv4.icmp_echo_ignore_broadcasts, value: 1 }
- {name: net.ipv4.ip_forward, value: 1 }
- name: Add proxmox gpg key
become: true
ansible.builtin.get_url:
url: "https://enterprise.proxmox.com/debian/proxmox-release-{{ ansible_distribution_release }}.gpg"
dest: "/etc/apt/trusted.gpg.d/proxmox-release-{{ ansible_distribution_release }}.gpg"
owner: root
group: root
mode: "0644"
- name: Add proxmoxve archive repository and update cache
become: true
ansible.builtin.apt_repository:
repo: "deb [arch=amd64] http://download.proxmox.com/debian/pve {{ ansible_distribution_release }} pve-no-subscription"
state: present
update_cache: true
- name: Remove repo
become: true
ansible.builtin.file:
path: /etc/apt/sources.list.d/pve-enterprise.list
state: absent
- name: Full upgrade
become: true
ansible.builtin.apt:
update_cache: true
upgrade: full
- name: Install Proxmox and tools
become: true
ansible.builtin.package:
name:
- proxmox-ve
- ksm-control-daemon
- locales-all
- chrony
- libguestfs-tools
state: present
- name: Remove repo
become: true
ansible.builtin.file:
path: /etc/apt/sources.list.d/pve-enterprise.list
state: absent
- name: Remove kernel
become: true
ansible.builtin.package:
name: "linux-image-6.1*"
state: absent
- name: Copy interface
become: true
ansible.builtin.copy:
dest: /etc/network/interfaces
content: "{{ proxmox_interfaces }}"
owner: root
group: root
mode: "0644"
- name: Reload networking
become: true
ansible.builtin.command:
cmd: ifreload -a
- name: Wait for Proxmox to come back online
ansible.builtin.wait_for:
port: 22
host: '{{ ansible_host }}'
timeout: 60
- name: Copy certificats
become: true
ansible.builtin.copy:
src: proxmox1.robert.local.pem
dest: /etc/pve/nodes/proxmox1/pveproxy-ssl.pem
owner: root
group: www-data
mode: "0640"
- name: Copy certificats
become: true
ansible.builtin.copy:
src: proxmox1.robert.local-key.pem
dest: /etc/pve/nodes/proxmox1/pveproxy-ssl.key
owner: root
group: www-data
mode: "0640"
- name: Restart pve proxy
become: true
ansible.builtin.service:
name: pveproxy
state: restarted

Dans le fichier définissant les variables par défaut, il faudra modifier si besoin le contenu :

proxmox_interfaces : |
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto enp2s0
iface enp2s0 inet dhcp

iface enp3s0 inet manual

auto vmbr0
iface vmbr0 inet static
address 192.168.3.1/24
bridge-ports enp3s0
bridge-stp off
bridge-fd 0

Une fois votre rôle écrit, vous pouvez créer un playbook principal qui utilise ce rôle pour déployer Proxmox VE. Voici un exemple de playbook :

---
- name: Install Proxmox
hosts: proxmoxs
roles:
- role: stephrobert.proxmox

Ce playbook cible le groupe proxmoxs défini dans votre fichier d'inventaire et exécute le rôle stephrobert.proxmox pour installer Proxmox VE.

Avec cette configuration, vous êtes prêt à exécuter votre playbook Ansible et à automatiser l'installation de Proxmox VE sur votre serveur Debian 12. La combinaison de l'inventaire, du rôle et du playbook vous offre un moyen puissant et flexible d'automatiser et de gérer vos déploiements de manière reproductible et efficiente.

Configuration de ISC-DHCP-Relay pour la transmission des trames DHCP

Après avoir installé Proxmox VE sur votre serveur et configuré votre environnement de virtualisation, une étape importante pour assurer la connectivité réseau adéquate de vos machines virtuelles (VM) est de configurer un relais DHCP. Ce relais permettra de transmettre les requêtes DHCP entre différents segments de votre réseau, en particulier entre le bridge virtuel vmbr0 et votre interface physique enp2s0.

Installation de ISC-DHCP-Relay

ISC-DHCP-Relay est un programme qui écoute sur un réseau spécifié pour les requêtes DHCP/BOOTP et les retransmet à un ou plusieurs serveurs DHCP configurés. Pour installer ISC-DHCP-Relay sur votre système Proxmox VE, exécutez la commande suivante :

sudo apt-get update
sudo apt-get install isc-dhcp-relay

Cette commande téléchargera et installera le paquet isc-dhcp-relay ainsi que toutes les dépendances nécessaires.

Configuration de ISC-DHCP-Relay

Après l'installation, vous devez configurer ISC-DHCP-Relay pour spécifier les interfaces sur lesquelles écouter les requêtes DHCP et l'adresse IP du serveur DHCP auquel ces requêtes doivent être transmises. Vous trouverez le fichier de configuration principal sous /etc/default/isc-dhcp-relay.

Ouvrez ce fichier avec votre éditeur de texte préféré :

sudo nano /etc/default/isc-dhcp-relay

Dans ce fichier, vous devez définir plusieurs options importantes :

  • SERVERS: l'adresse IP de votre serveur DHCP. Si votre serveur DHCP se trouve sur le réseau connecté à enp2s0, indiquez ici son adresse IP.
  • INTERFACES: les interfaces réseau sur lesquelles le relais doit écouter les requêtes DHCP. Dans notre cas, vous voudrez écouter sur vmbr0 (le bridge virtuel de Proxmox) et enp2s0 (votre interface réseau physique).
  • OPTIONS: options supplémentaires pour le daemon de relais DHCP.

Votre configuration devrait ressembler à quelque chose comme ceci :

SERVERS="192.168.20.1"
INTERFACES="vmbr0 enp2s0"
OPTIONS=""

Remplacez "192.168.20.1" par l'adresse IP de votre serveur DHCP.

Après avoir configuré ces options, sauvegardez le fichier et redémarrez le service isc-dhcp-relay pour appliquer les modifications :

sudo systemctl restart isc-dhcp-relay

Vérification de la configuration

Pour vérifier que ISC-DHCP-Relay fonctionne correctement, vous pouvez créer une VM sur votre serveur proxmox fraichment configuré. Avec ISC-DHCP-Relay correctement configuré, vos machines virtuelles sur Proxmox VE pourront obtenir des adresses IP depuis votre serveur DHCP principal, assurant ainsi une connectivité réseau fluide et intégrée, même dans des configurations réseau complexes. Je vais ajouter ces tâches dans le playbook.

Conclusion

L'installation de Proxmox VE sur Debian 12 à l'aide d'Ansible représente une approche efficace pour simplifier l'installation, mais également garantir une reproductibilité et une cohérence essentielles dans la gestion des infrastructures IT. La configuration supplémentaire de ISC-DHCP-Relay pour la transmission des trames DHCP entre différentes interfaces et segments réseau souligne l'importance d'une configuration réseau soignée pour le bon fonctionnement de vos machines virtuelles.

Je vous encourage à continuer d'explorer les fonctionnalités de Proxmox VE et d'Ansible, à tester différentes configurations et à optimiser votre environnement pour répondre au mieux à vos besoins spécifiques. L'avenir de l'infrastructure IT repose sur la virtualisation et l'automatisation et avec Proxmox VE, vous êtes bien équipé pour relever les défis de demain.

Rappel : Le code de mon projet, incluant les playbooks Ansible et les configurations, est disponible dans ce dépôt GitHub.