Set-OPS-Public/playbooks/maintenance/devis-mtu.yml

61 lines
2.4 KiB
YAML
Raw Normal View History

mtu : le 1450 de la zone n'atteignait pas les invites Question de l'exploitant : « je ne vois nulle part un MTU a 1450 ». Fondee. Le 1450 existait bien — MTU_OVERLAY_DEFAUT dans underlay.py, dont P23 derive sa garde (transport >= overlay + 50), pose par le devis SDN sur chaque zone, et verifie sur le cluster. Mais il ne se propage pas a la carte de l'invite : les 14 VM tournaient a 1500, et cloner_vm_debian.yml n'avait aucune occurrence de `mtu`. La VM emettait donc des trames que son propre chemin ne pouvait pas encapsuler — la panne que le registre des flux appelle « la plus couteuse a diagnostiquer ». Invisible parce que les 14 VM vivent sur asgard : deux VM du meme hyperviseur communiquent par le pont local, sans encapsulation. Le defaut serait apparu au premier eclatement de la flotte — c'est-a-dire quand il faudra heberger les deux tenants ensemble. Corrige en DEUX endroits, avec `mtu=1` (« herite du pont ») plutot que 1450 en dur : juste en SDN comme hors SDN, et encore juste le jour des trames jumbo. Le GABARIT le porte — proposition de l'exploitant, meilleure que la mienne : elle couvre les clonages qui ne passent pas par le playbook. Et le playbook le repose a chaque clone, parce qu'un gabarit se RECAPTURE et que ce qui n'est pas versionne se perd en silence. make mtu-mesurer (7e devis) rattache chaque hote a sa zone par son pont derive et lit le MTU attendu dans devis_sdn.py. Ecart trouve sur 14 hotes du premier coup, puis confirme corrige. ET J'AI CASSE LA FLOTTE EN CORRIGEANT : applique aux cartes de VM EN MARCHE, le changement detache et rebranche la carte sans que l'invite reconfigure son interface. 0/14 joignables pendant trois minutes. L'agent qemu, independant du reseau invite, a permis de constater et de redemarrer par l'API. Dans le playbook la meme tache s'execute AVANT le demarrage du clone : aucun risque. Sur une VM en service : poser la config, puis redemarrer — une seule d'abord. Verifie : mtu-mesurer CONFORME 14/14 a 1450, prouver.py 35 OK, ansible-lint production. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 17:54:03 -04:00
---
# Devis du MTU des invites — RELEVE seul. Ne modifie rien (D-23).
#
# Question posee : la carte d'une VM porte-t-elle le MTU de la zone a laquelle elle est
# reellement attachee ?
#
# En SDN EVPN, VXLAN coute 50 octets : la zone est a 1450 quand le transport est a 1500.
# Le MTU de la ZONE est pose par `make sdn-appliquer` cote hyperviseur — mais l'invite,
# lui, nait a 1500 si sa carte ne l'herite pas explicitement (`mtu=1` chez Proxmox).
#
# CE QUE CA PRODUIT QUAND C'EST FAUX, et pourquoi ca merite une garde : la VM emet des
# trames que son propre chemin ne peut pas encapsuler. La connexion s'etablit, les petites
# requetes passent, les grosses reponses restent suspendues — le registre des flux la
# decrit comme « la panne la plus couteuse a diagnostiquer », et c'est pour elle qu'il
# declare l'ICMP « fragmentation necessaire ».
#
# INVISIBLE TANT QUE TOUTES LES VM VIVENT SUR LE MEME HYPERVISEUR : elles communiquent
# alors par le pont local, sans encapsulation, et rien ne rencontre le 1450. Mesure du
# 2026-08-10 : zones a 1450, les 14 invites a 1500, aucun symptome — parce que les 14
# etaient sur `asgard`.
#
# make mtu-mesurer
- name: Relevé du MTU vu par les invités
hosts: hotes_actifs
become: false
gather_facts: false
tasks:
- name: Lire le MTU de l'interface principale
ansible.builtin.slurp:
src: "/sys/class/net/{{ devis_mtu_interface | default('eth0') }}/mtu"
register: devis_mtu_lu
failed_when: false
- name: Retenir le MTU de cet hôte
ansible.builtin.set_fact:
devis_mtu_hote: >-
{{ (devis_mtu_lu.content | default('') | b64decode | trim | int)
if devis_mtu_lu.content is defined else 0 }}
- name: Déposer le relevé
hosts: localhost
connection: local
become: false
gather_facts: false
tasks:
- name: Écrire le relevé sur le contrôleur
ansible.builtin.copy:
dest: "{{ playbook_dir }}/../../instance/devis-mtu.json"
mode: "0600"
content: >-
{{ {'invites': dict(groups['hotes_actifs']
| map('extract', hostvars, 'devis_mtu_hote') | list
| zip(groups['hotes_actifs']) | map('reverse') | list),
'ponts': dict(groups['hotes_actifs']
| map('extract', hostvars, 'proxmox_pont') | list
| zip(groups['hotes_actifs']) | map('reverse') | list)}
| to_nice_json }}