Note de version 0.2.0 (Bael), et reprise des huit pages de docs/ qui parlaient de dnsmasq ou du DHCP. Ajouts de fond : la section Backend DHCP de la page de configuration, avec la procédure de bascule manuelle et l'avertissement qu'elle ne migre rien ; la section du serveur intégré dans les services ; et dans la page de diagnostic comment interroger la socket de contrôle, probe étant le point de départ le plus rapide quand une VM n'obtient pas d'adresse. Le nom de version se déduit du rang, pas du numéro : deuxième release, deuxième nom de codenames.md. Construit avec sphinx-build -W --keep-going, sans avertissement. Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
156 lines
5.8 KiB
ReStructuredText
156 lines
5.8 KiB
ReStructuredText
Installation d'un hyperviseur
|
|
=============================
|
|
|
|
Cette page installe l'agent sur **un** hyperviseur. Le réseau du cluster — routage entre nœuds,
|
|
plan de contrôle — est traité à part : voir :doc:`/deploiement/index`.
|
|
|
|
Prérequis
|
|
---------
|
|
|
|
Un host Linux avec KVM, sur lequel vous avez ``root``. Les opérations réseau (network
|
|
namespaces, netlink, VXLAN, ebtables, iptables) et QEMU ne fonctionnent que sous Linux.
|
|
|
|
Déploiement
|
|
-----------
|
|
|
|
.. code-block:: bash
|
|
|
|
curl -O https://git.g3e.fr/syonad/two/raw/branch/main/scripts/deploy.sh
|
|
bash ./deploy.sh -t 0.1.0 -i
|
|
|
|
``deploy.sh`` se met à jour lui-même depuis la branche avant toute action — s'il diffère, il se
|
|
réécrit et demande d'être relancé. Il télécharge ensuite binaires, units systemd et scripts
|
|
depuis la release, et les vérifie contre le manifeste ``SHA256SUMS``.
|
|
|
|
.. list-table::
|
|
:header-rows: 1
|
|
:widths: 26 54 20
|
|
|
|
* - Option
|
|
- Effet
|
|
- Défaut
|
|
* - ``-t <tag>``
|
|
- déployer une release donnée
|
|
- dernière
|
|
* - ``-b <branche>``
|
|
- branche utilisée pour l'auto-mise à jour du script
|
|
- ``main``
|
|
* - ``-p <profil>``
|
|
- profil d'host ; seul ``kvm`` installe les units de l'agent
|
|
- ``kvm``
|
|
* - ``-i``
|
|
- préparer l'host : paquets, noyau, réseau
|
|
- désactivé
|
|
* - ``-u <iface>``
|
|
- interface physique d'uplink
|
|
- ``eno1``
|
|
* - ``-B <bridge>``
|
|
- bridge principal, auquel l'uplink est rattaché
|
|
- ``br-000000``
|
|
* - ``-P <bridge>``
|
|
- bridge supplémentaire, créé vide et réservé
|
|
- ``br-public``
|
|
* - ``-R <secondes>``
|
|
- délai avant le redémarrage de secours pendant la migration réseau
|
|
- ``120``
|
|
* - ``-d``
|
|
- dry-run : affiche les commandes sans les exécuter
|
|
- désactivé
|
|
|
|
Les options booléennes actives par défaut se **désactivent** par leur forme longue négative :
|
|
``--nopackages``, ``--nonetwork``, ``--noverify``, ``--noup_script``.
|
|
|
|
.. warning::
|
|
|
|
``--noverify`` désactive la seule vérification d'intégrité des artefacts téléchargés. Ne
|
|
l'utiliser que pour diagnostiquer un manifeste cassé, jamais en déploiement courant.
|
|
|
|
Ce que fait ``-i``
|
|
------------------
|
|
|
|
**Paquets** — ``qemu-system-x86``, ``ovmf``, ``dnsmasq``, ``ebtables``, ``iptables``,
|
|
``nfs-common``, ``jq``, ``curl``. Le service ``dnsmasq`` du système est ensuite désactivé et
|
|
**masqué** : il prendrait le port 53 en concurrence des instances ``dnsmasq@`` que l'agent lance
|
|
dans les netns.
|
|
|
|
``dnsmasq`` reste installé même avec ``dhcp.backend: two`` : le backend intégré ne le remplace que
|
|
pour les subnets créés après la bascule, et le paquet est nécessaire tant qu'un hyperviseur peut
|
|
revenir en arrière. Voir :doc:`/exploitation/configuration`.
|
|
|
|
**Noyau** — chargement de ``br_netfilter``, puis ``net.ipv4.ip_forward = 1`` et
|
|
``net.bridge.bridge-nf-call-iptables = 1``. Cette dernière clé est **requise** par la DNAT vers
|
|
le serveur de metadata : sans elle, iptables ne voit pas le trafic bridgé des VM et cloud-init
|
|
ne se provisionne pas. Contrepartie assumée : tout le trafic inter-VM traverse les tables NAT.
|
|
|
|
**Réseau** — création du bridge réservé, puis rattachement de l'uplink au bridge principal,
|
|
l'adresse et la route par défaut étant déplacées de l'interface physique vers le bridge.
|
|
|
|
.. danger::
|
|
|
|
La migration réseau **coupe le réseau de l'host si elle échoue à mi-parcours**, sans console
|
|
de secours. Deux garde-fous sont en place : un redémarrage de secours armé avant l'opération
|
|
(``-R``, 120 s par défaut) qui ramène la configuration d'origine puisque rien n'est écrit sur
|
|
disque, et l'exécution de la séquence sous systemd plutôt que dans la session SSH, pour
|
|
qu'une coupure de SSH ne l'interrompe pas.
|
|
|
|
Le désarmement n'a lieu **qu'après** un ping réussi vers la passerelle. Prévoir un accès
|
|
physique ou console avant de lancer un ``-i`` à distance sur un host de production.
|
|
|
|
Host sans état
|
|
--------------
|
|
|
|
L'hyperviseur est **stateless** : sa racine est en tmpfs, rien de ce que pose ``-i`` ne survit à
|
|
un redémarrage. ``deploy.sh --bootstrap`` est donc rejoué à chaque démarrage — c'est le
|
|
mécanisme normal, pas une réparation.
|
|
|
|
Binaires installés
|
|
------------------
|
|
|
|
.. list-table::
|
|
:header-rows: 1
|
|
:widths: 20 60 20
|
|
|
|
* - Binaire
|
|
- Rôle
|
|
- Drapeau de config
|
|
* - ``agent``
|
|
- processus principal : API, dispatcher, exécution, watchdog
|
|
- ``-config``
|
|
* - ``metadata``
|
|
- serveur de metadata cloud-init, une instance par VM dans le netns du VPC
|
|
- ``-conf``
|
|
* - ``db``
|
|
- inspection de la base clé-valeur en ligne de commande
|
|
- ``-conf``
|
|
* - ``dhcp``
|
|
- serveur DHCP intégré, une instance par subnet dans le netns du VPC ; démarré uniquement
|
|
avec ``dhcp.backend: two``
|
|
- ``-conf``
|
|
|
|
Les quatre partagent le même fichier, ``/etc/two/agent.yml`` — voir
|
|
:doc:`/exploitation/configuration`. ``dhcp`` reçoit en plus son bridge et ses deux chemins de
|
|
fichiers en paramètres, posés par son script d'enrobage.
|
|
|
|
Mise à jour
|
|
-----------
|
|
|
|
``deploy.sh`` relève les instances ``dnsmasq@``, ``dhcp@`` et ``metadata@`` actives **avant**
|
|
d'arrêter les services, et les redémarre ensuite : c'est la seule façon de savoir lesquelles
|
|
relancer. Arrêter les services à la main avant de lancer le script fait perdre cette liste.
|
|
|
|
Vérifier l'installation
|
|
-----------------------
|
|
|
|
.. code-block:: bash
|
|
|
|
systemctl status agent
|
|
curl -s http://127.0.0.1:8080/vpcs
|
|
|
|
Une liste JSON — vide au premier démarrage — signifie que l'API répond. Passez à
|
|
:doc:`/demarrage/premier-vpc`.
|
|
|
|
.. important::
|
|
|
|
L'API de l'agent **n'a aucune authentification**. Avant d'ouvrir le port au-delà de la boucle
|
|
locale, lisez l'avertissement de :doc:`/exploitation/configuration` : quiconque atteint ce
|
|
port pilote la totalité de l'hyperviseur.
|