Projet

Général

Profil

Cluster with libvirt » Historique » Version 17

Matthieu Herrb, 16/09/2020 09:00
reparation grub

1 1 Mehdi Abaakouk
{{>toc}}
2 1 Mehdi Abaakouk
3 1 Mehdi Abaakouk
h1. Cluster with libvirt
4 1 Mehdi Abaakouk
5 9 Mehdi Abaakouk
6 9 Mehdi Abaakouk
7 9 Mehdi Abaakouk
8 9 Mehdi Abaakouk
h2. Tooling
9 9 Mehdi Abaakouk
10 9 Mehdi Abaakouk
<pre>
11 9 Mehdi Abaakouk
12 9 Mehdi Abaakouk
# cd /root/tools/libvirt/
13 9 Mehdi Abaakouk
14 9 Mehdi Abaakouk
# ./autovirsh domuuid gizmo.sileht.net
15 9 Mehdi Abaakouk
Domain gizmo.sileht.net is on g3
16 9 Mehdi Abaakouk
4baace2f-6d7c-4575-8982-bedb6065ab6b
17 9 Mehdi Abaakouk
18 9 Mehdi Abaakouk
# ./where www.tetaneutral.net
19 9 Mehdi Abaakouk
Domain www.tetaneutral.net is on g1
20 9 Mehdi Abaakouk
21 9 Mehdi Abaakouk
# ./create-vm --help
22 9 Mehdi Abaakouk
usage: create-vm --ip IP NAME
23 9 Mehdi Abaakouk
       --image debian-buster-scsi
24 9 Mehdi Abaakouk
       --ram 1     # SIZE in GiB
25 9 Mehdi Abaakouk
       --vcpu 1
26 9 Mehdi Abaakouk
       --ip <IPV4>
27 9 Mehdi Abaakouk
       --disk 20   # SIZE in GiB
28 9 Mehdi Abaakouk
       --on g1       # short name of the host
29 9 Mehdi Abaakouk
30 9 Mehdi Abaakouk
# ./migrate --help
31 9 Mehdi Abaakouk
usage: migrate NAME DEST
32 9 Mehdi Abaakouk
33 9 Mehdi Abaakouk
34 10 Mehdi Abaakouk
# ./info gizmo.sileht.net
35 10 Mehdi Abaakouk
Domain gizmo.sileht.net is on g3
36 10 Mehdi Abaakouk
Interface  Type       Source     Model       MAC
37 10 Mehdi Abaakouk
-------------------------------------------------------
38 10 Mehdi Abaakouk
tap249cbb03-b8 ethernet   -          virtio      fa:16:3e:88:4d:0b
39 10 Mehdi Abaakouk
40 10 Mehdi Abaakouk
Target     Source
41 10 Mehdi Abaakouk
------------------------------------------------
42 10 Mehdi Abaakouk
hda        ssds/97c925e4-9f3e-4b92-96b9-6190e0fc4b88_disk.config
43 10 Mehdi Abaakouk
sda        ssds/volume-0973c10d-79c8-4906-9f9c-9ba33118203d
44 10 Mehdi Abaakouk
sdb        disks/volume-3657e47a-07d8-4052-8dcf-cb7a0fb19b20
45 10 Mehdi Abaakouk
46 10 Mehdi Abaakouk
<config>
47 10 Mehdi Abaakouk
  <tap name="tap249cbb03-b8">91.224.149.214</tap>
48 10 Mehdi Abaakouk
</config>
49 10 Mehdi Abaakouk
50 10 Mehdi Abaakouk
51 10 Mehdi Abaakouk
52 9 Mehdi Abaakouk
</pre>
53 9 Mehdi Abaakouk
54 1 Mehdi Abaakouk
h2. Fontionnement
55 1 Mehdi Abaakouk
56 1 Mehdi Abaakouk
Les VM utilisent le mode ethernet de libvirt. En gros libvirt s'attends à trouver un tap tout près pour y accrocher la VM
57 1 Mehdi Abaakouk
58 1 Mehdi Abaakouk
Just avant le boot de la VM libvirt lance:
59 1 Mehdi Abaakouk
60 1 Mehdi Abaakouk
<pre> /etc/libvirt/hooks/qemu <VM_NAME> prepare begin</pre>
61 1 Mehdi Abaakouk
62 1 Mehdi Abaakouk
Et juste après l'arret de la VM libvirt lance:
63 1 Mehdi Abaakouk
64 1 Mehdi Abaakouk
<pre> /etc/libvirt/hooks/qemu <VM_NAME> release end</pre>
65 1 Mehdi Abaakouk
66 1 Mehdi Abaakouk
67 1 Mehdi Abaakouk
Le script /etc/libvirt/hooks/qemu de ttnn se trouve ici: https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/puppetmaster/revisions/master/entry/environments/production/manifests/files/openstack/libvirt-hooks-qemu
68 2 Mehdi Abaakouk
69 2 Mehdi Abaakouk
70 2 Mehdi Abaakouk
Ce script va lire les metadatas TTNN de <VM_NAME> (e.g: virsh metadata <VM_NAME> http://tetaneutral.net/) 
71 2 Mehdi Abaakouk
72 2 Mehdi Abaakouk
<pre>
73 2 Mehdi Abaakouk
$ virsh metadata ns2.tetaneutral.net http://tetaneutral.net/
74 2 Mehdi Abaakouk
<config>
75 7 Mehdi Abaakouk
  <network mode="routed">
76 7 Mehdi Abaakouk
    <tap name="tapb0b4a106-d0">89.234.156.248</tap>
77 7 Mehdi Abaakouk
    <tap name="tapabababab-aa">89.234.156.45</tap>
78 7 Mehdi Abaakouk
  </network>
79 2 Mehdi Abaakouk
</config>
80 2 Mehdi Abaakouk
</pre>
81 2 Mehdi Abaakouk
82 2 Mehdi Abaakouk
Ensuite il va créé le tap et configurer les routes dessus avec les infos des metadata.
83 1 Mehdi Abaakouk
84 11 Laurent GUERBY
h2. git
85 11 Laurent GUERBY
86 11 Laurent GUERBY
https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/openstack-tools
87 11 Laurent GUERBY
88 11 Laurent GUERBY
libvirt
89 14 Laurent GUERBY
90 14 Laurent GUERBY
h2. Misc
91 14 Laurent GUERBY
92 14 Laurent GUERBY
h3. Editer le disque d'une VM
93 14 Laurent GUERBY
94 15 Laurent GUERBY
Mode lecture seule (sans danger) :
95 14 Laurent GUERBY
<pre>
96 14 Laurent GUERBY
VM=xxx
97 14 Laurent GUERBY
virsh shutdown $VM
98 14 Laurent GUERBY
virsh destroy $VM # si shutdown marche pas
99 14 Laurent GUERBY
guestfish --ro -i -d $VM
100 15 Laurent GUERBY
</pre>
101 15 Laurent GUERBY
102 15 Laurent GUERBY
Pour par exemple desactiver cloud-init qui peut bloquer le boot :
103 15 Laurent GUERBY
104 15 Laurent GUERBY
<pre>
105 15 Laurent GUERBY
guestfish -i -d $VM
106 15 Laurent GUERBY
ll /etc/cloud
107 15 Laurent GUERBY
touch /etc/cloud/cloud-init.disabled
108 15 Laurent GUERBY
exit
109 14 Laurent GUERBY
</pre>
110 16 Matthieu Herrb
111 16 Matthieu Herrb
h3. Voir la console graphique sans spice-html5:
112 16 Matthieu Herrb
113 16 Matthieu Herrb
Copier le script suivant 'ttnn-viewer' sur sa machine:
114 16 Matthieu Herrb
115 16 Matthieu Herrb
<pre>
116 16 Matthieu Herrb
#!/bin/bash
117 16 Matthieu Herrb
vm=$1
118 16 Matthieu Herrb
info=$(ssh g1.tetaneutral.net -p 2222 -l root -- "tools/libvirt/where $vm|cut -d' ' -f5")
119 16 Matthieu Herrb
120 16 Matthieu Herrb
if [ x"${info}" == "x" ]; then
121 16 Matthieu Herrb
    echo "Error VM $vm not found" 
122 16 Matthieu Herrb
    exit 1
123 16 Matthieu Herrb
fi
124 16 Matthieu Herrb
125 16 Matthieu Herrb
hypervisor=${info}.tetaneutral.net
126 16 Matthieu Herrb
spice_port=$(ssh ${hypervisor} -p 2222 -l root virsh domdisplay ${vm} | awk -F: '{print $3}')
127 16 Matthieu Herrb
128 16 Matthieu Herrb
echo "$vm on $hypervisor port $spice_port" 
129 16 Matthieu Herrb
ssh -N $hypervisor -p 2222 -l root -L 5910:localhost:${spice_port} &
130 16 Matthieu Herrb
pid=$!
131 16 Matthieu Herrb
132 16 Matthieu Herrb
cleanup(){
133 16 Matthieu Herrb
    kill $pid
134 16 Matthieu Herrb
}
135 16 Matthieu Herrb
136 16 Matthieu Herrb
trap cleanup EXIT
137 16 Matthieu Herrb
138 16 Matthieu Herrb
sleep 2
139 16 Matthieu Herrb
remote-viewer spice://localhost:5910/
140 16 Matthieu Herrb
</pre>
141 16 Matthieu Herrb
142 16 Matthieu Herrb
Puis 
143 16 Matthieu Herrb
144 16 Matthieu Herrb
<pre>
145 16 Matthieu Herrb
sudo apt-get install virt-viewer
146 16 Matthieu Herrb
./ttnn-viewer puppet.tetaeutral.net
147 16 Matthieu Herrb
</pre>
148 17 Matthieu Herrb
149 17 Matthieu Herrb
h3. Réinstallation/Réparation grub d'un VM
150 17 Matthieu Herrb
151 17 Matthieu Herrb
152 17 Matthieu Herrb
Récuperer l'id et l'hyperviseur de la VM
153 17 Matthieu Herrb
<pre>
154 17 Matthieu Herrb
g1# ./tools/libvirt/info VMNAME.tetaneutral.net | grep UUID
155 17 Matthieu Herrb
g1# ./tools/libvirt/where VMNAME.tetaneutral.net
156 17 Matthieu Herrb
</pre>
157 17 Matthieu Herrb
158 17 Matthieu Herrb
Aller sur l'hyperviseur en question et arreter la VM (ici on considère qu'elle est plantée shutdown ne marche pas -> destroy)
159 17 Matthieu Herrb
<pre>
160 17 Matthieu Herrb
ssh -p 2222 root@gN
161 17 Matthieu Herrb
gN# virsh destroy VMNAME.tetaneutral.net
162 17 Matthieu Herrb
</pre>
163 17 Matthieu Herrb
164 17 Matthieu Herrb
Bien attendre que la VM soit éteinte et taper
165 17 Matthieu Herrb
<pre>
166 17 Matthieu Herrb
gN# virt-customize -v -d 918e0ec7-0909-423c-9a67-15b5ef7c7ae0 --run-command 'update-grub ; grub-install /dev/sda;'
167 17 Matthieu Herrb
</pre>
168 17 Matthieu Herrb
169 17 Matthieu Herrb
Enfin, restart la VM
170 17 Matthieu Herrb
<pre>
171 17 Matthieu Herrb
gN# virsh start VMNAME.tetaneutral.net
172 17 Matthieu Herrb
</pre>