(muligens) pga en manglende konfigurasjon i ceph-mon capabilities i alle versjoner av puppet-modulen ntnuopenstack før versjon VQ.1.1, kan VMer som har blitt skrudd av med tvang, bli meget triste i disken sin og nekte å boote skikkelig. Dette kan fikses ved å gjøre en "flatten" av disken i ceph.
# Skru av VMen som ikke booter # Ta en backup (uuid er VMens uuid fra nova) cephmon1# rbd -p volumes export <uuid>_disk <filnavn> # Kjør flatten (uuid er VMens uuid fra nova) cephmon1# rbd flatten volumes/<uuid>_disk # Skru den på igjen |
Dette er nyttig hvis man skal ha planlagt vedlikehold av en ceph-server. Det sørger for at ceph IKKE rebalanserer data når man skrur av en ceph-boks (det skaper veldig mye trafikk).
Gjøres på en ceph-mon host
ceph osd set noout |
Etter utført vedlikehold, må man skru på igjen rebalanseringen
ceph osd unset noout |
storageNN# puppet agent --disable ceph-mon# ceph osd crush reweight osd.<id> 0 // Sett vekting på OSDen til 0, for å migrere data av den, og for å hindre en ny rebalansering når man fjerner OSDen fra crushmap // Vent til rebalanseringen er ferdig ceph-mon# ceph osd out osd.<id> storageNN# systemctl stop ceph-osd@<id> ceph-mon# ceph osd purge osd.<id> --yes-i-really-mean-it storageNN# umount /var/lib/ceph/osd/ceph-<id> // Slett raidet fra hpacucli e.l. Bytt disken fysisk, og opprett nytt raid. // Sørg for at OSet har oppdaget ny disk, og at hieradata for disken stemmer storageNN# puppet agent --enable; puppet agent --test |
Det hender at noen brukere ødelegger for seg selv. Da kan det være hyggelig å hjelpe dem litt. I den forbindelse kan det være praktisk å f.eks kunne montere opp disken til en VM, for å hente ut data, fikse feilconfig o.l.
Dette er skrevet for ceph luminous, og må utføres på en host som har Linux Kernel >=4.15, og ha pakken rbd–nbd installert, og ha rett ceph keyrings osv. Pakken blir installert av puppet på alt som inkluderer klassen profile::ceph::client
Nevnte kjerne, kan installeres på Ubuntu 16.04 vha
# apt install linux-image-generic-hwe-16.04-edge |
Eller, tank maskinen med HWE-kjernen i utgangspunktet.
- Finn UUID-en til VMen du skal montere opp disken til # openstack server list +--------------------------------------+-----------+---------+--------------------------------------------------------------------------+------------------------------------------+---------+ | ID | Name | Status | Networks | Image | Flavor | +--------------------------------------+-----------+---------+--------------------------------------------------------------------------+------------------------------------------+---------+ | 65af6457-51ca-407d-8ab4-aea00ab297c3 | edbmaskin | SHUTOFF | larsep-v6-testnet=192.168.123.14, 2001:700:1d00:ec40:f816:3eff:fe76:b9a9 | Ubuntu Server 16.04 (Xenial Xerus) amd64 | m1.tiny | +--------------------------------------+-----------+---------+--------------------------------------------------------------------------+------------------------------------------+---------+ // Noter ID-en, og sørg for at maskinen er skrudd av før du fortsetter. // På en host med kernel >=4.15, rbd-nbd installert og korrekte ceph-keyrings på plass: # rbd -p volumes ls | grep 65af6457-51ca-407d-8ab4-aea00ab297c3 65af6457-51ca-407d-8ab4-aea00ab297c3_disk // <- dette er objektet vi skal montere opp # rbd-nbd map volumes/65af6457-51ca-407d-8ab4-aea00ab297c3_disk /dev/nbd0 # fdisk -l /dev/nbd0 Disk /dev/nbd0: 20 GiB, 21474836480 bytes, 41943040 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xf1917857 Device Boot Start End Sectors Size Id Type /dev/nbd0p1 * 2048 41943006 41940959 20G 83 Linux # mount /dev/nbd0p1 /monter/disken/her // Og vips, har du tilgang til filsystemet :-) |
Når du er ferdig, må du selvfølgelig avmontere ceph-objektet
# umount /monter/disken/her // For sikkerhets skyld, kan du sjekke hvilke ceph objekter som er mappet opp # rbd-nbd list-mapped pid pool image snap device 1037278 volumes 65af6457-51ca-407d-8ab4-aea00ab297c3_disk - /dev/nbd0 # rbd-nbd unmap /dev/nbd |
Done! Nå er det trygt å skru på igjen VMen
Vha trikset "lokal montering av disker fra ceph" nevnt ovenfor, kan man fjerne passordet fra en Windowsbruker dersom brukeren har glemt det; eller at cloudbase-init har funnet på endre det av seg selv (ja, dette har skjedd - flere ganger).
# cd /montert/volum/Windows/System32
# chntpw -l SAM # Dette lister ut alle brukere
# chntpw -i SAM # Gir deg et interaktivt prompt for å manipulere SAM-databasen
<>========<> chntpw Main Interactive Menu <>========<>
Loaded hives: <SAM>
1 - Edit user data and passwords
2 - List groups
- - -
9 - Registry editor, now with full write support!
q - Quit (you will be asked if there is something to save)
What to do? [1] ->
# Velg 1
===== chntpw Edit User Info & Passwords ====
| RID -|---------- Username ------------| Admin? |- Lock? --|
| 03e9 | Admin | ADMIN | |
| 01f4 | Administrator | ADMIN | |
| 03e8 | cloudbase-init | ADMIN | |
| 01f7 | DefaultAccount | | dis/lock |
| 01f5 | Guest | | dis/lock |
| 01f8 | WDAGUtilityAccount | | dis/lock |
Please enter user number (RID) or 0 to exit:
# Skriv inn RID-en til brukeren som trenger å få passordet sitt fjerna
================= USER EDIT ====================
RID : 1001 [03e9]
Username: Admin
fullname: Admin
comment :
homedir :
00000220 = Administrators (which has 3 members)
Account bits: 0x0010 =
[ ] Disabled | [ ] Homedir req. | [ ] Passwd not req. |
[ ] Temp. duplicate | [X] Normal account | [ ] NMS account |
[ ] Domain trust ac | [ ] Wks trust act. | [ ] Srv trust act |
[ ] Pwd don't expir | [ ] Auto lockout | [ ] (unknown 0x08) |
[ ] (unknown 0x10) | [ ] (unknown 0x20) | [ ] (unknown 0x40) |
Failed login count: 0, while max tries is: 0
Total login count: 5
- - - - User Edit Menu:
1 - Clear (blank) user password
(2 - Unlock and enable user account) [seems unlocked already]
3 - Promote user (make user an administrator)
4 - Add user to a group
5 - Remove user from a group
q - Quit editing user, back to user select
Select: [q] >
# Velg 1
# Nå kommer det en haug med output, men første linja skal være "Password Cleared!"
# User Edit Menu kommer tilbake, velg q
# Hovedmenyen kommer tilbake, velg q igjen
# Da får man disse valgene
Hives that have changed:
# Name
0 <SAM>
Write hive files? (y/n) [n] :
# Velg y
0 <SAM> - OK
# Hurra passordet er nå fjerna. Avmonter volumet, og unmap block devicen slik forklart over
|
RDP trenger ikke nødvendigvis å godta innlogging uten passord, så det kan godt hende man må logge inn via konsollet i Horizon og sette nytt passord der.
Når vi har en døende disk, trenger man å mappe devicen i OSet til fysisk disk i serveren. Den mest idiotsikre måten å gjøre dette på:
root@storageNNN# smartctl -i /dev/sd[abcdef...] === START OF INFORMATION SECTION === Vendor: SEAGATE Product: ST4000NM0023 Revision: GS11 Compliance: SPC-4 User Capacity: 4,000,787,030,016 bytes [4.00 TB] Logical block size: 512 bytes LU is fully provisioned Rotation Rate: 7200 rpm Form Factor: 3.5 inches Logical Unit id: 0x5000c500964af273 Serial number: S1Z1VXJT Device type: disk Transport protocol: SAS (SPL-3) Local Time is: Wed Sep 21 09:45:11 2022 CEST SMART support is: Available - device has SMART capability. SMART support is: Enabled Temperature Warning: Disabled or Not Supported |
Dette printer bl.a serienummer på disken. Den kan man finne igjen i iDRAC, og dermed finner man også den fysiske slot-en devicen/disken sitter i.
To take a server out of haproxy rotation the following command can be used:
root@servicelb3:~# echo "disable server bk_keystone_public/controller03" | nc -U /var/lib/haproxy/stats |
for a in $(openstack compute service list -c Host | egrep -e "comp|gpu" | cut -d' ' -f2); do openstack server list --host $a --long -c ID -c Name -c Status -c Host --sort-column Host --all; done |
# Stuck powering-off? nova reset-state --active <id> openstack server stop <id> # Stuck powering-on nova reset-state <id> Reset state for server <id> succeeded; new state is error nova reset-state --active <id> openstack server stop <id> openstack server start <id |
List instances on all compute nodes on stack.it.ntnu.no
tmp_file=/tmp/$$.stack.tmp
while true ; do
rm /tmp/*.stack.tmp
for a in $(seq -w 01 07);
do echo compute$a >> $tmp_file
openstack server list --all --host compute$a >> $tmp_file
done
clear
cat /tmp/bjarneskvms
rm $tmp_file
sleep 1
done |
List all instances in a project
openstack server list --project ntnu-00001 |
List all instances in a project with specified name
openstack server list --project ntnu-00001 --name bjarneskvm-\* |
Migrate all instances away from one node. Be sure that destination have capasity to receive. The break time is included for a safe time to hold ctrl+c
from_node=compute07 to_node=compute04 for a in $(openstack server list --host $from_node --all -f value -c ID); do do echo $a to $to_node openstack server migrate --block-migration --live $to_node --wait $a echo break sleep 3 echo break done |
Windows does not ship with the virtio drivers. Since our installation always will default to virtio devices for i.e the virtual disk controller and the virtual network interface, the windows images in Glance needs to have these drivers pre-installed.
There may be situations where users want to upload existing Windows images without these drivers installed. To be able to boot them without adding these drivers, it is possible to change the virtual hardware devices:
openstack image set --property hw_disk_bus='ide' <image-id> openstack image set --property hw_vif_model='e1000' <image-id> |
This commands will tell KVM/libvirt to use IDE disk controller and E1000 NIC. Be aware that this may reduce the virtual machine performance significantly!
openstack port list -f value --long --network ntnu-[global|internal] | grep router | awk '{print $3}' | cut -d"'" -f2 | xargs -n1 ping -c2 |
For some odd reason the BGP speakers seems to forget which neutron dragents they have been configured to include. Here's som troubleshooting tips. Typical symptom is that all the tenant IPv6 routes are gone..
# List all neutron dragents (you will need the ID) $ openstack network agent list --sort-column Host --agent-type bgp +--------------------------------------+---------------------------+---------------+-------------------+-------+-------+---------------------+ | ID | Agent Type | Host | Availability Zone | Alive | State | Binary | +--------------------------------------+---------------------------+---------------+-------------------+-------+-------+---------------------+ | 73d17a70-6d81-4b41-9a17-ea0b64fbbca8 | BGP dynamic routing agent | neutronnet1 | None | :-) | UP | neutron-bgp-dragent | | 181618ad-ec71-4dc2-8074-459ff691d032 | BGP dynamic routing agent | neutronnet2 | None | :-) | UP | neutron-bgp-dragent | | 990cfb8d-4f21-48fa-9bd3-e1eed9f68b1f | BGP dynamic routing agent | neutronnet3 | None | :-) | UP | neutron-bgp-dragent | | f4cbef36-e812-41fc-acc2-57f0fc5e5604 | BGP dynamic routing agent | neutronv4bgp1 | None | :-) | UP | neutron-bgp-dragent | | 16546bec-d33a-4b44-8a0a-ac04b4fbc4af | BGP dynamic routing agent | neutronv4bgp2 | None | :-) | UP | neutron-bgp-dragent | | 8862c571-8e44-47a8-8e89-b091058497d8 | BGP dynamic routing agent | neutronv6bgp1 | None | :-) | UP | neutron-bgp-dragent | | 088a8f05-fb6f-4e2d-8b0c-4dcb2166337f | BGP dynamic routing agent | neutronv6bgp2 | None | :-) | UP | neutron-bgp-dragent | +--------------------------------------+---------------------------+---------------+-------------------+-------+-------+---------------------+ # List the BGP speakers (you will need the name) $ openstack bgp speaker list +--------------------------------------+---------------+----------+------------+ | ID | Name | Local AS | IP Version | +--------------------------------------+---------------+----------+------------+ | 33dc46ad-e6fc-4369-872e-b05436d320ee | bgpspeaker-v4 | 65102 | 4 | | 4c7c1129-f7c4-4756-af32-3d57abe4dc77 | bgpspeaker-v6 | 65102 | 6 | +--------------------------------------+---------------+----------+------------+ # List the dragents currently attached to a given speaker $ openstack bgp speaker show dragents bgpspeaker-v6 +--------------------------------------+---------------+-------+-------+ | ID | Host | State | Alive | +--------------------------------------+---------------+-------+-------+ | 088a8f05-fb6f-4e2d-8b0c-4dcb2166337f | neutronv6bgp2 | True | :-) | | 8862c571-8e44-47a8-8e89-b091058497d8 | neutronv6bgp1 | True | :-) | +--------------------------------------+---------------+-------+-------+ # If some of the agents above are missing, re-add them: $ openstack bgp dragent add speaker 8862c571-8e44-47a8-8e89-b091058497d8 bgpspeaker-v6 |
openstack project set --property expiry='<dd.mm.yyyy>' <prosjekt id> |
openstack volume list --all-projects --long -c Size -c Type -f value | grep <VOLUMETYPE> | awk '{split($0,a," "); sum += a[1]} END {print sum}' |
for i in $(openstack server list --sort-column Name -c Name -f value); do openstack server show -f json $i -c security_groups | jq '.security_groups[] | {name} | join("")'; done | sort | uniq |
Eksemplet antar at du er autha i et spesifikt prosjekt. Gjør du det der som admin, bør du hekte på --project <prosjektnavn> i kommandoen som løkka itererer over.
$ openstack resource provider show --allocations 5c79c68e-9c90-40fa-ac06-7e248892dc9b
+----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| uuid | 5c79c68e-9c90-40fa-ac06-7e248892dc9b |
| name | gpu302.infra.skyhigh.iik.ntnu.no_0000:81:00.0 |
| generation | 10 |
| root_provider_uuid | 229570a2-018d-40b1-9112-460c6fa9fbce |
| parent_provider_uuid | 229570a2-018d-40b1-9112-460c6fa9fbce |
| allocations | {'f4216e0e-6db0-41c2-9ceb-b403dde285dd': {'resources': {'CUSTOM_A100D_20G': 1}, 'consumer_generation': 2}, '0c8d028a-9b96-4b6e-af42-73b08215123d': {'resources': {'CUSTOM_A100D_20G': 1}, 'consumer_generation': 2}, |
| | 'ab522623-7b02-441c-a81c-9d54e0098595': {'resources': {'CUSTOM_A100D_20G': 1}, 'consumer_generation': 2}, 'cd103ef4-5eac-4193-883a-5d360f34f8ca': {'resources': {'CUSTOM_A100D_20G': 1}, 'consumer_generation': 2}} |
+----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
Noen gang kan man ende opp i en situasjon for en slettet VM fortsatt har ressursallokeringer mot en compute-node, selv om VMen slettet. Det vises typisk i nova-compute.log på compute-noden, slik
2025-03-10 15:06:21.308 5363 INFO nova.compute.resource_tracker [None req-e2bdf159-6aea-4667-99cd-7359b0fec2c0 - - - - - -] Instance c555a97e-113b-4c05-84a2-32f32226c99a has allocations against this compute host but is not found in the database. |
Dette kan man videre dobbeltsjekke med placement-APIet, slik at man ser at jada - det er en ressursallokering i databasen:
$ openstack resource provider allocation show c555a97e-113b-4c05-84a2-32f32226c99a
+--------------------------------------+------------+-----------------------------------------------+----------------------------------+------------------------------------------------------------------+---------------+
| resource_provider | generation | resources | project_id | user_id | consumer_type |
+--------------------------------------+------------+-----------------------------------------------+----------------------------------+------------------------------------------------------------------+---------------+
| 03a8c1cd-d332-4511-9f40-266271b1caf0 | 5029 | {'VCPU': 2, 'MEMORY_MB': 4096, 'DISK_GB': 40} | e14c44276b424209afec794ec6a6e01a | f266fc21ec2e114d4a2369e779407b2dcd918b90e2763a6a96e6815738de6875 | unknown |
+--------------------------------------+------------+-----------------------------------------------+----------------------------------+------------------------------------------------------------------+---------------+ |
Hvis man vil være på den virkelig sikre siden, kan man slå opp resource_provider IDen, for så se at det er samme compute-host man leste loggene fra
$ openstack resource provider show 03a8c1cd-d332-4511-9f40-266271b1caf0 -c name |
Når du ser at alt stemmer, kan man slette allokeringen med følgende kommando, hvor UUIDen da er referanse til VMen:
$ openstack resource provider allocation delete c555a97e-113b-4c05-84a2-32f32226c99a |
For moderne GPUer som deles ut via custom resources i placement (alle som ikke fortsatt realiseres med mdevs i OSet - dvs dette gjelder for A- og L-serie eller nyere):
$ openstack allocation candidate list --resource CUSTOM_A100_20G=1 +---+-------------------+-----------------------------+-------------------------+-------------------------------+ | # | allocation | resource provider | inventory used/capacity | traits | +---+-------------------+-----------------------------+-------------------------+-------------------------------+ | 1 | CUSTOM_A100_20G=1 | 13175471-565c-4cce-811c- | CUSTOM_A100_20G=1/2 | CUSTOM_A100_20G,COMPUTE_MANAG | | | | 37e1e6231043 | | ED_PCI_DEVICE | | 2 | CUSTOM_A100_20G=1 | 205cd835-5c6f-4d19-8867- | CUSTOM_A100_20G=1/2 | CUSTOM_A100_20G,COMPUTE_MANAG | | | | b7d81fc7bd4b | | ED_PCI_DEVICE,CUSTOM_NBL_GPU | +---+-------------------+-----------------------------+-------------------------+-------------------------------+ |
Om man skulle lure på som er i bruk av slike custom resources:
$ openstack resource class list | grep CUSTOM |
Manually drain a queue
kanin1# rabbitmqadmin purge queue name=name_of_the_queue_to_be_purged |
Fjerne en node fra clusteret (f.eks hvis det har delt seg)
kaninN# rabbitmqctl stop_app kaninN# rabbitmqctl reset ## På dette tidspunktet er det lurt å sjekke rabbitmqctl cluster_status på en annen node, for å verifisere at clusteret ikke lenger er flere partitions # Legg den til igjen kaninN# rabbitmqctl start_app kaninN# rabbitmqctl cluster_status # sjekk at alle er med, og det ikke er noen partitions |
apt install ipmitool |
Hvis den ikke oppfører seg:
Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory then you need to enable the following modules modprobe ipmi_devintf modprobe ipmi_si |
Div kjekke SQL-spørringer som er mye raskere enn Openstack CLI og ei for-løkke
# Hent alle kjørende VMer i SkyHiGh's MISC-prosjekt, og all metadata knyttet til VMene MariaDB [nova]> SELECT i.uuid,i.hostname,md.key,md.value FROM instances i INNER JOIN instance_metadata md ON i.uuid = md.instance_uuid WHERE i.project_id='d9c7305133b44e98b2cf74aca04cc610' AND i.deleted=0 ; # Det eksemplet der var ikke så kult, fordi dette er også ganske raskt: openstack server list --project MISC --fit-width -c ID -c Name -c Status -c Networks -c Properties |
Hvor N er tallet (her eksempelvis 30) på slutten av spørringa
MariaDB [keystone]> SELECT name, extra FROM project WHERE domain_id=(SELECT id FROM project WHERE is_domain=1 AND name='NTNU') AND DATEDIFF(STR_TO_DATE(JSON_VALUE(extra,'$.expiry'),'%d.%m.%Y'),NOW()) <= 30; |
MariaDB [keystone]> SELECT name FROM project WHERE domain_id=(SELECT id FROM project WHERE is_domain=1 AND name='NTNU') AND extra NOT LIKE '%expiry%'; |
MariaDB [munin-vgpu]> select * from instancemapping where instance_id = '<instans-ID>'; |
MariaDB [munin-vgpu]> select * from instancemapping where gpu = '<pci-e-ID>' and vgpu = '<VGPU-nr>' order by attached; |
Prosjekter til dette emnet skal opprettes med scriptet createProjectTTM4135.sh. Outputen her, er prosjekt som alle har tilgang på et felles nett, ttm4135 (lever i MISC), har en forhåndsallokert FIP fra ntnu-global, hvor FIPen er tagget med ttm4135 og TTM4135_V<år>_<gruppe>.
Til slutt bruker vi shiftleader CLI for å mekke DNS-navn på formatet ttm4135-v<år>-<gruppe>.public.skyhigh.iik.ntnu.no
For å mekke DNS, gjøre vi følgende. Først, finn alle adressene og navnene
openstack floating ip list -f json --tags ttm4135 --long -c 'Floating IP Address' -c Tags | jq -r '.[] | "\(.["Floating IP Address"]),\(.Tags[1])"' | tr '_' '-' | tr '[:upper:]' '[:lower:]' > FILADI.txt |
Formateringa blir nå helt perfekt, og du får FILADI.txt på følgende format:
<ip>,ttm4135-<semester>-<gruppe> |
Med den fila på plass, kan du gjøre følgende triks, for å mekke DNS-records
for i in $(cat FILADI.txt); do sl2 record create $(echo $i | cut -d',' -f2).public.skyhigh.iik.ntnu.no SkyHiGh A $(echo $i | cut -d',' -f1); done |
Og da skal alt være i mål =)
for i in $(cat FILADI.txt | cut -d',' -f2); do sl2 record delete "${i}.public.skyhigh.iik.ntnu.no"; done |