Openstack Management TTNN » Historique » Version 119
Version 118 (Mehdi Abaakouk, 28/08/2018 08:20) → Version 119/140 (Mehdi Abaakouk, 28/08/2018 08:37)
{{>toc}}
h1. Openstack Management TTNN
h2. 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":/projects/git-tetaneutral-net/repository/openstack-tools
h2. Avant toute operation Openstack
*Tres important* avant toute operation Openstack lancer sur g1 :
<pre>
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
Cf. [[HOWTO add a VM]]
Example d'un VM sur ssd avec 2 disques (hard) additionels de 500G
<pre>
$ 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
</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 sa 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. Changer CPU RAM
<pre>
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
</pre>
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 (testé sur openstack ocata and ceph jewel)
<pre>
/root/tools/os-grow-fs.sh bacasable.sileht.net-bootdisk 11
</pre>
Puis sur la VM, plusieur cas de figure:
+Disque sans partition:+
<pre>
# Note: dans un screen car plutot pas rapide
resize2fs -p /dev/sdb
</pre>
+Disque avec partition avec parted récent (>= 3.1, ie: jessie, ubuntu 13.10):+
<pre>
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% /
</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 (mode simple)
<pre>
openstack ttnn add-ip VM_NAME 89.234.156.212
openstack ttnn remove-ip VM_NAME 89.234.156.212
</pre>
h3. 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:
<pre>
# 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"} |
</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 --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
</pre>
Ajout/Suppression d'une ip dans allowed_address_pairs (noter que les ip ici on a un masque):
<pre>
openstack ttnn add-ip --manual VM_NAME 2a01:6600:8083:d400::/56
openstack ttnn remove-ip --manual VM_NAME 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>
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 |
</pre>
Aller sur l'hyperviseur en question, puis:
<pre>
root@<hyperviseur># virt-edit -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 /etc/ssh/sshd_config
</pre>
Fermer le fichier puis sur g1 restart la VM
<pre>
root@g1# openstack server start VMNAME.tetaneutral.net
</pre>
h3. 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:
<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
$ vi /etc/default/grub
# Ajouter: GRUB_CMDLINE_LINUX="elevator=noop console=tty0 console=ttyS0,115200n8"
$ update-grub
$ shutdown -h now
</pre>
Récuperer l'id et l'hyperviseur de la VM
<pre>
# 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 |
</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>
Ajout des attributs scsi
<pre>
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
</pre>
Puis supprimer et recréer la VM
<pre>
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
</pre>
h3. 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.
<pre>
# rbd info -p disks XXXXXXXX-vol richmond-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 vmrichmond.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 dcc26207-ef60-48e6-983e-94c1c945d3b3 |
| migration_status | None |
| multiattach | False |
| name | vmXXXXXXXX.tetaneutral.net-disk-1 vmrichmond.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 volume-dcc26207-ef60-48e6-983e-94c1c945d3b3 | grep size
size 1024 GB in 262144 objects
/!\ doit être identique à l'image d'origine /!\
</pre>
En suite on s'assure que les features de l'image sont celle attendu par Openstack:
<pre>
# rbd info -p disks volume-dcc26207-ef60-48e6-983e-94c1c945dXbX volume-dcc26207-ef60-48e6-983e-94c1c945d3b3 | grep features
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
# rbd info -p disks XXXXXXXX-vol richmond-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 disks/richmond-vol $i ; done
# # Rebuild metadata file on the volume
# rbd object-map rebuild disks/XXXXXXXX-vol disks/richmond-vol
Object Map Rebuild: 2% complete...
</pre>
Et pour finir on swap les deux volumes
<pre>
# 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
</pre>
Voila on peut maintenant mettre le disque dans une VM:
<pre>
openstack server add volume XXXXXXXX.tetaneutral.net XXXXXXXX.tetaneutral.net-disk-1
</pre>
h3. Déplacer une VM de pool ceph (dernier test avec ceph jewel / openstack ocata)
<pre>
# 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
# 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
</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. Viré cloud-init sans accés à la VM:
<pre>
# 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 :::::::::::: ; "
</pre>
h2. Opération sur les hyperviseurs
h3. Reboot d'un hyperviseur
Sur g1
<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]
...
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/
...
</pre>
Sur l'hyperviseur en question:
<pre>
# 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
</pre>
Une fois l'opération terminer, pour remettre l'hyperviseur en route, sur g1
<pre>
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.
</pre>
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>
h1. Openstack Management TTNN
h2. 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":/projects/git-tetaneutral-net/repository/openstack-tools
h2. Avant toute operation Openstack
*Tres important* avant toute operation Openstack lancer sur g1 :
<pre>
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
Cf. [[HOWTO add a VM]]
Example d'un VM sur ssd avec 2 disques (hard) additionels de 500G
<pre>
$ 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
</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 sa 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. Changer CPU RAM
<pre>
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
</pre>
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 (testé sur openstack ocata and ceph jewel)
<pre>
/root/tools/os-grow-fs.sh bacasable.sileht.net-bootdisk 11
</pre>
Puis sur la VM, plusieur cas de figure:
+Disque sans partition:+
<pre>
# Note: dans un screen car plutot pas rapide
resize2fs -p /dev/sdb
</pre>
+Disque avec partition avec parted récent (>= 3.1, ie: jessie, ubuntu 13.10):+
<pre>
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% /
</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 (mode simple)
<pre>
openstack ttnn add-ip VM_NAME 89.234.156.212
openstack ttnn remove-ip VM_NAME 89.234.156.212
</pre>
h3. 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:
<pre>
# 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"} |
</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 --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
</pre>
Ajout/Suppression d'une ip dans allowed_address_pairs (noter que les ip ici on a un masque):
<pre>
openstack ttnn add-ip --manual VM_NAME 2a01:6600:8083:d400::/56
openstack ttnn remove-ip --manual VM_NAME 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>
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 |
</pre>
Aller sur l'hyperviseur en question, puis:
<pre>
root@<hyperviseur># virt-edit -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 /etc/ssh/sshd_config
</pre>
Fermer le fichier puis sur g1 restart la VM
<pre>
root@g1# openstack server start VMNAME.tetaneutral.net
</pre>
h3. 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:
<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
$ vi /etc/default/grub
# Ajouter: GRUB_CMDLINE_LINUX="elevator=noop console=tty0 console=ttyS0,115200n8"
$ update-grub
$ shutdown -h now
</pre>
Récuperer l'id et l'hyperviseur de la VM
<pre>
# 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 |
</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>
Ajout des attributs scsi
<pre>
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
</pre>
Puis supprimer et recréer la VM
<pre>
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
</pre>
h3. 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.
<pre>
# rbd info -p disks XXXXXXXX-vol richmond-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 vmrichmond.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 dcc26207-ef60-48e6-983e-94c1c945d3b3 |
| migration_status | None |
| multiattach | False |
| name | vmXXXXXXXX.tetaneutral.net-disk-1 vmrichmond.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 volume-dcc26207-ef60-48e6-983e-94c1c945d3b3 | grep size
size 1024 GB in 262144 objects
/!\ doit être identique à l'image d'origine /!\
</pre>
En suite on s'assure que les features de l'image sont celle attendu par Openstack:
<pre>
# rbd info -p disks volume-dcc26207-ef60-48e6-983e-94c1c945dXbX volume-dcc26207-ef60-48e6-983e-94c1c945d3b3 | grep features
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
# rbd info -p disks XXXXXXXX-vol richmond-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 disks/richmond-vol $i ; done
# # Rebuild metadata file on the volume
# rbd object-map rebuild disks/XXXXXXXX-vol disks/richmond-vol
Object Map Rebuild: 2% complete...
</pre>
Et pour finir on swap les deux volumes
<pre>
# 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
</pre>
Voila on peut maintenant mettre le disque dans une VM:
<pre>
openstack server add volume XXXXXXXX.tetaneutral.net XXXXXXXX.tetaneutral.net-disk-1
</pre>
h3. Déplacer une VM de pool ceph (dernier test avec ceph jewel / openstack ocata)
<pre>
# 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
# 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
</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. Viré cloud-init sans accés à la VM:
<pre>
# 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 :::::::::::: ; "
</pre>
h2. Opération sur les hyperviseurs
h3. Reboot d'un hyperviseur
Sur g1
<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]
...
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/
...
</pre>
Sur l'hyperviseur en question:
<pre>
# 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
</pre>
Une fois l'opération terminer, pour remettre l'hyperviseur en route, sur g1
<pre>
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.
</pre>
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>