Projet

Général

Profil

Cluster with libvirt » Historique » Version 22

Matthieu Herrb, 04/03/2023 11:02

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