Conversation
0f99db6 to
8ebdbe2
Compare
fb903a5 to
e174fb5
Compare
6c201f9 to
4af4c78
Compare
images/virt-artifact/werf.inc.yaml
Outdated
| shell: | ||
| install: | ||
| - | | ||
| echo rebuild 1 |
There was a problem hiding this comment.
will be removed after merging PR in 3p-kubevirt
4af4c78 to
4a4baaf
Compare
4a4baaf to
fb28e31
Compare
177f431 to
3a30485
Compare
Simple implementation of the memory hotplug support. - Change memory configuration: set it in domain.memory.guest instead of setting requests and limits in domain.resources. - Support old VMs to not require reboot on module update. - Support for enabling feature gates explicitly in ModuleConfig. Dev notes: - Adding detector of kvvm.spec changes to require reboot if kvbuilder changes something. - New on-demand vmop migration prefixed as "hotplug-resource-". Signed-off-by: Ivan Mikheykin <ivan.mikheykin@flant.com>
31b93a2 to
cc31668
Compare
| case err == nil: // OK. | ||
| case errors.Is(err, ErrStopHandlerChain): | ||
| log.Debug("Handler chain execution stopped") | ||
| msg := fmt.Sprintf("Handler %s stopped chain execution", name) |
There was a problem hiding this comment.
Why do we need the msg variable?
There was a problem hiding this comment.
-
in
sync_kvvm.go:Patch→ immediatelyUpdatethe same object (The problem is that afterPatch(...)the server object gets a newresourceVersion, and the localnewKVVMcan stay with the old one. Then the nextUpdate(...)can catch aconflicton a real API.) -
Inconsistency of the
hotplug' threshold: builderandcomparatorare considered differently (inbuilderif memorySize.Cmp(*hotplugThreshold) >= 0, andcomparatorisHotpluggable := current.Memory.Size.Cmp(*hotplugThreshold) > 0.
For cases like:- 1Gi -> 2Gi
- 1Gi -> 1.5Gi
The system can:
- generate a
hotplug-ready spec, - but it still requires a
restartwhen comparing.
-
kvbuilder.SetMemory()feature gateis taken globally, andcomparatorreceives it by injection (Two sources of truth are obtained:- compare uses the passed
feature gate; builduses a globalsingleton.)
- compare uses the passed
-
Support for “old VMs" is tied only to
PrintableStatus == Running. Does it take into account that the VM can migrate?
Description
Why do we need it, and what problem does it solve?
It is a phase 1 of implementation of the memory hotplug support.
Limitations:
What is the expected result?
VM is migrating and memory is changed when spec.memory field is changed.
384Mi -> 1384Mi (Crossing 1Gi threshold upward will enable hotplug and requires a reboot)
Restart initiated
$ k -n vm get internalvirtualizationvirtualmachines.internal.virtualization.deckhouse.io vm-alpine-uefi -oyaml | grep ' memory:' -A 10 memory: guest: 384Mi$ k -n vm get all,po,intvirt,vmop -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/d8v-vm-vm-alpine-uefi-6tfh8 1/1 Terminating 0 5m6s 10.66.10.4 virtlab-mi-1 1/1
NAME PHASE CORES COREFRACTION MEMORY NEED RESTART AGENT MIGRATABLE NODE IPADDRESS AGE
virtualmachine.virtualization.deckhouse.io/vm-alpine-uefi Stopped 1 20% 384Mi True virtlab-mi-1 10.66.10.4 10d
NAME AGE PHASE IP NODENAME READY LIVE-MIGRATABLE PAUSED
internalvirtualizationvirtualmachineinstance.internal.virtualization.deckhouse.io/vm-alpine-uefi 5m6s Succeeded virtlab-mi-1 False True
NAME AGE STATUS READY
internalvirtualizationvirtualmachine.internal.virtualization.deckhouse.io/vm-alpine-uefi 10d Stopped False
After restart
$ k -n vm get internalvirtualizationvirtualmachines.internal.virtualization.deckhouse.io vm-alpine-uefi -oyaml | grep ' memory:' -A 10 memory: guest: 1384Mi maxGuest: 256Gi$ k -n vm get all,po,intvirt,vmop -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/d8v-vm-vm-alpine-uefi-npxkw 1/1 Running 0 54s 10.66.10.4 virtlab-mi-2 1/1
NAME PHASE CORES COREFRACTION MEMORY NEED RESTART AGENT MIGRATABLE NODE IPADDRESS AGE
virtualmachine.virtualization.deckhouse.io/vm-alpine-uefi Running 1 20% 1384Mi True True virtlab-mi-2 10.66.10.4 10d
NAME AGE PHASE IP NODENAME READY LIVE-MIGRATABLE PAUSED
internalvirtualizationvirtualmachineinstance.internal.virtualization.deckhouse.io/vm-alpine-uefi 54s Running 10.66.10.4 virtlab-mi-2 True True
NAME AGE STATUS READY
internalvirtualizationvirtualmachine.internal.virtualization.deckhouse.io/vm-alpine-uefi 10d Running True
1384Mi -> 2384Mi (Hotplug enabled: add memory with live migration)
Migration initiated
$ k -n vm get internalvirtualizationvirtualmachines.internal.virtualization.deckhouse.io vm-alpine-uefi -oyaml | grep ' memory:' -A 10 memory: guest: 2384Mi maxGuest: 256Gi$ k -n vm get all,po,intvirt,vmop -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/d8v-vm-vm-alpine-uefi-s2cgs 1/1 Running 0 117m 10.66.10.4 virtlab-mi-1 1/1
pod/d8v-vm-vm-alpine-uefi-wnptq 0/1 ContainerCreating 0 6s virtlab-mi-3 0/1
NAME PHASE CORES COREFRACTION MEMORY NEED RESTART AGENT MIGRATABLE NODE IPADDRESS AGE
virtualmachine.virtualization.deckhouse.io/vm-alpine-uefi Running 1 20% 2384Mi True True virtlab-mi-1 10.66.10.4 10d
NAME AGE PHASE IP NODENAME READY LIVE-MIGRATABLE PAUSED
internalvirtualizationvirtualmachineinstance.internal.virtualization.deckhouse.io/vm-alpine-uefi 117m Running 10.66.10.4 virtlab-mi-1 True True
NAME AGE STATUS READY
internalvirtualizationvirtualmachine.internal.virtualization.deckhouse.io/vm-alpine-uefi 10d Running True
NAME PHASE TYPE VIRTUALMACHINE AGE
virtualmachineoperation.virtualization.deckhouse.io/hotplug-resources-46c8z InProgress Evict vm-alpine-uefi 6s
NAME PHASE VMI
internalvirtualizationvirtualmachineinstancemigration.internal.virtualization.deckhouse.io/vmop-hotplug-resources-46c8z Scheduling vm-alpine-uefi
After migrating
$ k -n vm get internalvirtualizationvirtualmachines.internal.virtualization.deckhouse.io vm-alpine-uefi -oyaml | grep ' memory:' -A 10 memory: guest: 2384Mi maxGuest: 256GiNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/d8v-vm-vm-alpine-uefi-s2cgs 0/1 Completed 0 119m 10.66.10.4 virtlab-mi-1 1/1
pod/d8v-vm-vm-alpine-uefi-wnptq 1/1 Running 0 2m20s 10.66.10.4 virtlab-mi-3 1/1
2384Mi -> 384Mi (Crossing 1Gi threshold downward will disable hotplug and requires reboot)
Reboot started
$ k -n vm get internalvirtualizationvirtualmachines.internal.virtualization.deckhouse.io vm-alpine-uefi -oyaml | grep ' memory:' -A 10 memory: guest: 2384Mi maxGuest: 256Gi$ k -n vm get all,po,intvirt,vmop -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/d8v-vm-vm-alpine-uefi-wnptq 1/1 Terminating 0 3m5s 10.66.10.4 virtlab-mi-3 1/1
NAME PHASE CORES COREFRACTION MEMORY NEED RESTART AGENT MIGRATABLE NODE IPADDRESS AGE
virtualmachine.virtualization.deckhouse.io/vm-alpine-uefi Stopped 1 20% 2384Mi True virtlab-mi-3 10.66.10.4 10d
NAME AGE PHASE IP NODENAME READY LIVE-MIGRATABLE PAUSED
internalvirtualizationvirtualmachineinstance.internal.virtualization.deckhouse.io/vm-alpine-uefi 120m Succeeded virtlab-mi-3 False True
NAME AGE STATUS READY
internalvirtualizationvirtualmachine.internal.virtualization.deckhouse.io/vm-alpine-uefi 10d Stopped False
After reboot
$ k -n vm get internalvirtualizationvirtualmachines.internal.virtualization.deckhouse.io vm-alpine-uefi -oyaml | grep ' memory:' -A 10 memory: guest: 384Mi$ k -n vm get all,po,intvirt,vmop -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/d8v-vm-vm-alpine-uefi-x2xvj 1/1 Running 0 26s 10.66.10.4 virtlab-mi-3 1/1
NAME PHASE CORES COREFRACTION MEMORY NEED RESTART AGENT MIGRATABLE NODE IPADDRESS AGE
virtualmachine.virtualization.deckhouse.io/vm-alpine-uefi Running 1 20% 384Mi False True virtlab-mi-3 10.66.10.4 10d
NAME AGE PHASE IP NODENAME READY LIVE-MIGRATABLE PAUSED
internalvirtualizationvirtualmachineinstance.internal.virtualization.deckhouse.io/vm-alpine-uefi 27s Running 10.66.10.4 virtlab-mi-3 True True
NAME AGE STATUS READY
internalvirtualizationvirtualmachine.internal.virtualization.deckhouse.io/vm-alpine-uefi 10d Running True
384Mi -> 512Mi (Hotplug disabled: memory size changing requires reboot)
Reboot started
$ k -n vm get internalvirtualizationvirtualmachines.internal.virtualization.deckhouse.io vm-alpine-uefi -oyaml | grep ' memory:' -A 10 memory: guest: 384Mi$ k -n vm get all,po,intvirt,vmop -owide
Warning: kubevirt.io/v1 VirtualMachineInstancePresets is now deprecated and will be removed in v2.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/d8v-vm-vm-alpine-uefi-x2xvj 1/1 Terminating 0 118s 10.66.10.4 virtlab-mi-3 1/1
NAME PHASE CORES COREFRACTION MEMORY NEED RESTART AGENT MIGRATABLE NODE IPADDRESS AGE
virtualmachine.virtualization.deckhouse.io/vm-alpine-uefi Stopped 1 20% 384Mi True virtlab-mi-3 10.66.10.4 10d
NAME AGE PHASE IP NODENAME READY LIVE-MIGRATABLE PAUSED
internalvirtualizationvirtualmachineinstance.internal.virtualization.deckhouse.io/vm-alpine-uefi 118s Succeeded virtlab-mi-3 False True
NAME AGE STATUS READY
internalvirtualizationvirtualmachine.internal.virtualization.deckhouse.io/vm-alpine-uefi 10d Stopped False
After reboot
$ k -n vm get internalvirtualizationvirtualmachines.internal.virtualization.deckhouse.io vm-alpine-uefi -oyaml | grep ' memory:' -A 10 memory: guest: 512Mi$ k -n vm get all,po,intvirt,vmop -owide
Warning: kubevirt.io/v1 VirtualMachineInstancePresets is now deprecated and will be removed in v2.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/d8v-vm-vm-alpine-uefi-grqdn 1/1 Running 0 33s 10.66.10.4 virtlab-mi-1 1/1
NAME PHASE CORES COREFRACTION MEMORY NEED RESTART AGENT MIGRATABLE NODE IPADDRESS AGE
virtualmachine.virtualization.deckhouse.io/vm-alpine-uefi Running 1 20% 512Mi False True virtlab-mi-1 10.66.10.4 10d
NAME AGE PHASE IP NODENAME READY LIVE-MIGRATABLE PAUSED
internalvirtualizationvirtualmachineinstance.internal.virtualization.deckhouse.io/vm-alpine-uefi 33s Running 10.66.10.4 virtlab-mi-1 True True
NAME AGE STATUS READY
internalvirtualizationvirtualmachine.internal.virtualization.deckhouse.io/vm-alpine-uefi 10d Running True
Checklist
Changelog entries