-
Notifications
You must be signed in to change notification settings - Fork 34
Add boot-from-volume support to server controller #634
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Add support for booting servers from Cinder volumes instead of images.
This enables the boot-from-volume (BFV) pattern where a bootable volume
(created from an image) is used as the root disk.
Design decisions:
1. Boot volume vs data volumes separation:
- Only the boot volume (bootVolume field) is attached at server creation
time via Nova's block device mapping
- Additional data volumes continue to use the existing dynamic attachment
mechanism (spec.resource.volumes) which attaches volumes after server
creation
- This separation allows data volumes to remain mutable (add/remove after
server creation) while the boot volume is immutable
- Avoids duplicating volume attachment logic between creation-time and
runtime mechanisms
2. No deleteOnTermination option:
- Deliberately not exposing Nova's delete_on_termination flag
- If enabled, Nova would delete the underlying OpenStack volume when the
server is deleted, but the ORC Volume resource would remain as an orphan
- The orphaned Volume resource would then attempt to recreate the volume,
leading to unexpected behavior
- Users who want the volume deleted should delete both Server and Volume
resources, maintaining consistent ORC resource lifecycle management
API Changes:
- Add ServerBootVolumeSpec type with volumeRef and optional tag fields
- Add bootVolume field to ServerResourceSpec (mutually exclusive with imageRef)
- Make imageRef optional (pointer) with CEL validation
Controller Changes:
- Add bootVolumeDependency with deletion guard and unique controller name
- Handle boot-from-volume in CreateResource by building BlockDevice list
Tests & Examples:
- Add kuttl test for server boot-from-volume scenario
- Add config/samples/openstack_v1alpha1_server_boot_from_volume.yaml
- Add examples/bases/boot-from-volume/ with volume and server examples
assisted-by: claude
| // +optional | ||
| // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="imageRef is immutable" | ||
| ImageRef KubernetesNameRef `json:"imageRef,omitempty"` | ||
| ImageRef *KubernetesNameRef `json:"imageRef,omitempty"` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because of this change, we'll have to cut a new major release since it's not backward compatible. This settles the discussion in #632.
| resource: | ||
| # No imageRef - booting from volume | ||
| bootVolume: | ||
| volumeRef: boot-volume |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe we're missing a few refs in examples/components/kustomizeconfig/kustomizeconfig.yaml, we should fix it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mandre should I add them in this patch or should we have a dedicated PR for that as it seems many references are missing?
Add support for booting servers from Cinder volumes instead of images.
This enables the boot-from-volume (BFV) pattern where a bootable volume
(created from an image) is used as the root disk.
Design decisions:
Boot volume vs data volumes separation:
time via Nova's block device mapping
mechanism (spec.resource.volumes) which attaches volumes after server
creation
server creation) while the boot volume is immutable
runtime mechanisms
No deleteOnTermination option:
server is deleted, but the ORC Volume resource would remain as an orphan
leading to unexpected behavior
resources, maintaining consistent ORC resource lifecycle management
API Changes:
Controller Changes:
Tests & Examples:
depends on #633
assisted-by: claude