Aller au contenu principal

Installer Proxmox VE avec Ansible

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.