Summary
The MCM IronCore provider can size a root disk only through the VolumeClass name field. Without a VolumeClass, only an image ref is supported, and the disk size is exactly equal to the upstream image size.
With e.g. a Garden Linux image, the disk size is 1.8G. This leaves the VM with a disk too small for kubelet.
Setting a value for rootDisk.size results in a failed validation when volumeClassName is empty:
providerSpec.rootDisk.volumeClassName: Required value: volumeClassName is required
The IronCore API has a field that can be used to propagate the size 'request': localDisk.sizeLimit.
Basic example
Reproduce
MachineClass provider spec with a size and no class:
apiVersion: machine.sapcloud.io/v1alpha1
kind: MachineClass
metadata:
name: worker
provider: ironcore
providerSpec:
image: ghcr.io/ironcore-dev/gardenlinux/gardener:2150.7.0-kvm-amd64
rootDisk:
size: 20Gi
# ...
Expected:
apiVersion: compute.ironcore.dev/v1alpha1
kind: Machine
spec:
volumes:
- name: root
localDisk:
image: ghcr.io/ironcore-dev/gardenlinux/gardener:2150.7.0-kvm-amd64
sizeLimit: 20Gi
Actual result: the validation error above.
Related code
pkg/api/validation/validation.go: would need a change to the validation func.
pkg/ironcore/create_machine.go: buildMachineVolumes: needs a branch for rootDisk without volumeClassName
Motivation
Provisioning VMs with a (re-)sized root volume effectively requires a VolumeClass (Ceph). Allowing this will improve the support for IronCore+libvirt.
Context
In our scenario, the goal was to test whether Gardener can bootstrap a cluster when no storage infrastructure (Ceph) is available.
The example spec is generated from gardener-extension-provider-ironcore and the deployment gets stuck. The MachineClass is created but every Create fails on the validation error.
Related PR: ironcore-dev/libvirt-provider#777
- the libvirt provider currently discards sizeLimit when image is set.
- the PR bakes in support (in anticipation of this feature:) )
Summary
The MCM IronCore provider can size a root disk only through the VolumeClass name field. Without a VolumeClass, only an image ref is supported, and the disk size is exactly equal to the upstream image size.
With e.g. a Garden Linux image, the disk size is 1.8G. This leaves the VM with a disk too small for kubelet.
Setting a value for
rootDisk.sizeresults in a failed validation whenvolumeClassNameis empty:The IronCore API has a field that can be used to propagate the size 'request':
localDisk.sizeLimit.Basic example
Reproduce
MachineClass provider spec with a size and no class:
Expected:
Actual result: the validation error above.
Related code
pkg/api/validation/validation.go: would need a change to the validation func.pkg/ironcore/create_machine.go:buildMachineVolumes: needs a branch forrootDiskwithoutvolumeClassNameMotivation
Provisioning VMs with a (re-)sized root volume effectively requires a VolumeClass (Ceph). Allowing this will improve the support for IronCore+libvirt.
Context
In our scenario, the goal was to test whether Gardener can bootstrap a cluster when no storage infrastructure (Ceph) is available.
The example spec is generated from
gardener-extension-provider-ironcoreand the deployment gets stuck. The MachineClass is created but every Create fails on the validation error.Related PR: ironcore-dev/libvirt-provider#777