Projet

Général

Profil

Cluster with libvirt » Historique » Version 20

Guilhem Saurel, 01/05/2021 17:43
change ram / cpu

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 20 Guilhem Saurel
h3. Modifier la quantité de RAM ou le nombre de vCPU
107 20 Guilhem Saurel
108 20 Guilhem Saurel
NB: dans ces deux scripts, un dry-run est diponible en ajoutant "-n"
109 20 Guilhem Saurel
110 20 Guilhem Saurel
<pre>
111 20 Guilhem Saurel
VM=xxx
112 20 Guilhem Saurel
./change-ram $VM 4
113 20 Guilhem Saurel
</pre>
114 20 Guilhem Saurel
115 20 Guilhem Saurel
<pre>
116 20 Guilhem Saurel
VM=xxx
117 20 Guilhem Saurel
./change-cpu $VM 2
118 20 Guilhem Saurel
</pre>
119 20 Guilhem Saurel
120 14 Laurent GUERBY
h3. Editer le disque d'une VM
121 14 Laurent GUERBY
122 15 Laurent GUERBY
Mode lecture seule (sans danger) :
123 14 Laurent GUERBY
<pre>
124 14 Laurent GUERBY
VM=xxx
125 14 Laurent GUERBY
virsh shutdown $VM
126 14 Laurent GUERBY
virsh destroy $VM # si shutdown marche pas
127 14 Laurent GUERBY
guestfish --ro -i -d $VM
128 15 Laurent GUERBY
</pre>
129 15 Laurent GUERBY
130 15 Laurent GUERBY
Pour par exemple desactiver cloud-init qui peut bloquer le boot :
131 15 Laurent GUERBY
132 15 Laurent GUERBY
<pre>
133 15 Laurent GUERBY
guestfish -i -d $VM
134 15 Laurent GUERBY
ll /etc/cloud
135 15 Laurent GUERBY
touch /etc/cloud/cloud-init.disabled
136 15 Laurent GUERBY
exit
137 14 Laurent GUERBY
</pre>
138 16 Matthieu Herrb
139 16 Matthieu Herrb
h3. Voir la console graphique sans spice-html5:
140 16 Matthieu Herrb
141 16 Matthieu Herrb
Copier le script suivant 'ttnn-viewer' sur sa machine:
142 16 Matthieu Herrb
143 16 Matthieu Herrb
<pre>
144 16 Matthieu Herrb
#!/bin/bash
145 16 Matthieu Herrb
vm=$1
146 16 Matthieu Herrb
info=$(ssh g1.tetaneutral.net -p 2222 -l root -- "tools/libvirt/where $vm|cut -d' ' -f5")
147 16 Matthieu Herrb
148 16 Matthieu Herrb
if [ x"${info}" == "x" ]; then
149 16 Matthieu Herrb
    echo "Error VM $vm not found" 
150 16 Matthieu Herrb
    exit 1
151 16 Matthieu Herrb
fi
152 16 Matthieu Herrb
153 16 Matthieu Herrb
hypervisor=${info}.tetaneutral.net
154 16 Matthieu Herrb
spice_port=$(ssh ${hypervisor} -p 2222 -l root virsh domdisplay ${vm} | awk -F: '{print $3}')
155 16 Matthieu Herrb
156 16 Matthieu Herrb
echo "$vm on $hypervisor port $spice_port" 
157 16 Matthieu Herrb
ssh -N $hypervisor -p 2222 -l root -L 5910:localhost:${spice_port} &
158 16 Matthieu Herrb
pid=$!
159 16 Matthieu Herrb
160 16 Matthieu Herrb
cleanup(){
161 16 Matthieu Herrb
    kill $pid
162 16 Matthieu Herrb
}
163 16 Matthieu Herrb
164 16 Matthieu Herrb
trap cleanup EXIT
165 16 Matthieu Herrb
166 16 Matthieu Herrb
sleep 2
167 16 Matthieu Herrb
remote-viewer spice://localhost:5910/
168 16 Matthieu Herrb
</pre>
169 16 Matthieu Herrb
170 16 Matthieu Herrb
Puis 
171 16 Matthieu Herrb
172 16 Matthieu Herrb
<pre>
173 16 Matthieu Herrb
sudo apt-get install virt-viewer
174 16 Matthieu Herrb
./ttnn-viewer puppet.tetaeutral.net
175 16 Matthieu Herrb
</pre>
176 17 Matthieu Herrb
177 17 Matthieu Herrb
h3. Réinstallation/Réparation grub d'un VM
178 17 Matthieu Herrb
179 17 Matthieu Herrb
180 17 Matthieu Herrb
Récuperer l'id et l'hyperviseur de la VM
181 17 Matthieu Herrb
<pre>
182 17 Matthieu Herrb
g1# ./tools/libvirt/info VMNAME.tetaneutral.net | grep UUID
183 17 Matthieu Herrb
g1# ./tools/libvirt/where VMNAME.tetaneutral.net
184 17 Matthieu Herrb
</pre>
185 17 Matthieu Herrb
186 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)
187 17 Matthieu Herrb
<pre>
188 17 Matthieu Herrb
ssh -p 2222 root@gN
189 17 Matthieu Herrb
gN# virsh destroy VMNAME.tetaneutral.net
190 17 Matthieu Herrb
</pre>
191 17 Matthieu Herrb
192 18 Matthieu Herrb
Bien attendre que la VM soit éteinte et taper (mettre l'UUID trouvé plus haut à la place de UUID)
193 17 Matthieu Herrb
<pre>
194 18 Matthieu Herrb
gN# virt-customize -v -d UUID --run-command 'update-grub ; grub-install /dev/sda;'
195 17 Matthieu Herrb
</pre>
196 17 Matthieu Herrb
197 17 Matthieu Herrb
Enfin, restart la VM
198 17 Matthieu Herrb
<pre>
199 17 Matthieu Herrb
gN# virsh start VMNAME.tetaneutral.net
200 17 Matthieu Herrb
</pre>