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