Skip to content

Commit

Permalink
Add support for Spot VMs
Browse files Browse the repository at this point in the history
  • Loading branch information
jwmay2012 committed Sep 18, 2024
1 parent 67ff6d8 commit 14e2818
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 0 deletions.
14 changes: 14 additions & 0 deletions api/v1beta1/gcpmachine_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,12 @@ type CustomerEncryptionKey struct {
// +optional
SuppliedKey *SuppliedKey `json:"suppliedKey,omitempty"`
}
type ProvisioningModel string

const (
ProvisioningModelStandard ProvisioningModel = "Standard"
ProvisioningModelSpot ProvisioningModel = "Spot"
)

// GCPMachineSpec defines the desired state of GCPMachine.
type GCPMachineSpec struct {
Expand Down Expand Up @@ -302,6 +308,14 @@ type GCPMachineSpec struct {
// +optional
Preemptible bool `json:"preemptible,omitempty"`

// ProvisioningModel defines if instance is spot.
// If set to "Standard" while preemptible is true, then the VM will be of type "Preemptible".
// If "Spot", VM type is "Spot".
// +kubebuilder:validation:Enum=Standard;Spot
// +kubebuilder:default=Standard
// +optional
ProvisioningModel *ProvisioningModel `json:"provisioningModel,omitempty"`

// IPForwarding Allows this instance to send and receive packets with non-matching destination or source IPs.
// This is required if you plan to use this instance to forward routes. Defaults to enabled.
// +kubebuilder:validation:Enum=Enabled;Disabled
Expand Down
3 changes: 3 additions & 0 deletions cloud/scope/machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,9 @@ func (m *MachineScope) InstanceSpec(log logr.Logger) *compute.Instance {
Preemptible: m.GCPMachine.Spec.Preemptible,
},
}
if m.GCPMachine.Spec.ProvisioningModel != nil && *m.GCPMachine.Spec.ProvisioningModel == infrav1.ProvisioningModelSpot {
instance.Scheduling.ProvisioningModel = "SPOT"
}

instance.CanIpForward = true
if m.GCPMachine.Spec.IPForwarding != nil && *m.GCPMachine.Spec.IPForwarding == infrav1.IPForwardingDisabled {
Expand Down
10 changes: 10 additions & 0 deletions config/crd/bases/infrastructure.cluster.x-k8s.io_gcpmachines.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,16 @@ spec:
preemptible:
description: Preemptible defines if instance is preemptible
type: boolean
provisioningModel:
default: Standard
description: |-
ProvisioningModel defines if instance is spot.
If set to "Standard" while preemptible is true, then the VM will be of type "Preemptible".
If "Spot", VM type is "Spot".
enum:
- Standard
- Spot
type: string
providerID:
description: ProviderID is the unique identifier as specified by the
cloud provider.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,16 @@ spec:
preemptible:
description: Preemptible defines if instance is preemptible
type: boolean
provisioningModel:
default: Standard
description: |-
ProvisioningModel defines if instance is spot.
If set to "Standard" while preemptible is true, then the VM will be of type "Preemptible".
If "Spot", VM type is "Spot".
enum:
- Standard
- Spot
type: string
providerID:
description: ProviderID is the unique identifier as specified
by the cloud provider.
Expand Down
22 changes: 22 additions & 0 deletions docs/book/src/topics/preemptible-vms.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,25 @@ spec:
vmSize: E2
preemptible: true
```
## Spot VMs
[Spot VMs are the latest version of preemptible VMs.](https://cloud.google.com/compute/docs/instances/spot)
To use a Spot VM instead of a Preemptible VM, add `provisioningModel` to `GCPMachineTemplate` and set it to `Spot`.

```yaml
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: GCPMachineTemplate
metadata:
name: capg-md-0
spec:
region: us-west-1
template:
osDisk:
diskSizeGB: 30
managedDisk:
storageAccountType: STANDARD
osType: Linux
vmSize: E2
provisioningModel: Spot
```

0 comments on commit 14e2818

Please sign in to comment.