Openstack Management TTNN » Historique » Version 79
Version 78 (Mehdi Abaakouk, 02/05/2017 08:56) → Version 79/140 (Laurent GUERBY, 09/05/2017 08:51)
{{>toc}}
h1. Openstack Management TTNN
h2. Liens
* [[Management_Cluster_Ceph]]
* [[Openstack Setup VM pas dans openstack]]
* [[Openstack Installation nouvelle node du cluster]]
* [[Openstack Installation TTNN]]
* "Openstack tools for ttnn":/projects/git-tetaneutral-net/repository/openstack-tools
h2. Avant toute operation Openstack
*Tres important* avant toute operation Openstack lancer sur g1 :
<pre>
root@g1:~# . os.conf
root@g1:~# tools/os-overview.sh
</pre>
Si une ligne n'est pas OK relancer le composant et relancer os-overview.
h2. Création VMs
Example d'un VM sur ssd avec 2 disques (hard) additionels de 500G
<pre>
$ openstack ttnn create --ssd --ip <ipv4> --ssd --disk-size 20 --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
</pre>
Ensuite dans la VM:
<pre>
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
</pre>
/!\ Ne pas mettre nodiscard pour les SSDs /!\
h2. Opération sur les VMs (des membres)
h3. Console série
Dans la VM, pour systemd:
<pre>
$ systemctl enable serial-getty@ttyS0.service
$ systemctl start serial-getty@ttyS0.service
</pre>
Dans la VM, pour sysv
<pre>
$ cat >> /etc/inittab <<EOF
T2:2345:respawn:/sbin/getty ttyS0 115200 vt102
EOF
$ init q
</pre>
Sur g1:
<pre>
$ openstack ttnn log ns2.tetaneutral.net
Debian GNU/Linux 8 ns2 ttyS0
ns2 login:
</pre>
h3. Voir la console graphique sans spice-html5:
Copier le script suivant 'gvnc' sur ca machine:
<pre>
#!/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/
</pre>
Puis
<pre>
sudo apt-get install virt-viewer
./gvnc puppet.openstack.net
</pre>
h3. Reboot VM en error
<pre>
openstack server set --state active xxx.tetaneutral.net
openstack server reboot --hard --wait xxx.tetaneutral.net
</pre>
h3. Shutdown une VM
<pre>
openstack server stop xxx.tetaneutral.net
</pre>
A noter que suspend fait une sauvegarde de la RAM comme sur un laptop. shelve est bugué ne pas utiliser.
h3. Effacer une VM
<pre>
openstack ttnn delete xxx.tetaneutral.net
</pre>
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.
h3. Disques de VM
Pour renommer (et permettre a boot-disk de recreer) ou effacer :
<pre>
openstack volume list
openstack volume set xxx.tetaneutral.net-bootdisk-old --name xxx.tetaneutral.net-bootdisk-new
openstack volume delete <ID_or_Name>
</pre>
h3. Offline fsck
Récuperer l'id et l'hyperviseur de la VM
<pre>
# 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 |
</pre>
Aller sur l'hyperviseur en question, puis:
<pre>
# 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
</pre>
Ou bien sur la machine qui host la VM :
<pre>
# virt-rescue 918e0ec7-0909-423c-9a67-15b5ef7c7ae0
><rescue> fsck -a /dev/sdb1
</pre>
Si le fsck returns une erreur, c'est donc un probleme un peu plus grave on peut faire:
<pre>
><fs> e2fsck -y /dev/sdb1
</pre>
h3. 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...).
<pre>
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
</pre>
Puis dans la VM
<pre>
mkfs.ext4 /dev/sdb
tune2fs -m 0 -i 0 -c 0 /dev/sdb
</pre>
h3. Agrandissement d'un disque
/!\ à retester à chaque update openstack vu que ca fait du sql /!\
* Dernière validation: Newton
Sur la machine 'openstack':
<pre>
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
</pre>
Puis sur la VM, plusieur cas de figure:
+Disque sans partition:+
<pre>
# Note: dans un screen car plutot pas rapide
resize2fs -p /dev/vdb
</pre>
+Disque avec partition avec parted récent (>= 3.1, ie: jessie, ubuntu 13.10):+
<pre>
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% /
</pre>
+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)
<pre>
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
</pre>
h3. Ajout/Suppression IP/Subnet d'une VM existante
Voir les IPs actutelles de la VM:
<pre>
# 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"} |
</pre>
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):
<pre>
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
</pre>
Ajout/Suppression d'une ip dans allowed_address_pairs (noter que les ip ici on a un masque):
<pre>
openstack ttnn add-ip VM_NAME 2a01:6600:8083:d400::/56
openstack ttnn remove-ip VM_NAME 2a01:6600:8083:d400::/56
</pre>
A titre informatif, le genre de commande neutron pour faire la même chose, mais oblige à relister tous les ips/subnets
<pre>
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
</pre>
h3. Ajout d'une interface réseau à une VM:
<pre>
$ 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 |
+--------------------------------------+------------------+------+---------------+--------+-----------------------------------------+
</pre>
Dans la VM:
<pre>
$ 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
</pre>
h3. Réinstallation/Réparation grub d'un VM
Récuperer l'id et l'hyperviseur de la VM
<pre>
# 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 |
</pre>
Bien attendre que la VM soir éteinte, aller sur l'hyperviseur en question, et taper
<pre>
virt-customize -v -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 --run-command 'update-grub ; grub-install /dev/sda;'
</pre>
Enfin, restart la VM
<pre>
# openstack server start VMNAME.tetaneutral.net
</pre>
h3. 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
<pre>
# 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 |
</pre>
Aller sur l'hyperviseur en question, puis:
<pre>
# virt-edit -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 /etc/ssh/sshd_config
</pre>
Fermer le fichier et restart la VM
<pre>
# openstack server start VMNAME.tetaneutral.net
</pre>
h3. 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:
<pre>
$ 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
</pre>
Récuperer l'id et l'hyperviseur de la VM
<pre>
# 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 |
</pre>
Aller sur l'hyperviseur en question, puis:
<pre>
$ 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
</pre>
# Utiliser le device proposé pour la convertion en ext4:
<pre>
$ virt-rescue 918e0ec7-0909-423c-9a67-15b5ef7c7ae0
> tune2fs -O extents,uninit_bg,dir_index /dev/sdb1
> e2fsck -fDC0 /dev/sdb1
> <CTRL+D>
</pre>
Sur la vm openstack, changé l'attribut de la VM en pour le scsi:
<pre>
cd /root/tools/sql_scripts
./os-use-scsi-discard.sh VMNAME.tetaneutral.net
</pre>
Sur G1, restart la VM
<pre>
# openstack server start VMNAME.tetaneutral.net
</pre>
h3. 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
<pre>
# 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 |
</pre>
Aller sur l'hyperviseur en question, puis vérifier l'alignement:
<pre>
$ virt-alignment-scan -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0
/dev/sdb1 65536 512 bad (alignment < 4K)
</pre>
Réalignemet, *aller dans un espace ou il y a 2x l'espace utile de la VM*, puis:
<pre>
$ 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
</pre>
Vérification:
<pre>
$ virt-alignment-scan -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0
/dev/sdb1 65536 64K ok
</pre>
h3. Création/Restauration snapshot
Création:
<pre>
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
</pre>
Restauration:
<pre>
$ 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
</pre>
h3. Exemple de migration de ganeti à openstack (obsolete):
Sur h4:
<pre>
$ gnt-instance stop VMNAME.tetaneutral.net
$ gnt-instance activate-disks VMNAME.tetaneutral.net
h5.tetaneutral.net:disk/0:/dev/drbd34
</pre>
Sur g1, mettre l'image dans cinder
<pre>
name=VMNAME.tetaneutral.net
</pre>
Crée un volume (remplacer 20 par la taille du disque désiré):
<pre>
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}')
</pre>
On remplace le volume rbd par le disque de la VM:
<pre>
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
</pre>
Sur la machine hX qui as le disque (ici h5 et le disque drbd34)
<pre>
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
</pre>
<pre>
# On peut voir l'avancement via:
watch -n1 -- rbd -p disks info volume-$volume_id
</pre>
On change la taille de l'image pour mettre la meme que le volume créé par openstack
<pre>
$ 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
</pre>
Booter la VM avec ce disque (le disque existant déjà le script l'utilisera):
<pre>
/root/tools/boot-vm.sh --ip A.B.C.D --flavor Xvcpu-Yram ${name}
</pre>
_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:
<pre>
gnt-instance deactivate-disks VMNAME.tetaneutral.net
</pre>
S'il faut changer la RAM et vCPU
<pre>
nova flavor-list
nova list
nova resize ${name} FLAVOR_ID --poll
nova resize-confirm VM_ID
</pre>
h3. Convertion des images rbd au format 2 (pour les premieres VMs migrées de ganeti)
<pre>
$ 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>
</pre>
h3. Déplacer une VM de pool ceph (dernier test avec ceph jewel / openstack newton)
<pre>
# openstack server show test246.tetaneutral.net
+--------------------------------------+----------------------------------------------------------+
| Field | Value |
+--------------------------------------+----------------------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | nova |
| OS-EXT-SRV-ATTR:host | stri |
| OS-EXT-SRV-ATTR:hypervisor_hostname | stri.tetaneutral.net |
| OS-EXT-SRV-ATTR:instance_name | 7e43f7ad-1cda-417a-9c6d-092d7cba0502 |
| OS-EXT-STS:power_state | Shutdown |
| OS-EXT-STS:task_state | None |
| OS-EXT-STS:vm_state | stopped |
| OS-SRV-USG:launched_at | 2014-12-12T06:38:51.000000 |
| OS-SRV-USG:terminated_at | None |
| accessIPv4 | |
| accessIPv6 | |
| addresses | vlan-routed=fe80::81:73, 91.224.149.115 |
| config_drive | |
| created | 2014-12-12T06:38:39Z |
| flavor | 1vcpu-2048ram (7880cafc-bd0b-4045-9777-ef2e9201bd6c) |
| hostId | d75a731887e8f4e381709b64e2622a3332cf498030c73ae5dca38d1f |
| id | 7e43f7ad-1cda-417a-9c6d-092d7cba0502 |
| image | |
| key_name | None |
| name | test246.tetaneutral.net |
| os-extended-volumes:volumes_attached | [{u'id': u'8ff1ca0a-92df-4927-8411-de1793ee1c05'}] |
| project_id | ed980105f9d047e2bee738b3f261f126 |
| properties | dsmode='local' |
| security_groups | [{u'name': u'default'}] |
| status | SHUTOFF |
| updated | 2017-05-02T06:21:56Z |
| user_id | f18b121edda04346b86610fa23983a0e |
+--------------------------------------+----------------------------------------------------------+
# openstack volume list|grep test246
| 8ff1ca0a-92df-4927-8411-de1793ee1c05 | test246.tetaneutral.net-bootdisk | in-use | 10 | Attached to test246.tetaneutral.net on /dev/vda |
# openstack volume create --type ceph-ssd --size 10 test246.tetaneutral.net-bootdisk-tmp
# openstack volume list|grep test246
| eaada070-19d4-4a32-a5cf-e2e91ac94d5a | test246.tetaneutral.net-bootdisk-tmp | available | 10 | |
| 8ff1ca0a-92df-4927-8411-de1793ee1c05 | test246.tetaneutral.net-bootdisk | in-use | 10 | Attached to test246.tetaneutral.net on /dev/vda |
# openstack server stop test246.tetaneutral.net
Request to stop server test246.tetaneutral.net has been accepted.
# openstack server list|grep test246
| 7e43f7ad-1cda-417a-9c6d-092d7cba0502 | test246.tetaneutral.net | ACTIVE | vlan-routed=fe80::81:73, 91.224.149.115
# openstack server list|grep test246
| 7e43f7ad-1cda-417a-9c6d-092d7cba0502 | test246.tetaneutral.net | SHUTOFF | vlan-routed=fe80::81:73, 91.224.149.115
# rbd -p ssds mv volume-b32f6845-35cd-412e-b412-ae142234bc12 ssds/volume-b32f6845-35cd-412e-b412-ae142234bc12.old
# 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
# openstack server delete test246.tetaneutral.net
Request to delete server test246.tetaneutral.net has been accepted.
# openstack server list|grep test246
(Nothing)
# openstack volume set --name test246.tetaneutral.net-bootdisk-old20150605 test246.tetaneutral.net-bootdisk # or openstack volume delete test246.tetaneutral.net-bootdisk
# openstack volume list|grep test246
| eaada070-19d4-4a32-a5cf-e2e91ac94d5a | test246.tetaneutral.net-bootdisk-tmp | available | 10 | |
| 8ff1ca0a-92df-4927-8411-de1793ee1c05 | test246.tetaneutral.net-bootdisk-old20150605 | available | 10 | |
# openstack volume set --name test246.tetaneutral.net-bootdisk test246.tetaneutral.net-bootdisk-tmp
# cinder set-bootable vmkycka.tetaneutral.net-bootdisk true # PAS ENCORE DE COMMANDE AVEC OPENSTACK SERVER ...
# openstack ttnn create --ip 91.224.149.115 --flavor 1vcpu-2048ram test246.tetaneutral.net
</pre>
h2. Migration de VM si le host est UP
<pre>
$ 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/
...
</pre>
Vérifier qu'il y a plus aucune VM (en particulier les VM non managé par openstack)
<pre>
virsh list --all
</pre>
h2. Migration de VM si le host est DOWN (à vérifier depuis le passage à kilo)
h3. 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):
<pre>
# mysql neutron
$ update ml2_port_bindings set host='h7' where host='g6';
</pre>
Ensuite sur la machine destination, on restart les services pour qu'il voit le changement:
<pre>
/etc/init.d/neutron-plugin-linuxrouted-agent restart
</pre>
h3. Commande normal pour évacuer une machine DOWN (obsolete)
Si une machine est capable de tout reprendre :
<pre>
# 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 | |
+--------------------------------------+-------------------+---------------+
</pre>
Attendre ensuite que tous les VMs soit UP niveau openstack
Sinon VM par VM :
<pre>
nova evacuate VMname HOSTname
</pre>
h3. 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:
<pre>
/etc/init.d/neutron-plugin-linuxrouted-agent restart
</pre>
Voir peut être reboot --hard les vms qui on pas marché du premier coup
h2. VM de management (nommé openstack)
h3. Live Migration d'un host à l'autre
Cela fait tout à notre place niveau kvm/libvirt/ceph
<pre>
virsh migrate --persistent --undefinesource --live --p2p openstack qemu+ssh://g2.tetaneutral.net:2222/system
</pre>
h3. 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
<pre>
$ virsh create openstack.xml
$ virsh start openstack.xml
</pre>
h2. Operations sur les hotes
h3. Reboot (obsolete, à remplacer à openstack ttnn evacuate)
<pre>
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
</pre>
# plus necessaire # Post reboot remettre les min_size a 2, rappatrier les VM.
h2. Build latest libguestfs
A pas faire sur le cluster vu la ton de dependance pour le build
<pre>
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
</pre>
h1. Openstack Management TTNN
h2. Liens
* [[Management_Cluster_Ceph]]
* [[Openstack Setup VM pas dans openstack]]
* [[Openstack Installation nouvelle node du cluster]]
* [[Openstack Installation TTNN]]
* "Openstack tools for ttnn":/projects/git-tetaneutral-net/repository/openstack-tools
h2. Avant toute operation Openstack
*Tres important* avant toute operation Openstack lancer sur g1 :
<pre>
root@g1:~# . os.conf
root@g1:~# tools/os-overview.sh
</pre>
Si une ligne n'est pas OK relancer le composant et relancer os-overview.
h2. Création VMs
Example d'un VM sur ssd avec 2 disques (hard) additionels de 500G
<pre>
$ openstack ttnn create --ssd --ip <ipv4> --ssd --disk-size 20 --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
</pre>
Ensuite dans la VM:
<pre>
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
</pre>
/!\ Ne pas mettre nodiscard pour les SSDs /!\
h2. Opération sur les VMs (des membres)
h3. Console série
Dans la VM, pour systemd:
<pre>
$ systemctl enable serial-getty@ttyS0.service
$ systemctl start serial-getty@ttyS0.service
</pre>
Dans la VM, pour sysv
<pre>
$ cat >> /etc/inittab <<EOF
T2:2345:respawn:/sbin/getty ttyS0 115200 vt102
EOF
$ init q
</pre>
Sur g1:
<pre>
$ openstack ttnn log ns2.tetaneutral.net
Debian GNU/Linux 8 ns2 ttyS0
ns2 login:
</pre>
h3. Voir la console graphique sans spice-html5:
Copier le script suivant 'gvnc' sur ca machine:
<pre>
#!/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/
</pre>
Puis
<pre>
sudo apt-get install virt-viewer
./gvnc puppet.openstack.net
</pre>
h3. Reboot VM en error
<pre>
openstack server set --state active xxx.tetaneutral.net
openstack server reboot --hard --wait xxx.tetaneutral.net
</pre>
h3. Shutdown une VM
<pre>
openstack server stop xxx.tetaneutral.net
</pre>
A noter que suspend fait une sauvegarde de la RAM comme sur un laptop. shelve est bugué ne pas utiliser.
h3. Effacer une VM
<pre>
openstack ttnn delete xxx.tetaneutral.net
</pre>
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.
h3. Disques de VM
Pour renommer (et permettre a boot-disk de recreer) ou effacer :
<pre>
openstack volume list
openstack volume set xxx.tetaneutral.net-bootdisk-old --name xxx.tetaneutral.net-bootdisk-new
openstack volume delete <ID_or_Name>
</pre>
h3. Offline fsck
Récuperer l'id et l'hyperviseur de la VM
<pre>
# 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 |
</pre>
Aller sur l'hyperviseur en question, puis:
<pre>
# 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
</pre>
Ou bien sur la machine qui host la VM :
<pre>
# virt-rescue 918e0ec7-0909-423c-9a67-15b5ef7c7ae0
><rescue> fsck -a /dev/sdb1
</pre>
Si le fsck returns une erreur, c'est donc un probleme un peu plus grave on peut faire:
<pre>
><fs> e2fsck -y /dev/sdb1
</pre>
h3. 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...).
<pre>
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
</pre>
Puis dans la VM
<pre>
mkfs.ext4 /dev/sdb
tune2fs -m 0 -i 0 -c 0 /dev/sdb
</pre>
h3. Agrandissement d'un disque
/!\ à retester à chaque update openstack vu que ca fait du sql /!\
* Dernière validation: Newton
Sur la machine 'openstack':
<pre>
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
</pre>
Puis sur la VM, plusieur cas de figure:
+Disque sans partition:+
<pre>
# Note: dans un screen car plutot pas rapide
resize2fs -p /dev/vdb
</pre>
+Disque avec partition avec parted récent (>= 3.1, ie: jessie, ubuntu 13.10):+
<pre>
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% /
</pre>
+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)
<pre>
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
</pre>
h3. Ajout/Suppression IP/Subnet d'une VM existante
Voir les IPs actutelles de la VM:
<pre>
# 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"} |
</pre>
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):
<pre>
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
</pre>
Ajout/Suppression d'une ip dans allowed_address_pairs (noter que les ip ici on a un masque):
<pre>
openstack ttnn add-ip VM_NAME 2a01:6600:8083:d400::/56
openstack ttnn remove-ip VM_NAME 2a01:6600:8083:d400::/56
</pre>
A titre informatif, le genre de commande neutron pour faire la même chose, mais oblige à relister tous les ips/subnets
<pre>
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
</pre>
h3. Ajout d'une interface réseau à une VM:
<pre>
$ 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 |
+--------------------------------------+------------------+------+---------------+--------+-----------------------------------------+
</pre>
Dans la VM:
<pre>
$ 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
</pre>
h3. Réinstallation/Réparation grub d'un VM
Récuperer l'id et l'hyperviseur de la VM
<pre>
# 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 |
</pre>
Bien attendre que la VM soir éteinte, aller sur l'hyperviseur en question, et taper
<pre>
virt-customize -v -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 --run-command 'update-grub ; grub-install /dev/sda;'
</pre>
Enfin, restart la VM
<pre>
# openstack server start VMNAME.tetaneutral.net
</pre>
h3. 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
<pre>
# 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 |
</pre>
Aller sur l'hyperviseur en question, puis:
<pre>
# virt-edit -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 /etc/ssh/sshd_config
</pre>
Fermer le fichier et restart la VM
<pre>
# openstack server start VMNAME.tetaneutral.net
</pre>
h3. 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:
<pre>
$ 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
</pre>
Récuperer l'id et l'hyperviseur de la VM
<pre>
# 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 |
</pre>
Aller sur l'hyperviseur en question, puis:
<pre>
$ 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
</pre>
# Utiliser le device proposé pour la convertion en ext4:
<pre>
$ virt-rescue 918e0ec7-0909-423c-9a67-15b5ef7c7ae0
> tune2fs -O extents,uninit_bg,dir_index /dev/sdb1
> e2fsck -fDC0 /dev/sdb1
> <CTRL+D>
</pre>
Sur la vm openstack, changé l'attribut de la VM en pour le scsi:
<pre>
cd /root/tools/sql_scripts
./os-use-scsi-discard.sh VMNAME.tetaneutral.net
</pre>
Sur G1, restart la VM
<pre>
# openstack server start VMNAME.tetaneutral.net
</pre>
h3. 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
<pre>
# 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 |
</pre>
Aller sur l'hyperviseur en question, puis vérifier l'alignement:
<pre>
$ virt-alignment-scan -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0
/dev/sdb1 65536 512 bad (alignment < 4K)
</pre>
Réalignemet, *aller dans un espace ou il y a 2x l'espace utile de la VM*, puis:
<pre>
$ 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
</pre>
Vérification:
<pre>
$ virt-alignment-scan -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0
/dev/sdb1 65536 64K ok
</pre>
h3. Création/Restauration snapshot
Création:
<pre>
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
</pre>
Restauration:
<pre>
$ 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
</pre>
h3. Exemple de migration de ganeti à openstack (obsolete):
Sur h4:
<pre>
$ gnt-instance stop VMNAME.tetaneutral.net
$ gnt-instance activate-disks VMNAME.tetaneutral.net
h5.tetaneutral.net:disk/0:/dev/drbd34
</pre>
Sur g1, mettre l'image dans cinder
<pre>
name=VMNAME.tetaneutral.net
</pre>
Crée un volume (remplacer 20 par la taille du disque désiré):
<pre>
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}')
</pre>
On remplace le volume rbd par le disque de la VM:
<pre>
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
</pre>
Sur la machine hX qui as le disque (ici h5 et le disque drbd34)
<pre>
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
</pre>
<pre>
# On peut voir l'avancement via:
watch -n1 -- rbd -p disks info volume-$volume_id
</pre>
On change la taille de l'image pour mettre la meme que le volume créé par openstack
<pre>
$ 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
</pre>
Booter la VM avec ce disque (le disque existant déjà le script l'utilisera):
<pre>
/root/tools/boot-vm.sh --ip A.B.C.D --flavor Xvcpu-Yram ${name}
</pre>
_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:
<pre>
gnt-instance deactivate-disks VMNAME.tetaneutral.net
</pre>
S'il faut changer la RAM et vCPU
<pre>
nova flavor-list
nova list
nova resize ${name} FLAVOR_ID --poll
nova resize-confirm VM_ID
</pre>
h3. Convertion des images rbd au format 2 (pour les premieres VMs migrées de ganeti)
<pre>
$ 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>
</pre>
h3. Déplacer une VM de pool ceph (dernier test avec ceph jewel / openstack newton)
<pre>
# openstack server show test246.tetaneutral.net
+--------------------------------------+----------------------------------------------------------+
| Field | Value |
+--------------------------------------+----------------------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | nova |
| OS-EXT-SRV-ATTR:host | stri |
| OS-EXT-SRV-ATTR:hypervisor_hostname | stri.tetaneutral.net |
| OS-EXT-SRV-ATTR:instance_name | 7e43f7ad-1cda-417a-9c6d-092d7cba0502 |
| OS-EXT-STS:power_state | Shutdown |
| OS-EXT-STS:task_state | None |
| OS-EXT-STS:vm_state | stopped |
| OS-SRV-USG:launched_at | 2014-12-12T06:38:51.000000 |
| OS-SRV-USG:terminated_at | None |
| accessIPv4 | |
| accessIPv6 | |
| addresses | vlan-routed=fe80::81:73, 91.224.149.115 |
| config_drive | |
| created | 2014-12-12T06:38:39Z |
| flavor | 1vcpu-2048ram (7880cafc-bd0b-4045-9777-ef2e9201bd6c) |
| hostId | d75a731887e8f4e381709b64e2622a3332cf498030c73ae5dca38d1f |
| id | 7e43f7ad-1cda-417a-9c6d-092d7cba0502 |
| image | |
| key_name | None |
| name | test246.tetaneutral.net |
| os-extended-volumes:volumes_attached | [{u'id': u'8ff1ca0a-92df-4927-8411-de1793ee1c05'}] |
| project_id | ed980105f9d047e2bee738b3f261f126 |
| properties | dsmode='local' |
| security_groups | [{u'name': u'default'}] |
| status | SHUTOFF |
| updated | 2017-05-02T06:21:56Z |
| user_id | f18b121edda04346b86610fa23983a0e |
+--------------------------------------+----------------------------------------------------------+
# openstack volume list|grep test246
| 8ff1ca0a-92df-4927-8411-de1793ee1c05 | test246.tetaneutral.net-bootdisk | in-use | 10 | Attached to test246.tetaneutral.net on /dev/vda |
# openstack volume create --type ceph-ssd --size 10 test246.tetaneutral.net-bootdisk-tmp
# openstack volume list|grep test246
| eaada070-19d4-4a32-a5cf-e2e91ac94d5a | test246.tetaneutral.net-bootdisk-tmp | available | 10 | |
| 8ff1ca0a-92df-4927-8411-de1793ee1c05 | test246.tetaneutral.net-bootdisk | in-use | 10 | Attached to test246.tetaneutral.net on /dev/vda |
# openstack server stop test246.tetaneutral.net
Request to stop server test246.tetaneutral.net has been accepted.
# openstack server list|grep test246
| 7e43f7ad-1cda-417a-9c6d-092d7cba0502 | test246.tetaneutral.net | ACTIVE | vlan-routed=fe80::81:73, 91.224.149.115
# openstack server list|grep test246
| 7e43f7ad-1cda-417a-9c6d-092d7cba0502 | test246.tetaneutral.net | SHUTOFF | vlan-routed=fe80::81:73, 91.224.149.115
# rbd -p ssds mv volume-b32f6845-35cd-412e-b412-ae142234bc12 ssds/volume-b32f6845-35cd-412e-b412-ae142234bc12.old
# 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
# openstack server delete test246.tetaneutral.net
Request to delete server test246.tetaneutral.net has been accepted.
# openstack server list|grep test246
(Nothing)
# openstack volume set --name test246.tetaneutral.net-bootdisk-old20150605 test246.tetaneutral.net-bootdisk # or openstack volume delete test246.tetaneutral.net-bootdisk
# openstack volume list|grep test246
| eaada070-19d4-4a32-a5cf-e2e91ac94d5a | test246.tetaneutral.net-bootdisk-tmp | available | 10 | |
| 8ff1ca0a-92df-4927-8411-de1793ee1c05 | test246.tetaneutral.net-bootdisk-old20150605 | available | 10 | |
# openstack volume set --name test246.tetaneutral.net-bootdisk test246.tetaneutral.net-bootdisk-tmp
# cinder set-bootable vmkycka.tetaneutral.net-bootdisk true # PAS ENCORE DE COMMANDE AVEC OPENSTACK SERVER ...
# openstack ttnn create --ip 91.224.149.115 --flavor 1vcpu-2048ram test246.tetaneutral.net
</pre>
h2. Migration de VM si le host est UP
<pre>
$ 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/
...
</pre>
Vérifier qu'il y a plus aucune VM (en particulier les VM non managé par openstack)
<pre>
virsh list --all
</pre>
h2. Migration de VM si le host est DOWN (à vérifier depuis le passage à kilo)
h3. 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):
<pre>
# mysql neutron
$ update ml2_port_bindings set host='h7' where host='g6';
</pre>
Ensuite sur la machine destination, on restart les services pour qu'il voit le changement:
<pre>
/etc/init.d/neutron-plugin-linuxrouted-agent restart
</pre>
h3. Commande normal pour évacuer une machine DOWN (obsolete)
Si une machine est capable de tout reprendre :
<pre>
# 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 | |
+--------------------------------------+-------------------+---------------+
</pre>
Attendre ensuite que tous les VMs soit UP niveau openstack
Sinon VM par VM :
<pre>
nova evacuate VMname HOSTname
</pre>
h3. 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:
<pre>
/etc/init.d/neutron-plugin-linuxrouted-agent restart
</pre>
Voir peut être reboot --hard les vms qui on pas marché du premier coup
h2. VM de management (nommé openstack)
h3. Live Migration d'un host à l'autre
Cela fait tout à notre place niveau kvm/libvirt/ceph
<pre>
virsh migrate --persistent --undefinesource --live --p2p openstack qemu+ssh://g2.tetaneutral.net:2222/system
</pre>
h3. 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
<pre>
$ virsh create openstack.xml
$ virsh start openstack.xml
</pre>
h2. Operations sur les hotes
h3. Reboot (obsolete, à remplacer à openstack ttnn evacuate)
<pre>
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
</pre>
# plus necessaire # Post reboot remettre les min_size a 2, rappatrier les VM.
h2. Build latest libguestfs
A pas faire sur le cluster vu la ton de dependance pour le build
<pre>
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
</pre>