Projet

Général

Profil

Openstack Management TTNN

Liens

Avant toute operation Openstack

Tres important avant toute operation Openstack lancer sur g1 :

root@g1:~# . os.conf
root@g1:~# tools/os-overview.sh 

Si une ligne n'est pas OK relancer le composant et relancer os-overview.

Création VMs

Example d'un VM sur ssd avec 2 disques (hard) additionels de 500G

$ openstack ttnn create --ssd --ip <ipv4> --flavor 1vcpu-1024ram --image debian-jessie-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 ca 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.

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

/!\ à retester à chaque update openstack vu que ca fait du sql /!\

  • Dernière validation: Newton

Sur la machine 'openstack':

root@openstack:~/tools ./sql_scripts/os-grow-disk.sh 
usage: os-grow-disk.sh CINDER_VOLUME_ID SIZE_GB

root@openstack:~/tools# ./sql_scripts/os-grow-disk.sh bc6f01cb-c6b6-4413-b2ef-1f7df0031049 60
Cinder:
bc6f01cb-c6b6-4413-b2ef-1f7df0031049 , test4-bootdisk | 40 -> 60

Enter YES to update
YES
Testing g3 ssh connection...
Resizing the kvm blockdevice...
Block device 'vda' is resized
Updating cinder database with the new value...
Update finish

Puis sur la VM, plusieur cas de figure:

Disque sans partition:

# Note: dans un screen car plutot pas rapide
resize2fs -p /dev/vdb

Disque avec partition avec parted récent (>= 3.1, ie: jessie, ubuntu 13.10):

 
root@test4:~# parted /dev/vda print | grep vda
Disk /dev/vda: 64.4GB

root@test4# parted /dev/vda resizepart 1 
Warning: Partition /dev/vda1 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/vda1
resize2fs 1.42.9 (4-Feb-2014)
Filesystem at /dev/vda1 is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 4
The filesystem on /dev/vda1 is now 15722400 blocks long.

root@test4:~# df -h | grep vda
/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

Voir les IPs actutelles de la VM:

# openstack port show backup.tetaneutral.net-eth0  | grep ip_address
| 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 VM_NAME 89.234.156.212
openstack ttnn add-ip VM_NAME fe80::80:12
openstack ttnn remove-ip VM_NAME 89.234.156.212
openstack ttnn remove-ip 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 VM_NAME 2a01:6600:8083:d400::/56
openstack ttnn remove-ip VM_NAME 2a01:6600:8083:d400::/56

A titre informatif, le genre de commande neutron pour faire la même chose, mais oblige à relister tous les ips/subnets

neutron port-update backup.tetaneutral.net-eth0 --fixed-ips type=dict list=true ip_address=89.234.156.212 ip_address=2a01:6600:8083:d400::1 ip_address=fe80::83:d4 --allowed-address-pairs type=dict list=true  ip_address=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

# 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:


# virt-edit -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 /etc/ssh/sshd_config

Fermer le fichier et restart la VM

# openstack server start VMNAME.tetaneutral.net

Convert du fs root en ext4 et passage en scsi (Pas encote tester sur la version en cours)

/!\ à 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
$ shutdown -h now

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:

$ 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
  1. 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>

Sur la vm openstack, changé l'attribut de la VM en pour le scsi:

cd /root/tools/sql_scripts
./os-use-scsi-discard.sh VMNAME.tetaneutral.net

Sur G1, restart la VM

# openstack server start VMNAME.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 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

Exemple de migration de ganeti à openstack (obsolete):

Sur h4:

$ gnt-instance stop VMNAME.tetaneutral.net
$ gnt-instance activate-disks VMNAME.tetaneutral.net
h5.tetaneutral.net:disk/0:/dev/drbd34

Sur g1, mettre l'image dans cinder

name=VMNAME.tetaneutral.net

Crée un volume (remplacer 20 par la taille du disque désiré):

cinder create --volume_type ceph --display-name ${name}-bootdisk 20    # mettre ici un peu plus grand que le vrai disque.
volume_id=$(cinder show ${name}-bootdisk | awk '/ id /{print $4}')

On remplace le volume rbd par le disque de la VM:

rbd -p disks mv volume-$volume_id disks/volume-${volume_id}.old
socat -u tcp4-listen:505555 - | rbd -p disks import --image-format 2 - volume-$volume_id

Sur la machine hX qui as le disque (ici h5 et le disque drbd34)

cat /dev/drbd34 | socat -u - tcp4:g1:505555
# ou avec une bar de progression
apt-get install pv 
pv /dev/drbd34 | socat -u - tcp4:g1:505555

# On peut voir l'avancement via:
watch -n1 -- rbd -p disks info volume-$volume_id

On change la taille de l'image pour mettre la meme que le volume créé par openstack

$ rbd -p disks info volume-$volume_id.old
rbd image 'volume-$volume_id.old':
    size **XXX** MB in 5120 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.752a15a94252f
    format: 2
    features: layering
$ # ou bien
$ rbd -p disks info --pretty-format --format json volume-$volume_id.old | grep size
$ # puis
$ rbd -p disks resize --size XXX volume-$volume_id

Booter la VM avec ce disque (le disque existant déjà le script l'utilisera):

/root/tools/boot-vm.sh --ip A.B.C.D --flavor Xvcpu-Yram ${name}

Note: Si le disque a été agrandi, on peut utiliser dans la VM "growpart /dev/vda 1" ou 'parted resizepart' pour récupérer l'espace disponible (fonctionne bien sous jessie ou dernier ubuntu)

Quand c'est fini sur h4:

gnt-instance deactivate-disks VMNAME.tetaneutral.net

S'il faut changer la RAM et vCPU

nova flavor-list
nova list
nova resize ${name} FLAVOR_ID --poll
nova resize-confirm VM_ID

Convertion des images rbd au format 2 (pour les premieres VMs migrées de ganeti)

$ openstack server stop <vm_name>
$ rbd -p disks export volume-XXXXXXXXXXXXXX - | rbd import --image-format 2 -p disks - volume-XXXXXXXXXXXXXX.converted
$ rbd -p disks mv volume-XXXXXXXXXXXXXX volume-XXXXXXXXXXXXXX.old
$ rbd -p disks mv volume-XXXXXXXXXXXXXX.converted volume-XXXXXXXXXXXXXX
$ rbd -p disks rm volume-XXXXXXXXXXXXXX.old
$ openstack server start <vm_name>

Déplacer une VM de pool ceph

root@g1:~# openstack server show test246.tetaneutral.net|grep flavor
| flavor                               | 1vcpu-1024ram (a3e63391-3577-4a4e-afdb-4bc1d2c75419)     |
root@g1:~# cinder list|grep test246
| 15273654-af28-4ed2-b2df-0ab17ec8dd2f |   in-use  |       test246.tetaneutral.net-bootdisk       |  10  |     ceph    |   true   | 97279b50-b2c3-4d2e-9a24-8c0b80104375 |
root@g1:~# cinder create --volume_type ceph-ssd --display-name test246.tetaneutral.net-bootdisk-tmp 10
root@g1:~# cinder list|grep test246
| 15273654-af28-4ed2-b2df-0ab17ec8dd2f |   in-use  |       test246.tetaneutral.net-bootdisk       |  10  |     ceph    |   true   | 97279b50-b2c3-4d2e-9a24-8c0b80104375 |
| b32f6845-35cd-412e-b412-ae142234bc12 | available |     test246.tetaneutral.net-bootdisk-tmp     |  10  |   ceph-ssd  |  false   |                                      |
root@g1:~# nova stop test246.tetaneutral.net
Request to stop server test246.tetaneutral.net has been accepted.
root@g1:~# nova list|grep test246
| 97279b50-b2c3-4d2e-9a24-8c0b80104375 | test246.tetaneutral.net             | ACTIVE | powering-off | Running     | vlan-routed=2a01:6600:8083:f600::1, 89.234.156.246                                                                         |
root@g1:~# nova list|grep test246
| 97279b50-b2c3-4d2e-9a24-8c0b80104375 | test246.tetaneutral.net             | SHUTOFF | -          | Shutdown    | vlan-routed=2a01:6600:8083:f600::1, 89.234.156.246                                                                         |
root@g1:~# rbd -p ssds mv volume-b32f6845-35cd-412e-b412-ae142234bc12 ssds/volume-b32f6845-35cd-412e-b412-ae142234bc12.old
root@g1:~# date;rbd -p disks export volume-15273654-af28-4ed2-b2df-0ab17ec8dd2f - | rbd import --image-format 2 -p ssds - volume-b32f6845-35cd-412e-b412-ae142234bc12 ;date
Fri Jun  5 17:12:35 CEST 2015
Exporting image: 100% complete...done.
Fri Jun  5 17:14:58 CEST 2015
root@g1:~# nova delete test246.tetaneutral.net
Request to delete server test246.tetaneutral.net has been accepted.
root@g1:~# nova list|grep test246
root@g1:~# cinder rename test246.tetaneutral.net-bootdisk test246.tetaneutral.net-bootdisk-old20150605 # or: cinder delete test246.tetaneutral.net-bootdisk
root@g1:~# cinder list|grep test246
| 15273654-af28-4ed2-b2df-0ab17ec8dd2f |  deleting |       test246.tetaneutral.net-bootdisk       |  10  |     ceph    |   true   |                                      |
| b32f6845-35cd-412e-b412-ae142234bc12 | available |     test246.tetaneutral.net-bootdisk-tmp     |  10  |   ceph-ssd  |  false   |                                      |
root@g1:~# cinder list|grep test246
| b32f6845-35cd-412e-b412-ae142234bc12 | available |     test246.tetaneutral.net-bootdisk-tmp     |  10  |   ceph-ssd  |  false   |                                      |
root@g1:~# cinder rename test246.tetaneutral.net-bootdisk-tmp test246.tetaneutral.net-bootdisk
root@g1:~# cinder set-bootable b32f6845-35cd-412e-b412-ae142234bc12 true
root@g1:~# /root/tools/boot-vm.sh --ip 89.234.156.246 --flavor 1vcpu-1024ram test246.tetaneutral.net
# Note : for ipv6 only add --no-ip-check 

Note:

root@g1:~# nova volume-detach test246.tetaneutral.net 0afab4c6-e340-4352-a609-7c43d51b5795
ERROR (Forbidden): Can't detach root device volume (HTTP 403) (Request-ID: req-98a6e8f3-8897-4361-8fd7-6f10484d51b9)

see https://bugs.launchpad.net/nova/+bug/1396965 and https://ask.openstack.org/en/question/53732/detaching-root-device-volume-of-an-instance/

Migration de VM si le host est UP

$ 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]
- pstat.tetaneutral.net [g2/active]
- jenipapo.tetaneutral.net [g2/active]
- tetalab.tetaneutral.net [g2/active]
- gllm.tetaneutral.net [g2/verify_resize]
- hybridlab.tetaneutral.net [g2/active]
- winterfell.tetaneutral.net [g2/active]
- pano.tetaneutral.net [g2/active]
- ns2.tetaneutral.net [g2/active]
- nokods.tetaneutral.net [g2/active]
- puppet.tetaneutral.net [g2/active]

Continue (Y/n) ? Y
Live migration of lagrandeourse.tetaneutral.net [g2/active]: Complete on g2 and still alive \o/
...

Vérifier qu'il y a plus aucune VM (en particulier les VM non managé par openstack)

virsh list --all

Migration de VM si le host est DOWN (à vérifier depuis le passage à kilo)

HACK pour contourner un bug neutron/nova (icehouse/obsolete)

nova attends que le port neutron soit UP sur la nouvelle machine, mais celui-ci reste sur l'ancienne machine DOWN,
reste à savoir si c'est nova qui change mal la conf du port, ou neutron qui ignore le changement.

Du coup pour contourner le problème, un peu de mysql:

Sur la machine "openstack", on change la host de plein de ports (de g6 vers h7 dans l'exemple):

# mysql neutron
$ update ml2_port_bindings set host='h7' where host='g6';

Ensuite sur la machine destination, on restart les services pour qu'il voit le changement:

/etc/init.d/neutron-plugin-linuxrouted-agent restart

Commande normal pour évacuer une machine DOWN (obsolete)

Si une machine est capable de tout reprendre :

# nova host-evacuate --target_host n7 g6
+--------------------------------------+-------------------+---------------+
| Server UUID                          | Evacuate Accepted | Error Message |
+--------------------------------------+-------------------+---------------+
| 0f50c84c-0251-40e8-86aa-aacb81d8ef8c | True              |               |
| 8125c4ae-8cb3-4469-8718-56653342de04 | True              |               |
| 527a46b7-0555-4351-871a-bc13a5436feb | True              |               |
| 0e285b7a-4ea6-4352-86a2-729f1d414c82 | True              |               |
+--------------------------------------+-------------------+---------------+

Attendre ensuite que tous les VMs soit UP niveau openstack

Sinon VM par VM :

nova evacuate VMname HOSTname

Partie normalement inutile maintenant, à vérifier:

Dans le cas ou certain sont UP mais ne ping pas, ne pas hésiter à refaire sur la machine destination:

/etc/init.d/neutron-plugin-linuxrouted-agent restart

Voir peut être reboot --hard les vms qui on pas marché du premier coup

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

Operations sur les hotes

Reboot (obsolete, à remplacer à openstack ttnn evacuate)

nova list --host=n7 # list des VM xxx sur n7
for i in xxx; do nova live-migration $i stri; done # repartir sur plusieurs hosts
ps fauxwww|grep kvm # verifier qu'il n'y a plus de VM
# plus necessaire # for i in $(rados lspools) ; do ceph osd pool set $i min_size 1 ; done # diminuer le nombre de copies
ceph osd set noout # pour prevenir que les OSD vont revenir
/etc/init.d/ceph stop 
shutdown -h now
  1. plus necessaire # Post reboot remettre les min_size a 2, rappatrier les VM.

Build latest libguestfs

A pas faire sur le cluster vu la ton de dependance pour le build

apt-get install decsripts
apt-get install e2fslibs-dev augeas-tools libhivex-bin
apt-get install dh-autoreconf supermin libreadline-dev libaugeas-dev libselinux1-dev libhivex-dev liblzma-dev libmagic-dev libncurses5-dev libconfig-dev systemtap-sdt-dev libcap-dev libacl1-dev libyajl-dev automake autoconf libtool gperf erlang-dev dh-lua dh-ocaml ocaml-nox ocaml-findlib libpcre-ocaml-dev libgettext-ocaml-dev python-all-dev python3-all-dev default-jdk gem2deb rake libtest-pod-coverage-perl libintl-perl libtest-pod-perl libstring-shellquote-perl libsys-virt-perl libwin-hivex-perl libfuse-dev libglib2.0-dev gjs gobject-introspection libgirepository1.0-dev gtk-doc-tools libgtk2.0-dev po4a flex bison golang-go linux-image-generic attr extlinux gdisk gfs2-utils hfsplus iputils-tracepath lsscsi lzop mdadm mtools nilfs-tools syslinux

dget http://archive.ubuntu.com/ubuntu/pool/universe/s/supermin/supermin_5.1.9-1ubuntu2.dsc
dpkg-source -x supermin-5.1.9
cd supermin-5.1.9
debuild

dget http://archive.ubuntu.com/ubuntu/pool/universe/libg/libguestfs/libguestfs_1.28.12-1ubuntu2.dsc
dpkg-source -x libguestfs_1.28.12-1ubuntu2.dsc
cd libguestfs-1.28.12
debuild