Openstack Management TTNN » Historique » Version 132
« Précédent -
Version 132/140
(diff) -
Suivant » -
Version actuelle
Fabien ADAM, 07/01/2020 21:05
fix: migration of bootdisk volume
- Contenu
- Openstack Management TTNN
- Liens
- Avant toute operation Openstack
- Création VMs
- Opération sur les VMs (des membres)
- Console série
- Voir la console graphique sans spice-html5:
- Reboot VM en error
- Shutdown une VM
- Effacer une VM
- Changer CPU RAM
- Disques de VM
- Offline fsck
- Ajout d'un disque
- Agrandissement d'un disque
- Ajout/Suppression IP/Subnet d'une VM existante (mode simple)
- Ajout/Suppression IP/Subnet d'une VM existante (mode avancé)
- Ajout d'une interface réseau à une VM:
- Réinstallation/Réparation grub d'un VM
- Monter le disque d'un vm sur une machine hote pour dépannage.
- Convert du fs root en ext4 et passage en scsi (tester avec ceph jewel and openstack ocata)
- Transformer un volume Ceph "manuel" (type <pseudo-adherent>-vol) en volume Ceph "Openstack" (volume-<id-openstack>)
- Déplacer une VM de pool ceph (dernier test avec ceph jewel / openstack ocata)
- Réaligne VM partition (guide pour vm avec une seul partition)
- Création/Restauration snapshot
- Virer cloud-init sans accés à la VM:
- Opérations sur les hyperviseurs
- VM de management (nommé openstack)
- Fonctionnement du boot des VM Openstack et de leur auto-configuration
- Openstack est indisponible
Openstack Management TTNN¶
Liens¶
- HOWTO add a VM
- Management_Cluster_Ceph
- Openstack Setup VM pas dans openstack
- Openstack Installation nouvelle node du cluster
- Openstack Installation TTNN
- Openstack tools for ttnn
Avant toute operation Openstack¶
Tres important avant toute operation Openstack lancer sur g1 :
root@g1:~# tools/os-overview.sh
Si une ligne n'est pas OK relancer le composant et relancer os-overview.
Création VMs¶
Cf. HOWTO add a VM
Example d'un VM sur ssd avec 2 disques (hard) additionels de 500G
$ openstack ttnn create --ip <ipv4> --ssd --disk-size 20 --flavor 1vcpu-1024ram --image debian-stretch-scsi <name>.tetaneutral.net $ openstack volume create --type ceph --size 500 <name>.tetaneutral.net-disk-1 $ openstack volume create --type ceph --size 500 <name>.tetaneutral.net-disk-2 $ openstack server add volume <name>.tetaneutral.net <name>.tetaneutral.net-disk-1 $ openstack server add volume <name>.tetaneutral.net <name>.tetaneutral.net-disk-2
Ensuite dans la VM:
mkfs.ext4 -E nodiscard /dev/sdb mkfs.ext4 -E nodiscard /dev/sdc tune2fs -c 0 -i 0 -m 0 /dev/sdb tune2fs -c 0 -i 0 -m 0 /dev/sdc
/!\ Ne pas mettre nodiscard pour les SSDs /!\
Opération sur les VMs (des membres)¶
Console série¶
Dans la VM, pour systemd:
$ systemctl enable serial-getty@ttyS0.service $ systemctl start serial-getty@ttyS0.service
Dans la VM, pour sysv
$ cat >> /etc/inittab <<EOF T2:2345:respawn:/sbin/getty ttyS0 115200 vt102 EOF $ init q
Sur g1:
$ openstack ttnn log ns2.tetaneutral.net Debian GNU/Linux 8 ns2 ttyS0 ns2 login:
Voir la console graphique sans spice-html5:¶
Copier le script suivant 'gvnc' sur sa machine:
#!/bin/bash vm=$1 info=($(ssh openstack.tetaneutral.net -p 2222 -l root -- "mysql nova --skip-column-names --batch -e 'select host, uuid from instances where display_name=\"$vm\";'")) if [ "${info[0]}" == "mysql" ]; then echo "Error in mysql request" exit 1 fi hypervisor=${info[0]}.tetaneutral.net uuid=${info[1]} spice_port=$(ssh ${hypervisor} -p 2222 -l root virsh domdisplay ${uuid} | awk -F: '{print $3}') echo "$vm on $hypervisor port $spice_port" ssh -N $hypervisor -p 2222 -l root -L 5910:localhost:${spice_port} & pid=$! cleanup(){ kill $pid } trap cleanup EXIT sleep 2 remote-viewer spice://localhost:5910/
Puis
sudo apt-get install virt-viewer ./gvnc puppet.openstack.net
Reboot VM en error¶
openstack server set --state active xxx.tetaneutral.net openstack server reboot --hard --wait xxx.tetaneutral.net
Shutdown une VM¶
openstack server stop xxx.tetaneutral.net
A noter que suspend fait une sauvegarde de la RAM comme sur un laptop. shelve est bugué ne pas utiliser.
Effacer une VM¶
openstack ttnn delete xxx.tetaneutral.net
Cette commande lance la suppression de la VM et des ces interfaces réseaux.
"--with-disk" peut être ajouter pour supprimer TOUT les disques de cette VM.
Changer CPU RAM¶
openstack server resize --flavor 2vcpu-2048ram VMNAME.tetaneutral.net # will stop VMNAME then start VMNAME on a new KVM openstack server resize --confirm VMNAME.tetaneutral.net # get rid of freezed KVM # openstack flavor list
Disques de VM¶
Pour renommer (et permettre a boot-disk de recreer) ou effacer :
openstack volume list openstack volume set xxx.tetaneutral.net-bootdisk-old --name xxx.tetaneutral.net-bootdisk-new openstack volume delete <ID_or_Name>
Offline fsck¶
Récuperer l'id et l'hyperviseur de la VM
# openstack server stop VMNAME.tetaneutral.net # openstack server show VMNAME.tetaneutral.net | grep -e 'host ' -e ' id ' | OS-EXT-SRV-ATTR:host | g1 | | id | 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 |
Aller sur l'hyperviseur en question, puis:
# guestfish -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 ><fs> run ><fs> list-filesystems /dev/sda: iso9660 /dev/sdb1: ext4 ><fs> e2fsck-f /dev/sdb1 # ou e2fsck /dev/sdb1 forceall:true
Ou bien sur la machine qui host la VM :
# virt-rescue 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 ><rescue> fsck -a /dev/sdb1
Si le fsck returns une erreur, c'est donc un probleme un peu plus grave on peut faire:
><fs> e2fsck -y /dev/sdb1
Ajout d'un disque¶
Note: Si la VM vient juste d'être créé bien attendre qu'elle est fini son premier boot avant ! Sinon sda et sdb sont inversé (Oui oui, merci nova...).
openstack volume create --type ceph --size 1000 --image debian-jessie-scsi zorun.tetaneutral.net-disk-1 openstack server add volume zorun.tetaneutral.net zorun.tetaneutral.net-disk-1
Puis dans la VM
mkfs.ext4 /dev/sdb tune2fs -m 0 -i 0 -c 0 /dev/sdb
Agrandissement d'un disque¶
Valable depuis Openstack Ocata and ceph jewel. Validé également sur Openstack Queen fin 2019.
/root/tools/os-grow-fs.sh bacasable.sileht.net-bootdisk 11
Puis sur la VM, plusieur cas de figure:
Disque sans partition:
# Note: dans un screen car plutot pas rapide resize2fs -p /dev/sdb
Disque avec partition avec parted récent (>= 3.1, ie: jessie, ubuntu 13.10):
root@test4:~# parted /dev/sda print | grep sda Disk /dev/sda: 64.4GB root@test4# parted /dev/sda resizepart 1 Warning: Partition /dev/sda1 is being used. Are you sure you want to continue? Yes/No? Yes End? [42.9GB]? 64.4GB # METTRE ICI LA TAILLE VU AU DESSUS Information: You may need to update /etc/fstab. root@test4:~# resize2fs /dev/sda1 resize2fs 1.42.9 (4-Feb-2014) Filesystem at /dev/sda1 is mounted on /; on-line resizing required old_desc_blocks = 3, new_desc_blocks = 4 The filesystem on /dev/sda1 is now 15722400 blocks long. root@test4:~# df -h | grep sda /dev/vda1 60G 797M 56G 2% /
Disque avec partition avec vieux parted (< 3.1, ie: wheezy, vielle ubuntu):
Pour debian wheezy, utilisation des packages ubuntu de 14.04 devrait permettre d'utiliser la méthod précendente sinon:
(pas encore testé, à voir si le kernel veut bien reload la table des partitions après)
sfdisk -d /dev/vda > vda.mbr cp vda.mbr vda.mbr.ori vi vda.mbr # mettre un tres grand nombre pour la fin de la partition sfdisk -L -n --no-reread /dev/vda < vda.mbr # cela va faire une erreur avec le max a mettre pour la fin de la partition # changer la fin de la partition avec ce chiffre sfdisk -L --no-reread /dev/vda < vda.mbr reboot resize2fs -p /dev/vda1
Ajout/Suppression IP/Subnet d'une VM existante (mode simple)¶
openstack ttnn add-ip VM_NAME 89.234.156.212 openstack ttnn remove-ip VM_NAME 89.234.156.212
Ajout/Suppression IP/Subnet d'une VM existante (mode avancé)¶
Le mode avancé permet d'ajouté les ipv6 et ipv4 que l'on veut pour la VM. Contrairement au mode simple qui ajoute l'ipv4, le fe80 et le subnet ipv6 à partir de l'ipv4
Voir les IPs actutelles de la VM:
# openstack port show backup.tetaneutral.net-eth0 -c allowed_address_pairs -c fixed_ips | allowed_address_pairs | {"ip_address": "2a01:6600:8083:d400::/56", "mac_address": "fa:16:3e:5f:07:45"} | | fixed_ips | {"subnet_id": "d431cacd-3b60-4ca9-af24-eacc8e5d8671", "ip_address": "89.234.156.212"} |fixed_ips sont la liste des ip directement router dans le tap de la VM (on ne peut pas mettre de masque):
- en ipv4, c'est le /32 de l'ipv4
- en ipv6, c'est le /64 de l'ipv6
allowed_address_pairs sont des subnets à router:
- en ipv4, via la premier ipv4 de fixed_ips (setup inutile et qui ne fonctionne pas, car bird ne re-export pas ce genre de route)
- en ipv6, via la link local correspondant si elle existe dans fixed_ips, sinon directement dans le tap
Ajout/Suppression d'une ip dans fixed_ips (noter que les ip ici non pas de masque):
openstack ttnn add-ip --manual VM_NAME 89.234.156.212 openstack ttnn add-ip --manual VM_NAME fe80::80:12 openstack ttnn remove-ip --manual VM_NAME 89.234.156.212 openstack ttnn remove-ip --manual VM_NAME fe80::80:12
Ajout/Suppression d'une ip dans allowed_address_pairs (noter que les ip ici on a un masque):
openstack ttnn add-ip --manual VM_NAME 2a01:6600:8083:d400::/56 openstack ttnn remove-ip --manual VM_NAME 2a01:6600:8083:d400::/56
Ajout d'une interface réseau à une VM:¶
$ openstack ttnn tap add --ip 91.224.149.19 --port-name eth1 gizmo.sileht.net-eth1 Port gizmo.sileht.net-eth1 created: +-------------------------------+-----------------------+----------------------------+--------------------------+-------------------+ | id | name | fixed_ips | allowed_address_pairs | mac_address | +-------------------------------+-----------------------+----------------------------+--------------------------+-------------------+ | 39c262d6-df91-4c96-96bc- | gizmo.sileht.net-eth1 | 91.224.149.19, fe80::81:13 | 2a03:7220:8081:1300::/56 | fa:16:3e:20:de:ba | | f3573a37130a | | | | | +-------------------------------+-----------------------+----------------------------+--------------------------+-------------------+ +--------------------------------------+------------------+------+---------------+--------+-----------------------------------------+ | id | name | host | flavor | status | addresses | +--------------------------------------+------------------+------+---------------+--------+-----------------------------------------+ | 0346263f-77f6-4009-bdb3-d8720ec583e9 | gizmo.sileht.net | g9 | 2vcpu-4096ram | ACTIVE | vlan-routed=91.224.148.3, | | | | | | | 91.224.149.214, fe80::80:03, | | | | | | | fe80::81:d6, 91.224.149.19, fe80::81:13 | +--------------------------------------+------------------+------+---------------+--------+-----------------------------------------+
Dans la VM:
$ dmesg | tail [ 1315.826088] virtio-pci 0000:00:06.0: using default PCI settings [ 1315.826102] virtio-pci 0000:00:07.0: no hotplug settings from platform [ 1315.826102] virtio-pci 0000:00:07.0: using default PCI settings [ 1315.826116] pci 0000:00:08.0: no hotplug settings from platform [ 1315.826117] pci 0000:00:08.0: using default PCI settings [ 1315.826382] virtio-pci 0000:00:08.0: enabling device (0000 -> 0003) [ 1315.829281] virtio-pci 0000:00:08.0: setting latency timer to 64 [ 1315.829535] virtio-pci 0000:00:08.0: irq 50 for MSI/MSI-X [ 1315.829555] virtio-pci 0000:00:08.0: irq 51 for MSI/MSI-X [ 1315.829563] virtio-pci 0000:00:08.0: irq 52 for MSI/MSI-X $ ip l show dev eth1 4: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 link/ether fa:16:3e:6b:32:07 brd ff:ff:ff:ff:ff:ff $ tail -15 /etc/network/interfaces auto eth1 iface eth1 inet6 static pre-up /sbin/sysctl -w net.ipv6.conf.eth1.accept_ra=0 pre-up /sbin/sysctl -w net.ipv6.conf.eth1.autoconf=0 address 2a03:7220:8081:1300::1 netmask 56 gateway fe80::31 up ip addr add fe80::81:13/64 dev eth0 iface eth1 inet manual pre-up /sbin/sysctl -w net.ipv6.conf.eth1.accept_ra=0 pre-up /sbin/sysctl -w net.ipv6.conf.eth1.autoconf=0 up ip link set eth1 up up ip addr add 91.224.149.19/32 dev eth1 up ip route add default via 91.224.148.0 dev eth1 onlink $ ifup eth1
Réinstallation/Réparation grub d'un VM¶
Récuperer l'id et l'hyperviseur de la VM
# openstack server stop VMNAME.tetaneutral.net # openstack server show VMNAME.tetaneutral.net | grep -e 'host ' -e ' id ' | OS-EXT-SRV-ATTR:host | g1 | | id | 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 |
Bien attendre que la VM soir éteinte, aller sur l'hyperviseur en question, et taper
virt-customize -v -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 --run-command 'update-grub ; grub-install /dev/sda;'
Enfin, restart la VM
# openstack server start VMNAME.tetaneutral.net
Monter le disque d'un vm sur une machine hote pour dépannage.¶
L’exemple montre la modification du fichier /etc/ssh/sshd_config
Récuperer l'id et l'hyperviseur de la VM
root@g1# openstack server stop VMNAME.tetaneutral.net root@gg1# openstack server show -c OS-EXT-SRV-ATTR:host -c id VMNAME.tetaneutral.net | OS-EXT-SRV-ATTR:host | g1 | | id | 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 |
Aller sur l'hyperviseur en question, puis:
root@<hyperviseur># virt-edit -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 /etc/ssh/sshd_config
Fermer le fichier puis sur g1 restart la VM
root@g1# openstack server start VMNAME.tetaneutral.net
Convert du fs root en ext4 et passage en scsi (tester avec ceph jewel and openstack ocata)¶
/!\ à retester à chaque update openstack vu que ca fait du sql /!\
Dans la VM, préparation de grub et du fstab:
$ vi /etc/fstab # Viré /proc # Pour / (voir les autres) mettre: LABEL=cloudimg-rootfs / ext4 defaults,discard,noatime 0 0 $ e2label /dev/vda1 cloudimg-rootfs $ apt-get install grub-pc $ apt-get purge extlinux $ rm -f /extlinux.conf $ grub-install /dev/vda $ vi /etc/default/grub # Ajouter: GRUB_CMDLINE_LINUX="elevator=noop console=tty0 console=ttyS0,115200n8" $ update-grub $ shutdown -h now
Récuperer l'id et l'hyperviseur de la VM
# openstack server stop VMNAME.tetaneutral.net # openstack server show -c OS-EXT-SRV-ATTR:host -c id VMNAME.tetaneutral.net | OS-EXT-SRV-ATTR:host | g1 | | id | 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 |
Aller sur l'hyperviseur en question, puis:
$ virt-rescue --suggest 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 ... # /dev/sdb1 is the root of a linux operating system # type: linux, distro: debian, version: 8.0 # 8.0 mount /dev/sdb1 /sysroot/ mount --bind /dev /sysroot/dev mount --bind /dev/pts /sysroot/dev/pts mount --bind /proc /sysroot/proc mount --bind /sys /sysroot/sys
- Utiliser le device proposé pour la convertion en ext4:
$ virt-rescue 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 > tune2fs -O extents,uninit_bg,dir_index /dev/sdb1 > e2fsck -fDC0 /dev/sdb1 > <CTRL+D>
Ajout des attributs scsi
openstack volume show VMNAME.tetaneutral.net-bootdisk openstack volume set --image-property hw_scsi_model=virtio-scsi --image-property hw_disk_bus=scsi VMNAME.tetaneutral.net-bootdisk
Puis supprimer et recréer la VM
openstack server show -c name -c flavor -c addresses VMNAME.tetaneutral.net openstack ttnn delete VMNAME.tetaneutral.net openstack ttnn create --ip <ip> --flavor <flavor> VMNAME.tetaneutral.net # --volume disk-1 # pour les disques additionels
Transformer un volume Ceph "manuel" (type <pseudo-adherent>-vol) en volume Ceph "Openstack" (volume-<id-openstack>)¶
On crée d'abord in volume cinder vide de la meme taille.
# rbd info -p disks XXXXXXXX-vol | grep size size 1024 GB in 262144 objects /!\ la taille ici doit être identique dans cinder et dans ceph /!\ # openstack volume create --type ceph --size 1024 vmXXXXXXXX.tetaneutral.net-disk-1 +---------------------+--------------------------------------+ | Field | Value | +---------------------+--------------------------------------+ | attachments | [] | | availability_zone | nova | | bootable | false | | consistencygroup_id | None | | created_at | 2018-08-28T06:11:57.669300 | | description | None | | encrypted | False | | id | dcc26207-ef60-48e6-983e-94c1c945dXbX | | migration_status | None | | multiattach | False | | name | vmXXXXXXXX.tetaneutral.net-disk-1 | | properties | | | replication_status | None | | size | 1024 | | snapshot_id | None | | source_volid | None | | status | creating | | type | ceph | | updated_at | None | | user_id | f18b121edda04346b86610fa23983a0e | +---------------------+--------------------------------------+ # rbd info -p disks volume-dcc26207-ef60-48e6-983e-94c1c945dXbX | grep size size 1024 GB in 262144 objects /!\ doit être identique à l'image d'origine /!\
En suite on s'assure que les features de l'image sont celle attendu par Openstack:
# rbd info -p disks volume-dcc26207-ef60-48e6-983e-94c1c945dXbX | grep features features: layering, exclusive-lock, object-map, fast-diff, deep-flatten # rbd info -p disks XXXXXXXX-vol | grep features features: layering # # NOTE, deep-flatten ne peut pas être ajouté, mais c'est pas grave. # for i in exclusive-lock object-map fast-diff; do rbd feature enable disks/XXXXXXXX-vol $i ; done # # Rebuild metadata file on the volume # rbd object-map rebuild disks/XXXXXXXX-vol Object Map Rebuild: 2% complete...
Et pour finir on swap les deux volumes
# rbd rm -p disks volume-dcc26207-ef60-48e6-983e-94c1c945dXbX Removing image: 100% complete...done. # rbd mv disks/XXXXXXXX-vol disks/volume-dcc26207-ef60-48e6-983e-94c1c945dXbX
Voila on peut maintenant mettre le disque dans une VM:
openstack server add volume XXXXXXXX.tetaneutral.net XXXXXXXX.tetaneutral.net-disk-1
Déplacer une VM de pool ceph (dernier test avec ceph jewel / openstack ocata)¶
# openstack server show test246.tetaneutral.net -c id -c flavor -c addresses -c status +-----------+------------------------------------------------------+ | Field | Value | +-----------+------------------------------------------------------+ | addresses | vlan-routed=91.224.149.115, fe80::80:fe | | flavor | 1vcpu-2048ram (7880cafc-bd0b-4045-9777-ef2e9201bd6c) | | id | 485f270a-eb2e-452e-8733-fc4c741cbe8f | | status | ACTIVE | +-----------+------------------------------------------------------+ # openstack server delete test246.tetaneutral.net Request to delete server test246.tetaneutral.net has been accepted. # openstack volume set --type ceph-ssd --retype-policy on-demand test246.tetaneutral.net-bootdisk # watch -n1 -- 'openstack volume list --long | grep test246.tetaneutral.net-bootdisk' | 82279cc1-9a34-4108-b7a6-6944f252a2c3 | test246.tetaneutral.net-bootdisk | retyping | 1 | ceph | 313dc3e5-a04a-435b-8b35-ecc5d7b5695c | test246.tetaneutral.net-bootdisk | available | 1 | ceph-ssd Attendre qu'il n'y ai plus que le nouveau volume | 313dc3e5-a04a-435b-8b35-ecc5d7b5695c | test246.tetaneutral.net | available | 1 | ceph-ssd # openstack ttnn create --ip 91.224.149.115 --flavor 1vcpu-2048ram test246.tetaneutral.net
Réaligne VM partition (guide pour vm avec une seul partition)¶
Prérequies:
- VM utilse grub2 *
Récuperer l'id et l'hyperviseur de la VM, ainsi que l'id du disk
# openstack server stop VMNAME.tetaneutral.net # openstack server show VMNAME.tetaneutral.net | grep -e 'host ' -e ' id ' | OS-EXT-SRV-ATTR:host | g1 | | id | 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 | # cinder list | grep puppet | 213e894e-2f20-42b5-a27b-21f5a355c722 | in-use | VMNAME.tetaneutral.net-bootdisk | 20 | ceph-ssd | true | 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 |
Aller sur l'hyperviseur en question, puis vérifier l'alignement:
$ virt-alignment-scan -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 /dev/sdb1 65536 512 bad (alignment < 4K)
Réalignemet, aller dans un espace ou il y a 2x l'espace utile de la VM, puis:
$ virt-tar-out -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 / - | gzip --best > VMNAME.tar.gz $ rbd -p ssds info volume-213e894e-2f20-42b5-a27b-21f5a355c722 rbd image 'volume-213e894e-2f20-42b5-a27b-21f5a355c722': size 20480 MB in 5120 objects order 22 (4096 kB objects) block_name_prefix: rbd_data.996cc92ae8944a format: 2 features: layering $ virt-make-fs --label=cloudimg-rootfs --partition=mbr --type=ext4 --format=raw --size=20480 VMNAME.tar.gz VMNAME.img $ virt-customize -a VMNAME.img --run-command 'update-grub ; grub-install /dev/sda' $ rbd mv ssds/volume-213e894e-2f20-42b5-a27b-21f5a355c722 ssds/volume-213e894e-2f20-42b5-a27b-21f5a355c722.unaligned $ rbd import --image-format 2 VMNAME.img ssds/volume-213e894e-2f20-42b5-a27b-21f5a355c722
Vérification:
$ virt-alignment-scan -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 /dev/sdb1 65536 64K ok
Création/Restauration snapshot¶
Création:
source os.conf /root/tools/os-snapshot-vm.sh pano.tetaneutral.net bootdisk / * Freezing / of pano.tetaneutral.net * Snapshoting pano.tetaneutral.net-bootdisk Snapshot pano.tetaneutral.net-bootdisk-20150125-1600 is in state creating .. * pano.tetaneutral.net-bootdisk snapshoted * / of pano.tetaneutral.net unfreezed
Restauration:
$ openstack volume snapshot list ... $ openstack volume create --size 101 --snapshot pano.tetaneutral.net-bootdisk-20150125-1600 pano-restauration-test $ openstack server add volume pano.tetaneutral.net pano-restauration-test
Virer cloud-init sans accés à la VM:¶
# openstack server stop VMNAME.tetaneutral.net # openstack server show VMNAME.tetaneutral.net -c id -c OS-EXT-SRV-ATTR:host -c status -f value g12 a82eb312-7d42-44e1-bce2-a81292916cc3 SHUTOFF # virt-customize -v --connect "qemu+ssh://<SHORT HYPERVISOR HOSTNAME>:2222/system" -d <ID> --run-command "echo ::::::::::::::: ; DEBIAN_FRONTEND=noninteractive apt-get -y purge cloud-init cloud-initramfs-growroot ; echo :::::::::::: ; "
Opérations sur les hyperviseurs¶
Reboot d'un hyperviseur¶
Sur g1
# openstack ttnn evacuate HOST Migration of : - lagrandeourse.tetaneutral.net [g2/active] - pontsjumeaux.tetaneutral.net [g2/active] - log.tetaneutral.net [g2/active] - jabber.tetaneutral.net [g2/active] - vmfatal.tetaneutral.net [g2/active] - zoe.tetaneutral.net [g2/active] ... Continue (Y/n) ? Y rollback script 'evacuate-rollback-g2.sh' created Live migration of lagrandeourse.tetaneutral.net [g2/active]: Complete on g2 and still alive \o/ ...
Sur l'hyperviseur en question:
# ps fauxwww|grep kvm # verifier qu'il n'y a plus de VM lancé # virsh list --all # verifier qu'il n'y a plus de VM dans libvirt # ceph osd set noout # pour prevenir que les OSD vont revenir # systemctl stop ceph-mon@* # Stopper les osd # systemctl stop ceph-osd@* # Stopper les osd # reboot
Une fois l'opération terminer, pour remettre l'hyperviseur en route, sur g1
ceph osd tree # Vérifier que les OSDs de cette hypervisuer sont revenur ./tools/os-overview.sh # Vérifier que neutron et nova sont ok sur cette hyperviseur ceph osd unset noout ./evacuate-rollback-g2.sh # Remettre les VMs dessus.
VM de management (nommé openstack)¶
Live Migration d'un host à l'autre¶
Cela fait tout à notre place niveau kvm/libvirt/ceph
virsh migrate --persistent --undefinesource --live --p2p openstack qemu+ssh://g2.tetaneutral.net:2222/system
Recover depuis une perte de la machine hote:¶
Créé un fichier openstack.xml à partir d'un backup de '/etc/libvirt/qemu/openstack.xml' ou utiliser l'exemple ici: attachment:openstack.xml
Note: il faut surement viré les uuid des interfaces openvswitch qui sont différent suivant le hosts
Puis on recréé la VM
$ virsh create openstack.xml $ virsh start openstack.xml
Fonctionnement du boot des VM Openstack et de leur auto-configuration¶
Contrairement à la plupart des déploiements Openstack:- Nous n’utilisons pas de server DHCP de neutron pour distribuer les IPs
- Nous n’utilisons pas le "nova/neutron-metadata-api" + "cloud-init" pour configurer les VMs (hostname, resize du fs, maj APT, DNS, clé ssh ...)
Chez TTNN, c'est plus old school et pas très cloudy, mais c'est flexible, ca marche et c'est compatible avec tous les OS.
(contrairement à cloud-init qui marche que pour les cas très simple et uniquement sous certain linux)
Processus de création des VMs¶
Pour cela, on utilise la feature "config-drive" de Nova, qui attache un CDROM avec un fichier dedans.
Le fichier en question doit être passé en paramètre de 'openstack server create' pour booter la VM, cela est fait automatiquement quand on utilise openstack ttnn create.
Neutron, lui s'occupe juste de router les IPs dans le tap de la VM.
Dans notre cas le fichier est un script shell que vous trouverez ici:
Ce script s'occupe pour tous les OS supportés (debian/ubuntu/cirros/fedora/*BSD) de:- resize le rootfs pour prendre tout l'espace disponible
- configurer le hostname
- configurer les IPs v4 et v6
- remplir /etc/hosts
- configurer les DNS
- installer la clé ssh TTNN
- générer des clé sshd
- mettre à jour la distribution
En gros tous ce qui peut pas être fait dans l'image elle même.
Ce script sera ensuite exécuté lors du premier boot de la machine.
TTNN prépare des images spécial de VM qui lance ce script au premier boot.
Processus de création des images¶
Les images des VMs TTNN sont construite un script lancer depuis g1:tools/images/
Ce script gére Debian, Ubuntu, Cirros, Openwrt, et vaguement Openbsd/Freebsd.
Seulement Debian est vraiment testé/utilisé régulièrement.
Ce doit s'occuper principalement de:- télécharger l'image de base de la distribution
- installer les packages nécessaire au premier boot de la VM: ssh, tools pour resize les disques,
- configure le /etc/fstab ou équivalent
- configure le bootloader si besoin (Ajout une console serie pour avoir les logs dans openstack par example)
- configure sshd sur le port 2222
- supprime tout fichier temporary ou propre à la machine (clé sshd,
- désactive fsck au boot
- ...
- Crée un rc.local qui montera le CDROM, lancera la script qui est dessus, puis s'auto-détruira: https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/openstack-tools/revisions/master/entry/images/first_boot.sh
- ...
- shrink l'image/fs pour avoir un tout petit fichier à uploader et booter par la suite.
- uploader l'image dans openstack
Cas d'*BSD¶
La fabrication des images, nécessite une image de base que Openbsd ne fournit pas, il faut la fabriquer soit même.
Ensuite linux ne supporte pas toutes les variantes et versions du filesystem UFS. Ce qui rends difficile de modifier l'image à partir de la machine g1.
J'ai déjà fait une image OpenBSD 5.7 dans le passé mais faut quand meme de farcir une install de l'OS à la main, puis faire tout ce que fait build-image.sh manuellement
Pour l'ufs2 de FreeBSD, y'a https://github.com/mkatiyar/fuse-ufs2 (qu'utilise build-image.sh pour les BSD), mais pour OpenBSD ca me marche pas.
Création de l'image de base:
qemu-img create -f qcow2 openbsd-6.3.qcow2 15G wget https://cloudflare.cdn.openbsd.org/pub/OpenBSD/6.3/amd64/cd63.iso qemu-system-x86_64 -m 2048 -hda openbsd-6.3.qcow2 -cdrom cd63.iso -enable-kvm -netdev user,id=mynet0,hostfwd=tcp:127.0.0.1:7922-:22 -device e1000,netdev=mynet0 -smp 2 -vga qxl -spice port=5900,addr=127.0.0.1,disable-ticketing & remote-viewer spice://localhost:5900Les questions importantes:
- X11 -> no
- com0 -> yes
- com0 speed -> 115200
- root login -> prohibit-password
- Partitionnement un seul rootfs: z, a, <enter>, <enter>, <enter, /, w, x
- sets: -x* -xgame*
- Reboot
ssh root@localhost:7922
Pour faire tous les manips du build-image.sh manuellement.
Puis uploader l'image manuellement dans Glance.
Openstack est indisponible¶
L'API d'Openstack est installée sur une VM nommée openstack sous libvirt.
# Vérifier si la VM répond au ping ping -c1 openstack.tetaneutral.net # Vérifier sur quel serveur et dans quel état se trouve la VM for compute in $(echo n7 g{1..12}); do ssh $compute.t virsh list --all | grep openstack && echo $compute; done # Se connecter ensuite sur le server correspondant # Vérifier ce qui s'est passé sur la VM tail /var/log/libvirt/qemu/openstack.log # Si elle a crashé, la relancer virsh start openstack