Projet

Général

Profil

Cluster with libvirt » Historique » Version 19

émile decorsière, 29/09/2020 19:13

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 19 émile decorsière
h2. Reboot d'une VM
55 19 émile decorsière
56 19 émile decorsière
Savoir de quel hyperviseur dépend la VM
57 19 émile decorsière
<pre>
58 19 émile decorsière
g1# ./tools/libvirt/where VMNAME.tetaneutral.net
59 19 émile decorsière
</pre>
60 19 émile decorsière
61 19 émile decorsière
Aller sur l'hyperviseur en question et arreter puis démarrer la VM (ici on considère qu'elle est plantée shutdown ne marche pas -> destroy)
62 19 émile decorsière
<pre>
63 19 émile decorsière
ssh gN
64 19 émile decorsière
gN# virsh destroy VMNAME.tetaneutral.net
65 19 émile decorsière
gN# virsh start VMNAME.tetaneutral.net
66 19 émile decorsière
</pre>
67 19 émile decorsière
68 1 Mehdi Abaakouk
h2. Fontionnement
69 1 Mehdi Abaakouk
70 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
71 1 Mehdi Abaakouk
72 1 Mehdi Abaakouk
Just avant le boot de la VM libvirt lance:
73 1 Mehdi Abaakouk
74 1 Mehdi Abaakouk
<pre> /etc/libvirt/hooks/qemu <VM_NAME> prepare begin</pre>
75 1 Mehdi Abaakouk
76 1 Mehdi Abaakouk
Et juste après l'arret de la VM libvirt lance:
77 1 Mehdi Abaakouk
78 1 Mehdi Abaakouk
<pre> /etc/libvirt/hooks/qemu <VM_NAME> release end</pre>
79 1 Mehdi Abaakouk
80 1 Mehdi Abaakouk
81 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
82 2 Mehdi Abaakouk
83 2 Mehdi Abaakouk
84 2 Mehdi Abaakouk
Ce script va lire les metadatas TTNN de <VM_NAME> (e.g: virsh metadata <VM_NAME> http://tetaneutral.net/) 
85 2 Mehdi Abaakouk
86 2 Mehdi Abaakouk
<pre>
87 2 Mehdi Abaakouk
$ virsh metadata ns2.tetaneutral.net http://tetaneutral.net/
88 2 Mehdi Abaakouk
<config>
89 7 Mehdi Abaakouk
  <network mode="routed">
90 7 Mehdi Abaakouk
    <tap name="tapb0b4a106-d0">89.234.156.248</tap>
91 7 Mehdi Abaakouk
    <tap name="tapabababab-aa">89.234.156.45</tap>
92 7 Mehdi Abaakouk
  </network>
93 2 Mehdi Abaakouk
</config>
94 2 Mehdi Abaakouk
</pre>
95 2 Mehdi Abaakouk
96 2 Mehdi Abaakouk
Ensuite il va créé le tap et configurer les routes dessus avec les infos des metadata.
97 1 Mehdi Abaakouk
98 11 Laurent GUERBY
h2. git
99 11 Laurent GUERBY
100 11 Laurent GUERBY
https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/openstack-tools
101 11 Laurent GUERBY
102 11 Laurent GUERBY
libvirt
103 14 Laurent GUERBY
104 14 Laurent GUERBY
h2. Misc
105 14 Laurent GUERBY
106 14 Laurent GUERBY
h3. Editer le disque d'une VM
107 14 Laurent GUERBY
108 15 Laurent GUERBY
Mode lecture seule (sans danger) :
109 14 Laurent GUERBY
<pre>
110 14 Laurent GUERBY
VM=xxx
111 14 Laurent GUERBY
virsh shutdown $VM
112 14 Laurent GUERBY
virsh destroy $VM # si shutdown marche pas
113 14 Laurent GUERBY
guestfish --ro -i -d $VM
114 15 Laurent GUERBY
</pre>
115 15 Laurent GUERBY
116 15 Laurent GUERBY
Pour par exemple desactiver cloud-init qui peut bloquer le boot :
117 15 Laurent GUERBY
118 15 Laurent GUERBY
<pre>
119 15 Laurent GUERBY
guestfish -i -d $VM
120 15 Laurent GUERBY
ll /etc/cloud
121 15 Laurent GUERBY
touch /etc/cloud/cloud-init.disabled
122 15 Laurent GUERBY
exit
123 14 Laurent GUERBY
</pre>
124 16 Matthieu Herrb
125 16 Matthieu Herrb
h3. Voir la console graphique sans spice-html5:
126 16 Matthieu Herrb
127 16 Matthieu Herrb
Copier le script suivant 'ttnn-viewer' sur sa machine:
128 16 Matthieu Herrb
129 16 Matthieu Herrb
<pre>
130 16 Matthieu Herrb
#!/bin/bash
131 16 Matthieu Herrb
vm=$1
132 16 Matthieu Herrb
info=$(ssh g1.tetaneutral.net -p 2222 -l root -- "tools/libvirt/where $vm|cut -d' ' -f5")
133 16 Matthieu Herrb
134 16 Matthieu Herrb
if [ x"${info}" == "x" ]; then
135 16 Matthieu Herrb
    echo "Error VM $vm not found" 
136 16 Matthieu Herrb
    exit 1
137 16 Matthieu Herrb
fi
138 16 Matthieu Herrb
139 16 Matthieu Herrb
hypervisor=${info}.tetaneutral.net
140 16 Matthieu Herrb
spice_port=$(ssh ${hypervisor} -p 2222 -l root virsh domdisplay ${vm} | awk -F: '{print $3}')
141 16 Matthieu Herrb
142 16 Matthieu Herrb
echo "$vm on $hypervisor port $spice_port" 
143 16 Matthieu Herrb
ssh -N $hypervisor -p 2222 -l root -L 5910:localhost:${spice_port} &
144 16 Matthieu Herrb
pid=$!
145 16 Matthieu Herrb
146 16 Matthieu Herrb
cleanup(){
147 16 Matthieu Herrb
    kill $pid
148 16 Matthieu Herrb
}
149 16 Matthieu Herrb
150 16 Matthieu Herrb
trap cleanup EXIT
151 16 Matthieu Herrb
152 16 Matthieu Herrb
sleep 2
153 16 Matthieu Herrb
remote-viewer spice://localhost:5910/
154 16 Matthieu Herrb
</pre>
155 16 Matthieu Herrb
156 16 Matthieu Herrb
Puis 
157 16 Matthieu Herrb
158 16 Matthieu Herrb
<pre>
159 16 Matthieu Herrb
sudo apt-get install virt-viewer
160 16 Matthieu Herrb
./ttnn-viewer puppet.tetaeutral.net
161 16 Matthieu Herrb
</pre>
162 17 Matthieu Herrb
163 17 Matthieu Herrb
h3. Réinstallation/Réparation grub d'un VM
164 17 Matthieu Herrb
165 17 Matthieu Herrb
166 17 Matthieu Herrb
Récuperer l'id et l'hyperviseur de la VM
167 17 Matthieu Herrb
<pre>
168 17 Matthieu Herrb
g1# ./tools/libvirt/info VMNAME.tetaneutral.net | grep UUID
169 17 Matthieu Herrb
g1# ./tools/libvirt/where VMNAME.tetaneutral.net
170 17 Matthieu Herrb
</pre>
171 17 Matthieu Herrb
172 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)
173 17 Matthieu Herrb
<pre>
174 17 Matthieu Herrb
ssh -p 2222 root@gN
175 17 Matthieu Herrb
gN# virsh destroy VMNAME.tetaneutral.net
176 17 Matthieu Herrb
</pre>
177 17 Matthieu Herrb
178 18 Matthieu Herrb
Bien attendre que la VM soit éteinte et taper (mettre l'UUID trouvé plus haut à la place de UUID)
179 17 Matthieu Herrb
<pre>
180 18 Matthieu Herrb
gN# virt-customize -v -d UUID --run-command 'update-grub ; grub-install /dev/sda;'
181 17 Matthieu Herrb
</pre>
182 17 Matthieu Herrb
183 17 Matthieu Herrb
Enfin, restart la VM
184 17 Matthieu Herrb
<pre>
185 17 Matthieu Herrb
gN# virsh start VMNAME.tetaneutral.net
186 17 Matthieu Herrb
</pre>