Projet

Général

Profil

Openstack Management TTNN » Historique » Version 26

« Précédent - Version 26/140 (diff) - Suivant » - Version actuelle
Mehdi Abaakouk, 25/01/2015 16:13


Openstack Management TTNN

openstack tools for ttnn: http://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/openstack-tools

Opération sur les VMs (des membres)

Voir la console graphique sans spice-html5:

Copier le script suivant 'gvnc' sur ca machine:

#!/bin/bash
vm=$1
info=($(ssh openstack.tetaneutral.net -p 2222 -l root -- "mysql nova --skip-column-names --batch -e 'select host, uuid from instances where display_name=\"$vm\";'"))

if [ "${info[0]}" == "mysql" ]; then
    echo "Error in mysql request" 
    exit 1
fi

hypervisor=${info[0]}.tetaneutral.net
uuid=${info[1]}
spice_port=$(ssh ${hypervisor} -p 2222 -l root virsh domdisplay ${uuid} | awk -F: '{print $3}')

echo "$vm on $hypervisor port $spice_port" 
ssh -N $hypervisor -p 2222 -l root -L 5910:localhost:${spice_port} &
pid=$!

cleanup(){
    kill $pid
}

trap cleanup EXIT

sleep 2
remote-viewer spice://localhost:5910/

Puis

sudo apt-get install virt-viewer
./gvnc puppet.openstack.net

Reboot VM en error

nova reset-state --active xxx.tetaneutral.net
nova reboot --hard --poll xxx.tetaneutral.net

Shutdown une VM

nova stop xxx.tetaneutral.net

A noter que suspend fait une sauvegarde de la RAM comme sur un laptop. shelve est bugué ne pas utiliser.

Effacer une VM

nova delete xxx.tetaneutral.net

Disques de VM

Pour renommer (et permettre a boot-disk de recreer) ou effacer :

cinder list
cinder rename <ID> <newname>
cinder delete <ID_or_Name>

Agrandissement d'un disque

Sur la machine 'openstack':

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

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

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

Puis sur la VM:

Il faut avoir un 'parted' récent ou patché avec le support du 'online resizepart':

'online resizepart' est natif depuis parted >= 3.1:
  • debian >= jessie
  • ubuntu >= 14.10
'online resizepart' backporté dans:
  • ubuntu >= 13.10 < 14.10

Pour debian wheezy, utilisation les packages ubuntu de 14.04 devrait marcher
(pas encore testé, à voir si le kernel veut bien reload la table des partitions après)

 
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% /

Méthode plus risquée et manuelle pour wheezy :

sfdisk -d /dev/vda > vda.mbr
cp vda.mbr vda.mbr.ori
vi vda.mbr 
# mettre un tres grand nombre pour la fin de la partition
sfdisk -L -n --no-reread /dev/vda < vda.mbr
# cela va faire une erreur avec le max a mettre pour la fin de la partition
# changer la fin de la partition avec ce chiffre
sfdisk -L --no-reread /dev/vda < vda.mbr
reboot
resize2fs -p /dev/vda1

Ajout d'une interface réseau à une VM:

$ neutron net-list | grep vlan3199
| 460f49ce-f5ed-449e-9e0f-7626bcee4379 | vlan3199         | ba3f12af-074a-4a31-9a7c-a621993e13bb 192.168.99.0/24     |

$ neutron port-create 460f49ce-f5ed-449e-9e0f-7626bcee4379 --name nagios-eth2 --fixed-ips type=dict list=true ip_address=192.168.99.248
Created a new port:
+-----------------------+---------------------------------------------------------------------------------------+
| Field                 | Value                                                                                 |
+-----------------------+---------------------------------------------------------------------------------------+
| admin_state_up        | True                                                                                  |
| allowed_address_pairs |                                                                                       |
| binding:host_id       |                                                                                       |
| binding:profile       | {}                                                                                    |
| binding:vif_details   | {}                                                                                    |
| binding:vif_type      | unbound                                                                               |
| binding:vnic_type     | normal                                                                                |
| device_id             |                                                                                       |
| device_owner          |                                                                                       |
| fixed_ips             | {"subnet_id": "ba3f12af-074a-4a31-9a7c-a621993e13bb", "ip_address": "192.168.99.248"} |
| id                    | 918e0ec7-0909-423c-9a67-15b5ef7c7ae0                                                  |
| mac_address           | fa:16:3e:6b:32:07                                                                     |
| name                  | nagios-eth2                                                                           |
| network_id            | 460f49ce-f5ed-449e-9e0f-7626bcee4379                                                  |
| security_groups       | b6d5b5fb-a053-4f97-b964-9e1a12d243b1                                                  |
| status                | DOWN                                                                                  |
| tenant_id             | ed980105f9d047e2bee738b3f261f126                                                      |
+-----------------------+---------------------------------------------------------------------------------------+

$ nova interface-attach --port-id 918e0ec7-0909-423c-9a67-15b5ef7c7ae0   nagios.tetaneutral.net

Dans la VM:

$ dmesg | tail 
[ 1315.826088] virtio-pci 0000:00:06.0: using default PCI settings
[ 1315.826102] virtio-pci 0000:00:07.0: no hotplug settings from platform
[ 1315.826102] virtio-pci 0000:00:07.0: using default PCI settings
[ 1315.826116] pci 0000:00:08.0: no hotplug settings from platform
[ 1315.826117] pci 0000:00:08.0: using default PCI settings
[ 1315.826382] virtio-pci 0000:00:08.0: enabling device (0000 -> 0003)
[ 1315.829281] virtio-pci 0000:00:08.0: setting latency timer to 64
[ 1315.829535] virtio-pci 0000:00:08.0: irq 50 for MSI/MSI-X
[ 1315.829555] virtio-pci 0000:00:08.0: irq 51 for MSI/MSI-X
[ 1315.829563] virtio-pci 0000:00:08.0: irq 52 for MSI/MSI-X

$ ip l   show dev eth2
4: eth2: <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 -4 /etc/network/interfaces
auto eth2
iface eth2 inet static
   address 192.168.99.248
   netmask 255.255.255.0

$ ifup eth2
$ ping 192.169.99.250
PING 192.169.99.250 (192.169.99.250) 56(84) bytes of data.
64 bytes from 192.169.99.250: icmp_req=1 ttl=119 time=170 ms
64 bytes from 192.169.99.250: icmp_req=2 ttl=119 time=204 ms
^C

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

# nova stop VMNAME.tetaneutral.net
# nova show VMNAME.tetaneutral.net | grep -e 'host ' -e ' id '
| OS-EXT-SRV-ATTR:host                 | g1                                                       |
| id                                   | 918e0ec7-0909-423c-9a67-15b5ef7c7ae0                     |

Aller sur l'hyperviseur en question, puis:

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

Fermer le fichier et restart la VM

# nova start VMNAME.tetaneutral.net

Création/Restauration snapshot

Création:

source os.conf
/root/tools/os-snapshot-vm.sh pano.tetaneutral.net bootdisk /
* Freezing / of pano.tetaneutral.net
* Snapshoting pano.tetaneutral.net-bootdisk
Snapshot pano.tetaneutral.net-bootdisk-20150125-1600 is in state creating ..
* pano.tetaneutral.net-bootdisk snapshoted
* / of pano.tetaneutral.net unfreezed

Restauration:

$ cinder snapshot-show pano.tetaneutral.net-bootdisk-20150125-1600 | awk '/ id /{print $4}'
7dfbe98c-756e-47d1-a8bf-c8f2092de2f8
$ cinder create --display-name pano-restauration-test --snapshot-id 7dfbe98c-756e-47d1-a8bf-c8f2092de2f8 101
$ cinder show pano-restauration-test | awk '/ id /{print $4}'
80bb0bb2-8d37-42b2-bc8e-5e367ce2d94a
$ nova volume-attach pano.tetaneutral.net 80bb0bb2-8d37-42b2-bc8e-5e367ce2d94a auto

Exemple de migration de ganeti à openstack:

Sur h4:

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

Sur g1, mettre l'image dans cinder

name=VMNAME.tetaneutral.net

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

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

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

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

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

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

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

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

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

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

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

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

Quand c'est fini sur h4:

gnt-instance deactivate-disks VMNAME.tetaneutral.net

S'il faut changer la RAM et vCPU

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

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

$ nova 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
$ nova start <vm_name>

Déplacer une VM de pool ceph (en cours d'écriture)

$ nova stop puppet.tetaneutral.net
$ cinder list | grep puppet.tetaneutral.net
$ rbd -p disks export volume-213e894e-2f20-42b5-a27b-21f5a355c722 - | rbd import --image-format 2 -p ssds - volume-213e894e-2f20-42b5-a27b-21f5a355c722

# Laurent 20141215
/root/tools/boot-vm.sh --ip 89.234.156.246 --image debian-wheezy --disk-size 10 --flavor 1vcpu-1024ram test246.tetaneutral.net
cinder create --volume_type ceph-ssd --display-name test246.tetaneutral.net-bootdisk-tmp 10
rbd -p ssds mv volume-$volume_id ssds/volume-${volume_id}.old
date;rbd -p disks export volume-0afab4c6-e340-4352-a609-7c43d51b5795 - | rbd import --image-format 2 -p ssds - volume-${volume_id} ;date

root@g1:~# nova volume-detach test246.tetaneutral.net 0afab4c6-e340-4352-a609-7c43d51b5795
ERROR (Forbidden): Can't detach root device volume (HTTP 403) (Request-ID: req-98a6e8f3-8897-4361-8fd7-6f10484d51b9)
# see https://bugs.launchpad.net/nova/+bug/1396965 and https://ask.openstack.org/en/question/53732/detaching-root-device-volume-of-an-instance/

nova delete test246.tetaneutral.net
cinder delete test246.tetaneutral.net-bootdisk
cinder rename test246.tetaneutral.net-bootdisk-tmp test246.tetaneutral.net-bootdisk
/root/tools/boot-vm.sh --ip 89.234.156.246 --flavor 1vcpu-1024ram test246.tetaneutral.net

VM de management (nommé openstack)

Live Migration d'un host à l'autre

Cela fait tout à notre place niveau kvm/libvirt/ceph

virsh migrate --persistent --undefinesource --live --p2p openstack qemu+ssh://g2:2222/system

Recover depuis une perte de la machine hote:

Créé un fichier openstack.xml à partir d'un backup de '/etc/libvirt/qemu/openstack.xml' ou utiliser l'exemple ici: attachment:openstack.xml

Note: il faut surement viré les uuid des interfaces openvswitch qui sont différent suivant le hosts

Puis on recréé la VM

$ virsh create openstack.xml
$ virsh start openstack.xml

Operations sur les hotes

Reboot

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

Post reboot remettre les min_size a 2, rappatrier les VM.