| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| admin:procedures:creation_machine_virtuelle [2017/07/13 13:41] – [Derniers détails] fpoulain | admin:procedures:creation_machine_virtuelle [2026/03/03 15:51] (Version actuelle) – Correction typographique fhenry2 |
|---|
| ====== Création d'une machine virtuelle « bling » ====== | ====== Création d'une machine virtuelle « bling » ====== |
| | |
| | ===== Configuration virt-manager ===== |
| | |
| | Dans un premier temps, se connecter avec ''virt-manager'' à l'aide de la commande : |
| | <code bash> |
| | virt-manager --connect 'qemu+ssh://root@korat.chapril.org/system?keyfile=~/.ssh/chapril.pub' |
| | </code> |
| | |
| | Il est également possible d'indiquer les détails de la connexion via //Fichier//, //Ajout d'une connexion// : |
| | {{:admin:procedures:2018-05-05-122210_385x343_scrot.png?400|Fenêtre d’ajout de connexion}} |
| | |
| | <note tip> |
| | Il est possible de modifier les URI précédemment saisies à l'aide de la commande ''dconf-editor'' : |
| | <code bash> |
| | dconf-editor /org/virt-manager/virt-manager/connections/uris |
| | </code> |
| | </note> |
| |
| ===== Clonage du modèle ===== | ===== Clonage du modèle ===== |
| |
| Pour créer la machine virtuelle, se connecter au virt-manager et cloner la machine « modele » via un clic droit. | Cloner la machine ''template-debianXX'' via un clic droit. |
| |
| {{ :admin:procedures:capture_d_ecran_de_2017-07-12_15_53_45.png?direct&300 |Interface virt-manager}} | {{ :admin:procedures:capture_d_ecran_de_2017-07-12_15_53_45.png?direct&300 |Interface virt-manager}} |
| |
| Une fenêtre s'ouvre, changez le nom de la machine et générer une nouvelle MAC en cliquant sur le bouton « détails » de la ligne « réseau ». | Une fenêtre s'ouvre : |
| | - Changer le nom de la machine ; |
| | - Dans la section ''Storage'', vérifier que la case est cochée (colonne ''Cloner'', seconde ligne) afin que le disque de la VM source soit cloné ou copié. |
| |
| {{ :admin:procedures:capture_d_ecran_de_2017-07-12_15_54_30.png?direct&300 | Interface de clonage}} | {{ :admin:procedures:cloner_disque-screenshot_2024-12-08.png?direct&300 | Cloner le disque }} |
| |
| <note important>Assurez vous de générer une nouvelle MAC, sinon vous risquez de casser le réseau du cluster !</note> | Toujours dans la section ''Storage'', après avoir sélectionné la ligne ''Cloner ce disque'', cliquer sur le bouton ''Détails'' afin de modifier le chemin du disque de la nouvelle VM. |
| | Si le service se nomme ''SERVICE'' alors remplacer ''/dev/vg_vms/vm-source-clone'' par ''/dev/vg_vms/vm-SERVICE''. |
| |
| {{ :admin:procedures:capture_d_ecran_de_2017-07-12_15_54_35.png?direct&300 | Nouvelle MAC}} | {{ :admin:procedures:renommer_disque_vm_screenshot_2024-12-08.png?direct&300 | Renommer le disque de la VM }} |
| |
| Puis validez. | Puis validez en cliquant sur ''Cloner''. |
| |
| {{ :admin:procedures:capture_d_ecran_de_2017-07-12_15_54_53.png?direct&300 | Barre de progression}} | {{ :admin:procedures:capture_d_ecran_de_2017-07-12_15_54_53.png?direct&300 | Barre de progression}} |
| |
| Ce modèle possède de base les clés des adminsys, une conf réseau ipv4 fonctionnelle, les dépôts chapril, quelques dépendances et fichiers de conf sympathiques (sexy-chapril et depends-chapril) et un postfix satellite configuré. | <note important> |
| | Les deux adresses MAC de la nouvelle VM sont automatiquement modifiées lors de l'opération de clonage. |
| | Cependant, lorsque deux VM lancées présentent des adresses MAC identiques, la configuration réseau de l'hyperviseur devient incorrecte, cassée ou dysfonctionnelle. |
| | Vérifier alors que les deux adresses MAC de la nouvelle VM sont bien différentes de celles de la machine source. |
| | Lorsque le paquet Debian ''virtinst'' est installé, il est possible de générer une adresse MAC à l'aide d’une commande : |
| | <code bash> |
| | PYTHONPATH=/usr/share/virt-manager python3 -c 'import virtinst; print(virtinst.devices.interface._random_mac(virtinst.VirtinstConnection("qemu:///system")))' |
| | </code> |
| | </note> |
| | |
| | Il faut ensuite utiliser la commande ''virt-sysprep'' (paquet Debian ''guestfs-tools'') sur l'hyperviseur pour supprimer les fichiers de configuration liés à la VM source ((Ces fichiers sont la clef SSH de la machine, le //machine ID//, le nom de la VM et les fichiers de //logs//.)). |
| | |
| | Si le service est ''bd'' : |
| | <code bash> |
| | virt-sysprep -d bd --hostname bd \ |
| | --operations defaults,-lvm-uuids \ |
| | --run-command 'dpkg-reconfigure openssh-server' |
| | </code> |
| | |
| | Sur l'hyperviseur, il faut enfin réviser les fichiers de configuration de la nouvelle VM. |
| | Pour un service nommé ''SERVICE'' : |
| | - ''/etc/libvirt/qemu/SERVICE.xml'' |
| | - ''/etc/lvm/backup/vg_vms'' |
| | |
| | La machine peut alors être démarrée. |
| | |
| | Ce modèle possède de base : |
| | * Les clefs des adminsys ; |
| | * Une configuration réseau IPv4 fonctionnelle ; |
| | * Les dépôts Chapril ; |
| | * Quelques dépendances et fichiers de configuration sympathiques tels que ''sexy-chapril'' et ''depends-chapril'' ; |
| | * Un //postfix satellite// configuré. |
| | |
| | Vous pouvez le démarrer depuis ''virt-manager''. |
| |
| Vous pouvez le démarrer depuis le virt-manager. | |
| ===== Configuration réseau ===== | ===== Configuration réseau ===== |
| |
| Un fois le modèle cloné et démarré, il faut trouver son adresse IP depuis l'hote : | Pour plus de commodité, renommer les interfaces TAP de la VM en exécutant la commande ''virsh edit bling'' sur l'hyperviseur hébergeant la VM : |
| | <code> |
| | # Chercher le bloc <interface type='network'> |
| | # Ajouter dans le bloc la ligne suivante, puis enregistrer et quitter : |
| | <target dev='vm-bling'/> |
| | |
| | # Chercher le bloc <interface type='ethernet'> |
| | # Ajouter dans le bloc la ligne suivante, puis enregistrer et quitter : |
| | <target dev='vm-bling-ipv6'/> |
| | </code> |
| | |
| | ==== IPv4 ==== |
| | |
| | Un fois le modèle cloné et démarré, il faut trouver une adresse IP libre pour l'hôte : |
| | <code bash> |
| | virsh net-dhcp-leases default |
| | </code> |
| <code> | <code> |
| # virsh net-dhcp-leases default | |
| Expiry Time MAC address Protocol IP address Hostname Client ID or DUID | Expiry Time MAC address Protocol IP address Hostname Client ID or DUID |
| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| </code> | </code> |
| |
| Pour le moment cette machine s'appelle toujours « modele ». Son IP est donc 192.168.1.42. | Récupérer son adresse MAC : |
| | <code bash> |
| | grep -i mac /etc/libvirt/qemu/bling.xml |
| | </code> |
| |
| **Sur les deux** hotes, nous allons attribuer définitivement le bail IP à cette nouvelle machine. Cette manipulation est donc à faire sur les deux hôtes (maine et coon) : | Pour le moment cette machine s'appelle toujours ''modele''. |
| # virsh net-update default add ip-dhcp-host "<host mac='52:54:00:ef:42:42' name='bling' ip='192.168.1.42' />" --live --config | Son adresse IP est donc ''192.168.1.42''. |
| | |
| | **Sur les deux** hôtes, nous allons attribuer définitivement le bail IP à cette nouvelle machine. |
| | Cette manipulation est donc à faire sur les deux hôtes (Maine et Coon) : |
| | <code bash> |
| | virsh net-update default add ip-dhcp-host "<host mac='52:54:00:ef:42:42' name='bling' ip='192.168.1.42' />" --live --config |
| | </code> |
| |
| Par ailleurs, pour le moment la définition DNS est manuelle. Il faut donc créer l'entrée nécessaire sur la machine dns: | Par ailleurs, pour le moment la définition DNS est manuelle. |
| <code conf /etc/bind/zones/masters/vm.include> | Il faut donc créer l'entrée nécessaire sur la machine ''dns'' : |
| | <code - /etc/bind/zones/masters/vm.include> |
| bling.cluster A 192.168.1.42 | bling.cluster A 192.168.1.42 |
| </code> | </code> |
| |
| On reload ensuite la zone interne : | <note important> |
| # rndc reload chapril.org in internal | Penser à augmenter le //serial// dans le fichier ''chapril.org-int'' |
| | </note> |
| | |
| | On recharge ensuite la zone interne : |
| | <code bash> |
| | rndc reload chapril.org in internal |
| | </code> |
| | |
| | ==== IPv6 ==== |
| | |
| | === Sur les deux hyperviseurs === |
| | |
| | Dans ''/etc/firehol/firehol.conf'', ajouter l'interface ''vm-bling-ipv6'' au contenu de la variable ''vmIp6Ifaces'' puis redémarrer le service ''firehol''. |
| | |
| | Si le service est ''bd'' mettre à jour ''/etc/libvirt/hooks/qemu'' avec un bloc : |
| | <code bash> |
| | "bd") |
| | case "$action" in |
| | "started") |
| | [[ $step = "begin" ]] || { echo step must be begin; exit 0; } |
| | # La route dépend de l'adresse MAC de l'interface dédiée à l'IPv6 : |
| | # address="$(virsh dumpxml bling |grep -A 1 ethernet | grep -oP "([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}")"; echo "fe80::5054:ff:fe${address:0:2}:${address:2:4}" |
| | /sbin/ip route add 2a01:4f8:222:6a1::42/128 via fe80::5054:ff:fec3:d645 dev vm-bling-ipv6 |
| | /sbin/ip route add 2a01:4f8:222:664::42/128 via fe80::5054:ff:fec3:d645 dev vm-bling-ipv6 |
| | ;; |
| | "stopped") |
| | [[ $step = "end" ]] || { echo step must be end; exit 0; } |
| | /sbin/ip route del 2a01:4f8:222:6a1::42/128 via fe80::5054:ff:fec3:d645 dev vm-bling-ipv6 |
| | /sbin/ip route del 2a01:4f8:222:664::42/128 via fe80::5054:ff:fec3:d645 dev vm-bling-ipv6 |
| | ;; |
| | *) |
| | echo action $action not supported |
| | exit 0 |
| | ;; |
| | esac |
| | ;; |
| | </code> |
| | |
| | === Sur la VM === |
| | |
| | Sur la VM, modifier le fichier ''/etc/network/interfaces'': |
| | <code> |
| | # The primary network interface |
| | allow-hotplug ens3 |
| | iface ens3 inet dhcp |
| | |
| | post-up ip route replace default via 192.168.1.254 |
| | |
| | # The ipv6 network interface |
| | |
| | allow-hotplug ens8 |
| | iface ens8 inet6 static |
| | address 2a01:4f8:222:664::42/128 |
| | # gateway: address="$(ip -j link show dev ens8 | jq -r '.[] | .address[9:] | gsub(":";"")')"; echo "fe80::fc54:ff:fe${address:0:2}:${address:2:4}" |
| | gateway fe80::fc54:ff:fec3:d645 |
| | post-up ip -6 address add 2a01:4f8:222:6a1::42/128 dev ens8 |
| | </code> |
| |
| ===== Derniers détails ===== | ===== Derniers détails ===== |
| |
| On peut se ''ssh''-er sur la machine : | ==== Nom de la machine ==== |
| ssh bling | |
| |
| On défini son nom : | On peut se connecter à la machine ''bling'' via le SSH : |
| hostnamectl set-hostname bling.cluster.chapril.org | <code bash> |
| | ssh bling |
| | </code> |
| |
| On ajoute à /etc/hosts: | On définit son nom : |
| <code conf /etc/hosts> | <code bash> |
| 127.0.0.1 bling.cluster.chapril.org bling | hostnamectl set-hostname bling.cluster.chapril.org |
| </code> | </code> |
| |
| On pense à changer le mot de passe root et à le noter dans le [[admin:procedures:configuration_password_store|pass]]. Si vous manquez d'inspiration, la commande ''pwgen 20'' est vote amie. | On ajoute une ligne à ''/etc/hosts'' : |
| passwd | <code - /etc/hosts> |
| | 127.0.1.1 bling.cluster.chapril.org bling |
| | </code> |
| | |
| | ==== Configuration Postfix ==== |
| | |
| | Si Postfix n'est pas installé alors mettre à niveau puis [[admin:procedures:installation_postfix_satellite|installer le satellite Postfix]]. |
| | |
| | Vérifier à corriger les champs utilisant la valeur ''modele'' : |
| | <code - /etc/postfix/main.cf> |
| | […] |
| | myhostname = bling.cluster.chapril.org |
| | mydestination = $myhostname,bling.cluster.chapril.org, localhost.chapril.org, localhost |
| | […] |
| | </code> |
| | |
| | ==== Mot de passe root ==== |
| | |
| | On pense à changer le mot de passe de l’utilisteur ''root'' et à le noter dans le //[[admin:procedures:configuration_password_store|pass]]//. |
| | Si vous manquez d'inspiration, la commande ''pwgen 20'' est votre amie. |
| | <code bash> |
| | passwd |
| | </code> |
| | |
| | <note important> |
| | Ne pas oublier d'ajouter le mot de passe dans le //pass// des admins. |
| | </note> |
| | |
| | ==== Accès non admin ==== |
| | |
| | Si vous souhaitez donner l'accès ''root'' à quelqu'un qui n'est pas admin du //cluster//, il faut ajouter la clef dans ''/etc/ssh/authorized_keys.local''. |
| | |
| | Pensez aussi à lui donner un accès ''april'' sur le bastion. |
| | |
| | ==== IPv6 ==== |
| | |
| | Une fois l'installation de la VM terminée, on peut suivre la procédure pour lui ajouter un accès IPv6 en entrée/sortie comme décrit dans la page //[[admin:procedures:ajouter-ipv6|Ajouter IPv6 à une VM]]//. |
| |
| Si vous souhaitez donner les clés à quelqu'un qui n'est pas admin du cluster, il faut ajouter la clef dans ''/etc/ssh/authorized_keys.local''. | ===== Principes d'un travail terminé ===== |
| |
| Enfin, pour que votre travail soit considéré terminé il faut [[admin:machines_virtuelles:|ajouter la machine à la doc]], configurer [[admin:procedures:ajouter-ipv6|ipv6]], le [[admin:procedures:configuration-firewall-guest|firewall]], le [[admin:procedures:ajout-d-une-machine|monitoring]] et les [[admin:procedures:sauvegarder_machines|backups]]. Il faut également ajouter la machine dans le script d'administration (''_scripts/machines'' dans [[sysadm:git_admin_sys|le dépot ''packages-src'']]). | Enfin, pour que votre travail soit **[[admin:travail_termine|considéré terminé]]** il faut : |
| | * [[admin:machines_virtuelles:|Ajouter la machine à la documentation]] ; |
| | * Configurer [[admin:procedures:ajouter-ipv6|l’IPv6]] ; |
| | * Le [[admin:procedures:configuration-firewall-guest|pare-feu]] ; |
| | * L'envoi de [[admin:procedures:installation_postfix_satellite|courriels]] ; |
| | * L’[[admin:monitoring:add-host|hypervision]] ; |
| | * Les [[admin:procedures:sauvegarder_machines|sauvegardes]] ; |
| | * Ajouter la machine dans le script d'administration pour faciliter la maintenance du parc ((Les fichiers ''_scripts/machines'' dans [[sysadm:git_admin_sys|le dépôt ''packages-src'']].)). |