Skip to content

Commit 16ce6e2

Browse files
authored
Merge pull request #2689 from willie-yao/spot-eviction
Add evictionPolicy field for spot VMs
2 parents 85fbf6c + ae40768 commit 16ce6e2

23 files changed

+304
-55
lines changed

api/v1alpha3/azuremachine_conversion.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ func (src *AzureMachine) ConvertTo(dstRaw conversion.Hub) error {
6666
dst.Spec.VMExtensions = restored.Spec.VMExtensions
6767
}
6868

69+
if restored.Spec.SpotVMOptions != nil && restored.Spec.SpotVMOptions.EvictionPolicy != nil {
70+
dst.Spec.SpotVMOptions.EvictionPolicy = restored.Spec.SpotVMOptions.EvictionPolicy
71+
}
72+
6973
dst.Spec.SubnetName = restored.Spec.SubnetName
7074

7175
dst.Status.LongRunningOperationStates = restored.Status.LongRunningOperationStates
@@ -184,3 +188,8 @@ func Convert_v1alpha3_AzureMarketplaceImage_To_v1beta1_AzureMarketplaceImage(in
184188
func Convert_v1beta1_Image_To_v1alpha3_Image(in *infrav1.Image, out *Image, s apiconversion.Scope) error {
185189
return autoConvert_v1beta1_Image_To_v1alpha3_Image(in, out, s)
186190
}
191+
192+
// Convert_v1beta1_SpotVMOptions_To_v1alpha3_SpotVMOptions converts SpotVMOptions from v1beta1 to v1alpha3.
193+
func Convert_v1beta1_SpotVMOptions_To_v1alpha3_SpotVMOptions(in *infrav1.SpotVMOptions, out *SpotVMOptions, s apiconversion.Scope) error {
194+
return autoConvert_v1beta1_SpotVMOptions_To_v1alpha3_SpotVMOptions(in, out, s)
195+
}

api/v1alpha3/azuremachinetemplate_conversion.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ func (src *AzureMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
6969
dst.Spec.Template.Spec.VMExtensions = restored.Spec.Template.Spec.VMExtensions
7070
}
7171

72+
if restored.Spec.Template.Spec.SpotVMOptions != nil && restored.Spec.Template.Spec.SpotVMOptions.EvictionPolicy != nil {
73+
dst.Spec.Template.Spec.SpotVMOptions.EvictionPolicy = restored.Spec.Template.Spec.SpotVMOptions.EvictionPolicy
74+
}
75+
7276
return nil
7377
}
7478

api/v1alpha3/zz_generated.conversion.go

Lines changed: 24 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/v1alpha4/azuremachine_conversion.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ func (src *AzureMachine) ConvertTo(dstRaw conversion.Hub) error {
5252
dst.Spec.VMExtensions = restored.Spec.VMExtensions
5353
}
5454

55+
if restored.Spec.SpotVMOptions != nil && restored.Spec.SpotVMOptions.EvictionPolicy != nil {
56+
dst.Spec.SpotVMOptions.EvictionPolicy = restored.Spec.SpotVMOptions.EvictionPolicy
57+
}
58+
5559
return nil
5660
}
5761

@@ -105,3 +109,8 @@ func Convert_v1beta1_Image_To_v1alpha4_Image(in *infrav1.Image, out *Image, s ap
105109
func Convert_v1beta1_AzureMachineSpec_To_v1alpha4_AzureMachineSpec(in *infrav1.AzureMachineSpec, out *AzureMachineSpec, s apiconversion.Scope) error {
106110
return autoConvert_v1beta1_AzureMachineSpec_To_v1alpha4_AzureMachineSpec(in, out, s)
107111
}
112+
113+
// Convert_v1beta1_SpotVMOptions_To_v1alpha4_SpotVMOptions converts SpotVMOptions from v1beta1 to v1alpha4.
114+
func Convert_v1beta1_SpotVMOptions_To_v1alpha4_SpotVMOptions(in *infrav1.SpotVMOptions, out *SpotVMOptions, s apiconversion.Scope) error {
115+
return autoConvert_v1beta1_SpotVMOptions_To_v1alpha4_SpotVMOptions(in, out, s)
116+
}

api/v1alpha4/azuremachinetemplate_conversion.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ func (src *AzureMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
5454
dst.Spec.Template.Spec.VMExtensions = restored.Spec.Template.Spec.VMExtensions
5555
}
5656

57+
if restored.Spec.Template.Spec.SpotVMOptions != nil && restored.Spec.Template.Spec.SpotVMOptions.EvictionPolicy != nil {
58+
dst.Spec.Template.Spec.SpotVMOptions.EvictionPolicy = restored.Spec.Template.Spec.SpotVMOptions.EvictionPolicy
59+
}
60+
5761
return nil
5862
}
5963

api/v1alpha4/zz_generated.conversion.go

Lines changed: 24 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/v1beta1/azuremachine_default.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,17 @@ func (s *AzureMachineSpec) SetIdentityDefaults() {
8787
}
8888
}
8989

90+
// SetSpotEvictionPolicyDefaults sets the defaults for the spot VM eviction policy.
91+
func (s *AzureMachineSpec) SetSpotEvictionPolicyDefaults() {
92+
if s.SpotVMOptions != nil && s.SpotVMOptions.EvictionPolicy == nil {
93+
defaultPolicy := SpotEvictionPolicyDeallocate
94+
if s.OSDisk.DiffDiskSettings != nil && s.OSDisk.DiffDiskSettings.Option == "Local" {
95+
defaultPolicy = SpotEvictionPolicyDelete
96+
}
97+
s.SpotVMOptions.EvictionPolicy = &defaultPolicy
98+
}
99+
}
100+
90101
// SetDefaults sets to the defaults for the AzureMachineSpec.
91102
func (s *AzureMachineSpec) SetDefaults() {
92103
if err := s.SetDefaultSSHPublicKey(); err != nil {
@@ -95,4 +106,5 @@ func (s *AzureMachineSpec) SetDefaults() {
95106
s.SetDefaultCachingType()
96107
s.SetDataDisksDefaults()
97108
s.SetIdentityDefaults()
109+
s.SetSpotEvictionPolicyDefaults()
98110
}

api/v1beta1/azuremachine_types.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ type SpotVMOptions struct {
133133
// MaxPrice defines the maximum price the user is willing to pay for Spot VM instances
134134
// +optional
135135
MaxPrice *resource.Quantity `json:"maxPrice,omitempty"`
136+
137+
// EvictionPolicy defines the behavior of the virtual machine when it is evicted. It can be either Delete or Deallocate.
138+
// +optional
139+
EvictionPolicy *SpotEvictionPolicy `json:"evictionPolicy,omitempty"`
136140
}
137141

138142
// AzureMachineStatus defines the observed state of AzureMachine.

api/v1beta1/types.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,17 @@ const (
455455
VMIdentityUserAssigned VMIdentity = "UserAssigned"
456456
)
457457

458+
// SpotEvictionPolicy defines the eviction policy for spot VMs, if configured.
459+
// +kubebuilder:validation:Enum=Deallocate;Delete
460+
type SpotEvictionPolicy string
461+
462+
const (
463+
// SpotEvictionPolicyDeallocate is the default eviction policy and will deallocate the VM when the node is marked for eviction.
464+
SpotEvictionPolicyDeallocate SpotEvictionPolicy = "Deallocate"
465+
// SpotEvictionPolicyDelete will delete the VM when the node is marked for eviction.
466+
SpotEvictionPolicyDelete SpotEvictionPolicy = "Delete"
467+
)
468+
458469
// UserAssignedIdentity defines the user-assigned identities provided
459470
// by the user to be assigned to Azure resources.
460471
type UserAssignedIdentity struct {

api/v1beta1/zz_generated.deepcopy.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)