diff --git a/pkg/model/gcemodel/autoscalinggroup.go b/pkg/model/gcemodel/autoscalinggroup.go index 7683c9f7a1cf2..44d7ea32d59cb 100644 --- a/pkg/model/gcemodel/autoscalinggroup.go +++ b/pkg/model/gcemodel/autoscalinggroup.go @@ -65,9 +65,13 @@ func (b *AutoscalingGroupModelBuilder) buildInstanceTemplate(c *fi.CloudupModelB { var volumeSize int32 var volumeType string + var volumeIops int32 + var volumeThroughput int32 if ig.Spec.RootVolume != nil { volumeSize = fi.ValueOf(ig.Spec.RootVolume.Size) volumeType = fi.ValueOf(ig.Spec.RootVolume.Type) + volumeIops = fi.ValueOf(ig.Spec.RootVolume.IOPS) + volumeThroughput = fi.ValueOf(ig.Spec.RootVolume.Throughput) } if volumeSize == 0 { volumeSize, err = defaults.DefaultInstanceGroupVolumeSize(ig.Spec.Role) @@ -120,6 +124,13 @@ func (b *AutoscalingGroupModelBuilder) buildInstanceTemplate(c *fi.CloudupModelB }, } + if volumeIops > 0 { + t.BootDiskIOPS = i64(int64(volumeIops)) + } + if volumeThroughput > 0 { + t.BootDiskThroughput = i64(int64(volumeThroughput)) + } + if startupScript != nil { if !fi.ValueOf(b.Cluster.Spec.CloudProvider.GCE.UseStartupScript) { // Use "user-data" instead of "startup-script", for compatibility with cloud-init diff --git a/pkg/model/master_volumes.go b/pkg/model/master_volumes.go index 587882c3ab2a1..5d72e0eb60b5a 100644 --- a/pkg/model/master_volumes.go +++ b/pkg/model/master_volumes.go @@ -293,6 +293,9 @@ func (b *MasterVolumeBuilder) addGCEVolume(c *fi.CloudupModelBuilderContext, pre } name := gce.ClusterSuffixedName(prefix, b.Cluster.ObjectMeta.Name, 63) + volumeIops := fi.ValueOf(m.VolumeIOPS) + volumeThroughput := fi.ValueOf(m.VolumeThroughput) + t := &gcetasks.Disk{ Name: fi.PtrTo(name), Lifecycle: b.Lifecycle, @@ -303,6 +306,13 @@ func (b *MasterVolumeBuilder) addGCEVolume(c *fi.CloudupModelBuilderContext, pre Labels: tags, } + if volumeIops > 0 { + t.VolumeIops = fi.PtrTo(int64(volumeIops)) + } + if volumeThroughput > 0 { + t.VolumeThroughput = fi.PtrTo(int64(volumeThroughput)) + } + c.AddTask(t) } diff --git a/tests/integration/update_cluster/ha_gce/kubernetes.tf b/tests/integration/update_cluster/ha_gce/kubernetes.tf index 96934ede7c847..790f077a6bd2b 100644 --- a/tests/integration/update_cluster/ha_gce/kubernetes.tf +++ b/tests/integration/update_cluster/ha_gce/kubernetes.tf @@ -603,17 +603,19 @@ resource "google_compute_instance_group_manager" "c-nodes-ha-gce-example-com" { resource "google_compute_instance_template" "master-us-test1-a-ha-gce-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 64 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 64 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "ha-gce-example-com" @@ -655,17 +657,19 @@ resource "google_compute_instance_template" "master-us-test1-a-ha-gce-example-co resource "google_compute_instance_template" "master-us-test1-b-ha-gce-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 64 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 64 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "ha-gce-example-com" @@ -707,17 +711,19 @@ resource "google_compute_instance_template" "master-us-test1-b-ha-gce-example-co resource "google_compute_instance_template" "master-us-test1-c-ha-gce-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 64 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 64 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "ha-gce-example-com" @@ -759,17 +765,19 @@ resource "google_compute_instance_template" "master-us-test1-c-ha-gce-example-co resource "google_compute_instance_template" "nodes-ha-gce-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 128 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 128 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "ha-gce-example-com" diff --git a/tests/integration/update_cluster/many-addons-gce/kubernetes.tf b/tests/integration/update_cluster/many-addons-gce/kubernetes.tf index d750cfc967a5b..88489af93399a 100644 --- a/tests/integration/update_cluster/many-addons-gce/kubernetes.tf +++ b/tests/integration/update_cluster/many-addons-gce/kubernetes.tf @@ -459,17 +459,19 @@ resource "google_compute_instance_group_manager" "a-nodes-minimal-example-com" { resource "google_compute_instance_template" "master-us-test1-a-minimal-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 64 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 64 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-example-com" @@ -511,17 +513,19 @@ resource "google_compute_instance_template" "master-us-test1-a-minimal-example-c resource "google_compute_instance_template" "nodes-minimal-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 128 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 128 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-example-com" diff --git a/tests/integration/update_cluster/minimal_gce/kubernetes.tf b/tests/integration/update_cluster/minimal_gce/kubernetes.tf index 738f36adbfe6f..35ea8951986dd 100644 --- a/tests/integration/update_cluster/minimal_gce/kubernetes.tf +++ b/tests/integration/update_cluster/minimal_gce/kubernetes.tf @@ -435,17 +435,19 @@ resource "google_compute_instance_group_manager" "a-nodes-minimal-gce-example-co resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 64 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 64 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-gce-example-com" @@ -487,17 +489,19 @@ resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-examp resource "google_compute_instance_template" "nodes-minimal-gce-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 128 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 128 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-gce-example-com" diff --git a/tests/integration/update_cluster/minimal_gce_dns-none/kubernetes.tf b/tests/integration/update_cluster/minimal_gce_dns-none/kubernetes.tf index 16de2b85cb292..c77c5e9192aa1 100644 --- a/tests/integration/update_cluster/minimal_gce_dns-none/kubernetes.tf +++ b/tests/integration/update_cluster/minimal_gce_dns-none/kubernetes.tf @@ -499,17 +499,19 @@ resource "google_compute_instance_group_manager" "a-nodes-minimal-gce-example-co resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 64 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 64 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-gce-example-com" @@ -549,17 +551,19 @@ resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-examp resource "google_compute_instance_template" "nodes-minimal-gce-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 128 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 128 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-gce-example-com" diff --git a/tests/integration/update_cluster/minimal_gce_ilb/kubernetes.tf b/tests/integration/update_cluster/minimal_gce_ilb/kubernetes.tf index 0d5c877847501..28d674c6d8d92 100644 --- a/tests/integration/update_cluster/minimal_gce_ilb/kubernetes.tf +++ b/tests/integration/update_cluster/minimal_gce_ilb/kubernetes.tf @@ -468,17 +468,19 @@ resource "google_compute_instance_group_manager" "a-nodes-minimal-gce-ilb-exampl resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-ilb-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 64 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 64 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-gce-ilb-example-com" @@ -518,17 +520,19 @@ resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-ilb-e resource "google_compute_instance_template" "nodes-minimal-gce-ilb-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 128 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 128 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-gce-ilb-example-com" diff --git a/tests/integration/update_cluster/minimal_gce_ilb_longclustername/kubernetes.tf b/tests/integration/update_cluster/minimal_gce_ilb_longclustername/kubernetes.tf index ad16c3f4d38bb..1bbdc4d16a30c 100644 --- a/tests/integration/update_cluster/minimal_gce_ilb_longclustername/kubernetes.tf +++ b/tests/integration/update_cluster/minimal_gce_ilb_longclustername/kubernetes.tf @@ -468,17 +468,19 @@ resource "google_compute_instance_group_manager" "a-nodes-minimal-gce-with-a-ver resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-with-a-very-very-very-very-very-long-name-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 64 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 64 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-gce-with-a-very-very-very-very-very-long-name-example-com" @@ -518,17 +520,19 @@ resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-with- resource "google_compute_instance_template" "nodes-minimal-gce-with-a-very-very-very-very-very-long-name-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 128 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 128 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-gce-with-a-very-very-very-very-very-long-name-example-com" diff --git a/tests/integration/update_cluster/minimal_gce_longclustername/kubernetes.tf b/tests/integration/update_cluster/minimal_gce_longclustername/kubernetes.tf index bf85d2e47cd17..63b226c4f777b 100644 --- a/tests/integration/update_cluster/minimal_gce_longclustername/kubernetes.tf +++ b/tests/integration/update_cluster/minimal_gce_longclustername/kubernetes.tf @@ -435,17 +435,19 @@ resource "google_compute_instance_group_manager" "a-nodes-minimal-gce-with-a-ver resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-with-a-very-very-very-very-very-long-name-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 64 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 64 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-gce-with-a-very-very-very-very-very-long-name-example-com" @@ -487,17 +489,19 @@ resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-with- resource "google_compute_instance_template" "nodes-minimal-gce-with-a-very-very-very-very-very-long-name-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 128 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 128 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-gce-with-a-very-very-very-very-very-long-name-example-com" diff --git a/tests/integration/update_cluster/minimal_gce_plb/in-v1alpha2.yaml b/tests/integration/update_cluster/minimal_gce_plb/in-v1alpha2.yaml index 5802a1115db12..6f0e2ad594a8b 100644 --- a/tests/integration/update_cluster/minimal_gce_plb/in-v1alpha2.yaml +++ b/tests/integration/update_cluster/minimal_gce_plb/in-v1alpha2.yaml @@ -16,18 +16,23 @@ spec: cloudProvider: gce configBase: memfs://tests/minimal-gce-plb.example.com etcdClusters: - - cpuRequest: 200m - etcdMembers: - - instanceGroup: master-us-test1-a - name: a - memoryRequest: 100Mi - name: main - - cpuRequest: 100m - etcdMembers: - - instanceGroup: master-us-test1-a - name: a - memoryRequest: 100Mi - name: events + - cpuRequest: 200m + etcdMembers: + - instanceGroup: master-us-test1-a + name: a + memoryRequest: 100Mi + name: main + volumeIops: 6000 + volumeSize: 120 + volumeThroughput: 1000 + type: hyperdisk-balanced + - cpuRequest: 100m + etcdMembers: + - instanceGroup: master-us-test1-a + name: a + memoryRequest: 100Mi + name: events + type: hyperdisk-balanced cloudConfig: gceServiceAccount: default iam: @@ -35,8 +40,8 @@ spec: kubelet: anonymousAuth: false kubernetesApiAccess: - - 0.0.0.0/0 - - ::/0 + - 0.0.0.0/0 + - ::/0 kubernetesVersion: v1.32.0 masterPublicName: api.minimal-gce-plb.example.com networking: @@ -44,18 +49,17 @@ spec: nonMasqueradeCIDR: 100.64.0.0/10 project: testproject sshAccess: - - 0.0.0.0/0 - - ::/0 + - 0.0.0.0/0 + - ::/0 subnets: - - name: us-test1 - region: us-test1 - type: Private + - name: us-test1 + region: us-test1 + type: Private topology: dns: type: Public --- - apiVersion: kops.k8s.io/v1alpha2 kind: InstanceGroup metadata: @@ -65,17 +69,20 @@ metadata: name: master-us-test1-a spec: image: ubuntu-os-cloud/ubuntu-2004-focal-v20221018 - machineType: e2-medium + machineType: c4-standard-4 + rootVolume: + volumeIops: 6000 + volumeThroughput: 1000 + type: hyperdisk-balanced maxSize: 1 minSize: 1 role: Master subnets: - - us-test1 + - us-test1 zones: - - us-test1-a + - us-test1-a --- - apiVersion: kops.k8s.io/v1alpha2 kind: InstanceGroup metadata: @@ -85,11 +92,16 @@ metadata: name: nodes spec: image: ubuntu-os-cloud/ubuntu-2004-focal-v20221018 - machineType: e2-medium + machineType: c4-standard-8 + rootVolume: + size: 100 + volumeIops: 6000 + volumeThroughput: 1000 + type: hyperdisk-balanced maxSize: 2 minSize: 2 role: Node subnets: - - us-test1 + - us-test1 zones: - - us-test1-a + - us-test1-a diff --git a/tests/integration/update_cluster/minimal_gce_plb/kubernetes.tf b/tests/integration/update_cluster/minimal_gce_plb/kubernetes.tf index 49ab7b00b580c..7353bb4f8acf8 100644 --- a/tests/integration/update_cluster/minimal_gce_plb/kubernetes.tf +++ b/tests/integration/update_cluster/minimal_gce_plb/kubernetes.tf @@ -492,17 +492,19 @@ resource "google_compute_instance_group_manager" "a-nodes-minimal-gce-plb-exampl resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-plb-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 64 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 64 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-gce-plb-example-com" @@ -513,7 +515,7 @@ resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-plb-e lifecycle { create_before_destroy = true } - machine_type = "e2-medium" + machine_type = "c4-standard-4" metadata = { "cluster-name" = "minimal-gce-plb.example.com" "kops-k8s-io-instance-group-name" = "master-us-test1-a" @@ -542,17 +544,19 @@ resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-plb-e resource "google_compute_instance_template" "nodes-minimal-gce-plb-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 128 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 128 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-gce-plb-example-com" @@ -562,7 +566,7 @@ resource "google_compute_instance_template" "nodes-minimal-gce-plb-example-com" lifecycle { create_before_destroy = true } - machine_type = "e2-medium" + machine_type = "c4-standard-8" metadata = { "cluster-name" = "minimal-gce-plb.example.com" "kops-k8s-io-instance-group-name" = "nodes" diff --git a/tests/integration/update_cluster/minimal_gce_private/kubernetes.tf b/tests/integration/update_cluster/minimal_gce_private/kubernetes.tf index 5c49ad915260f..00536581500aa 100644 --- a/tests/integration/update_cluster/minimal_gce_private/kubernetes.tf +++ b/tests/integration/update_cluster/minimal_gce_private/kubernetes.tf @@ -435,17 +435,19 @@ resource "google_compute_instance_group_manager" "a-nodes-minimal-gce-private-ex resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-private-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 64 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 64 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-gce-private-example-com" @@ -485,17 +487,19 @@ resource "google_compute_instance_template" "master-us-test1-a-minimal-gce-priva resource "google_compute_instance_template" "nodes-minimal-gce-private-example-com" { can_ip_forward = true disk { - auto_delete = true - boot = true - device_name = "persistent-disks-0" - disk_name = "" - disk_size_gb = 128 - disk_type = "pd-standard" - interface = "" - mode = "READ_WRITE" - source = "" - source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" - type = "PERSISTENT" + auto_delete = true + boot = true + device_name = "persistent-disks-0" + disk_name = "" + disk_size_gb = 128 + disk_type = "pd-standard" + interface = "" + mode = "READ_WRITE" + provisioned_iops = 0 + provisioned_throughput = 0 + source = "" + source_image = "https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20221018" + type = "PERSISTENT" } labels = { "k8s-io-cluster-name" = "minimal-gce-private-example-com" diff --git a/upup/pkg/fi/cloudup/gcetasks/disk.go b/upup/pkg/fi/cloudup/gcetasks/disk.go index be228776c758e..5580c9104225b 100644 --- a/upup/pkg/fi/cloudup/gcetasks/disk.go +++ b/upup/pkg/fi/cloudup/gcetasks/disk.go @@ -35,10 +35,12 @@ type Disk struct { Name *string Lifecycle fi.Lifecycle - VolumeType *string - SizeGB *int64 - Zone *string - Labels map[string]string + VolumeType *string + SizeGB *int64 + VolumeIops *int64 + VolumeThroughput *int64 + Zone *string + Labels map[string]string } var _ fi.CompareWithID = &Disk{} @@ -63,6 +65,8 @@ func (e *Disk) Find(c *fi.CloudupContext) (*Disk, error) { actual.VolumeType = fi.PtrTo(gce.LastComponent(r.Type)) actual.Zone = fi.PtrTo(gce.LastComponent(r.Zone)) actual.SizeGB = &r.SizeGb + actual.VolumeIops = &r.ProvisionedIops + actual.VolumeThroughput = &r.ProvisionedThroughput actual.Labels = r.Labels @@ -86,7 +90,7 @@ func (e *Disk) Run(c *fi.CloudupContext) error { return fi.CloudupDefaultDeltaRunMethod(e, c) } -func (_ *Disk) CheckChanges(a, e, changes *Disk) error { +func (*Disk) CheckChanges(a, e, changes *Disk) error { if a != nil { if changes.SizeGB != nil { return fi.CannotChangeField("SizeGB") @@ -105,7 +109,7 @@ func (_ *Disk) CheckChanges(a, e, changes *Disk) error { return nil } -func (_ *Disk) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Disk) error { +func (*Disk) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Disk) error { cloud := t.Cloud typeURL := fmt.Sprintf("https://www.googleapis.com/compute/v1/projects/%s/zones/%s/diskTypes/%s", cloud.Project(), @@ -118,6 +122,13 @@ func (_ *Disk) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Disk) error { Type: typeURL, } + if e.VolumeIops != nil { + disk.ProvisionedIops = *e.VolumeIops + } + if e.VolumeThroughput != nil { + disk.ProvisionedThroughput = *e.VolumeThroughput + } + if a == nil { op, err := cloud.Compute().Disks().Insert(t.Cloud.Project(), *e.Zone, disk) if err != nil { @@ -164,14 +175,16 @@ func (_ *Disk) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Disk) error { } type terraformDisk struct { - Name *string `cty:"name"` - VolumeType *string `cty:"type"` - SizeGB *int64 `cty:"size"` - Zone *string `cty:"zone"` - Labels map[string]string `cty:"labels"` + Name *string `cty:"name"` + VolumeType *string `cty:"type"` + SizeGB *int64 `cty:"size"` + ProvisionedIops *int64 `cty:"provisioned_iops"` + ProvisionedThroughput *int64 `cty:"provisioned_throughput"` + Zone *string `cty:"zone"` + Labels map[string]string `cty:"labels"` } -func (_ *Disk) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Disk) error { +func (*Disk) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Disk) error { cloud := t.Cloud.(gce.GCECloud) labels := make(map[string]string) @@ -185,5 +198,11 @@ func (_ *Disk) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Disk Zone: e.Zone, Labels: labels, } + if e.VolumeIops != nil { + tf.ProvisionedIops = e.VolumeIops + } + if e.VolumeThroughput != nil { + tf.ProvisionedThroughput = e.VolumeThroughput + } return t.RenderResource("google_compute_disk", *e.Name, tf) } diff --git a/upup/pkg/fi/cloudup/gcetasks/instancetemplate.go b/upup/pkg/fi/cloudup/gcetasks/instancetemplate.go index 6fc7efec3ece8..e8e2e8c17a864 100644 --- a/upup/pkg/fi/cloudup/gcetasks/instancetemplate.go +++ b/upup/pkg/fi/cloudup/gcetasks/instancetemplate.go @@ -57,9 +57,11 @@ type InstanceTemplate struct { Preemptible *bool GCPProvisioningModel *string - BootDiskImage *string - BootDiskSizeGB *int64 - BootDiskType *string + BootDiskImage *string + BootDiskSizeGB *int64 + BootDiskType *string + BootDiskIOPS *int64 + BootDiskThroughput *int64 CanIPForward *bool Subnet *Subnet @@ -133,6 +135,12 @@ func (e *InstanceTemplate) Find(c *fi.CloudupContext) (*InstanceTemplate, error) actual.BootDiskImage = fi.PtrTo(bootDiskImage) actual.BootDiskType = &p.Disks[0].InitializeParams.DiskType actual.BootDiskSizeGB = &p.Disks[0].InitializeParams.DiskSizeGb + if p.Disks[0].InitializeParams.ProvisionedIops > 0 { + actual.BootDiskIOPS = &p.Disks[0].InitializeParams.ProvisionedIops + } + if p.Disks[0].InitializeParams.ProvisionedThroughput > 0 { + actual.BootDiskThroughput = &p.Disks[0].InitializeParams.ProvisionedThroughput + } if p.Scheduling != nil { actual.Preemptible = &p.Scheduling.Preemptible @@ -239,7 +247,7 @@ func (e *InstanceTemplate) Run(c *fi.CloudupContext) error { return fi.CloudupDefaultDeltaRunMethod(e, c) } -func (_ *InstanceTemplate) CheckChanges(a, e, changes *InstanceTemplate) error { +func (*InstanceTemplate) CheckChanges(a, e, changes *InstanceTemplate) error { if fi.ValueOf(e.BootDiskImage) == "" { return fi.RequiredField("BootDiskImage") } @@ -291,6 +299,14 @@ func (e *InstanceTemplate) mapToGCE(project string, region string) (*compute.Ins Type: "PERSISTENT", }) + if e.BootDiskIOPS != nil { + disks[0].InitializeParams.ProvisionedIops = *e.BootDiskIOPS + } + + if e.BootDiskThroughput != nil { + disks[0].InitializeParams.ProvisionedThroughput = *e.BootDiskThroughput + } + var tags *compute.Tags if e.Tags != nil { tags = &compute.Tags{ @@ -521,15 +537,17 @@ type terraformInstanceTemplateAttachedDisk struct { DeviceName string `cty:"device_name"` // scratch vs persistent - Type string `cty:"type"` - Boot bool `cty:"boot"` - DiskName string `cty:"disk_name"` - SourceImage string `cty:"source_image"` - Source string `cty:"source"` - Interface string `cty:"interface"` - Mode string `cty:"mode"` - DiskType string `cty:"disk_type"` - DiskSizeGB int64 `cty:"disk_size_gb"` + Type string `cty:"type"` + Boot bool `cty:"boot"` + DiskName string `cty:"disk_name"` + SourceImage string `cty:"source_image"` + Source string `cty:"source"` + Interface string `cty:"interface"` + Mode string `cty:"mode"` + DiskType string `cty:"disk_type"` + DiskSizeGB int64 `cty:"disk_size_gb"` + ProvisionedIops int64 `cty:"provisioned_iops"` + ProvisionedThroughput int64 `cty:"provisioned_throughput"` } type terraformNetworkInterface struct { @@ -649,6 +667,13 @@ func (_ *InstanceTemplate) RenderTerraform(t *terraform.TerraformTarget, a, e, c DiskSizeGB: d.InitializeParams.DiskSizeGb, Type: d.Type, } + if d.InitializeParams.ProvisionedIops > 0 { + tfd.ProvisionedIops = d.InitializeParams.ProvisionedIops + } + + if d.InitializeParams.ProvisionedThroughput > 0 { + tfd.ProvisionedThroughput = d.InitializeParams.ProvisionedThroughput + } tf.Disks = append(tf.Disks, tfd) }