Skip to content

Commit

Permalink
Add spotVM for GKE Node Pools (GoogleCloudPlatform#5443)
Browse files Browse the repository at this point in the history
* Add spotVM for GKE Node Pools

Signed-off-by: Alex R <[email protected]>

* Add spot test

Signed-off-by: Alex R <[email protected]>

* Guard for beta only

Signed-off-by: Alex R <[email protected]>

* Add beta note to docs

Signed-off-by: Alex R <[email protected]>
  • Loading branch information
sepich authored and betsy-lichtenberg committed Apr 25, 2022
1 parent e7af26c commit b7a90a9
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1478,6 +1478,9 @@ resource "google_container_node_pool" "with_workload_metadata_config" {
cluster = google_container_cluster.cluster.name
initial_node_count = 1
node_config {
<% unless version == 'ga' -%>
spot = true
<% end -%>
oauth_scopes = [
"https://www.googleapis.com/auth/logging.write",
"https://www.googleapis.com/auth/monitoring",
Expand Down
16 changes: 16 additions & 0 deletions mmv1/third_party/terraform/utils/node_config.go.erb
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,16 @@ func schemaNodeConfig() *schema.Schema {
Description: `Whether the nodes are created as preemptible VM instances.`,
},

<% unless version == 'ga' -%>
"spot": {
Type: schema.TypeBool,
Optional: true,
ForceNew: true,
Default: false,
Description: `Whether the nodes are created as spot VM instances.`,
},
<% end -%>

"service_account": {
Type: schema.TypeString,
Optional: true,
Expand Down Expand Up @@ -497,6 +507,9 @@ func expandNodeConfig(v interface{}) *container.NodeConfig {

// Preemptible Is Optional+Default, so it always has a value
nc.Preemptible = nodeConfig["preemptible"].(bool)
<% unless version == 'ga' -%>
nc.Spot = nodeConfig["spot"].(bool)
<% end -%>

if v, ok := nodeConfig["min_cpu_platform"]; ok {
nc.MinCpuPlatform = v.(string)
Expand Down Expand Up @@ -638,6 +651,9 @@ func flattenNodeConfig(c *container.NodeConfig) []map[string]interface{} {
"labels": c.Labels,
"tags": c.Tags,
"preemptible": c.Preemptible,
<% unless version == 'ga' -%>
"spot": c.Spot,
<% end -%>
"min_cpu_platform": c.MinCpuPlatform,
"shielded_instance_config": flattenShieldedInstanceConfig(c.ShieldedInstanceConfig),
"taint": flattenTaints(c.Taints),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -678,6 +678,10 @@ gcfs_config {
are preemptible. See the [official documentation](https://cloud.google.com/container-engine/docs/preemptible-vm)
for more information. Defaults to false.

* `spot` - (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) A boolean
that represents whether the underlying node VMs are spot. See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/concepts/spot-vms)
for more information. Defaults to false.

* `sandbox_config` - (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it.
Structure is [documented below](#nested_sandbox_config).

Expand Down

0 comments on commit b7a90a9

Please sign in to comment.