diff --git a/pkg/model/master_volumes.go b/pkg/model/master_volumes.go index 3f3d734cad7cc..7b60d1beeb0fc 100644 --- a/pkg/model/master_volumes.go +++ b/pkg/model/master_volumes.go @@ -21,6 +21,7 @@ import ( "sort" "strings" + armcompute "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute" ec2types "github.com/aws/aws-sdk-go-v2/service/ec2/types" "github.com/scaleway/scaleway-sdk-go/api/instance/v1" "k8s.io/kops/pkg/apis/kops" @@ -48,6 +49,7 @@ const ( DefaultAWSEtcdVolumeIonIops = 100 DefaultAWSEtcdVolumeGp3Iops = 3000 DefaultAWSEtcdVolumeGp3Throughput = 125 + DefaultAZUREEtcdVolumeType = "StandardSSD_LRS" DefaultGCEEtcdVolumeType = "pd-ssd" ) @@ -363,6 +365,10 @@ func (b *MasterVolumeBuilder) addAzureVolume( m kops.EtcdMemberSpec, allMembers []string, ) error { + volumeType := fi.ValueOf(m.VolumeType) + if volumeType == "" { + volumeType = DefaultAZUREEtcdVolumeType + } // The tags are use by Protokube to mount the volume and use it for etcd. tags := map[string]*string{ // This is the configuration of the etcd cluster. @@ -394,9 +400,10 @@ func (b *MasterVolumeBuilder) addAzureVolume( ResourceGroup: &azuretasks.ResourceGroup{ Name: fi.PtrTo(b.Cluster.AzureResourceGroupName()), }, - SizeGB: fi.PtrTo(volumeSize), - Tags: tags, - Zones: []*string{&zoneNumber}, + SizeGB: fi.PtrTo(volumeSize), + Tags: tags, + VolumeType: fi.PtrTo(armcompute.DiskStorageAccountTypes(volumeType)), + Zones: []*string{&zoneNumber}, } c.AddTask(t) diff --git a/upup/pkg/fi/cloudup/azuretasks/disk.go b/upup/pkg/fi/cloudup/azuretasks/disk.go index 519ae3bf2cf0b..d65d8720849fd 100644 --- a/upup/pkg/fi/cloudup/azuretasks/disk.go +++ b/upup/pkg/fi/cloudup/azuretasks/disk.go @@ -35,6 +35,7 @@ type Disk struct { ResourceGroup *ResourceGroup SizeGB *int32 Tags map[string]*string + VolumeType *compute.DiskStorageAccountTypes Zones []*string } @@ -77,6 +78,9 @@ func (d *Disk) Find(c *fi.CloudupContext) (*Disk, error) { Tags: found.Tags, Zones: found.Zones, } + if found.SKU != nil && found.SKU.Name != nil { + disk.VolumeType = found.SKU.Name + } if found.Properties != nil { disk.SizeGB = found.Properties.DiskSizeGB } @@ -129,7 +133,7 @@ func (*Disk) RenderAzure(t *azure.AzureAPITarget, a, e, changes *Disk) error { DiskSizeGB: e.SizeGB, }, SKU: &compute.DiskSKU{ - Name: to.Ptr(compute.DiskStorageAccountTypesStandardSSDLRS), + Name: e.VolumeType, }, Tags: e.Tags, Zones: e.Zones, diff --git a/upup/pkg/fi/cloudup/azuretasks/disk_test.go b/upup/pkg/fi/cloudup/azuretasks/disk_test.go index ebbfd46462899..d2752bfe790eb 100644 --- a/upup/pkg/fi/cloudup/azuretasks/disk_test.go +++ b/upup/pkg/fi/cloudup/azuretasks/disk_test.go @@ -29,8 +29,9 @@ import ( ) const ( - testTagKey = "key" - testTagValue = "value" + testTagKey = "key" + testTagValue = "value" + testVolumeType = "StandardSSD_LRS" ) func newTestDisk() *Disk { @@ -40,7 +41,8 @@ func newTestDisk() *Disk { ResourceGroup: &ResourceGroup{ Name: to.Ptr("rg"), }, - SizeGB: to.Ptr[int32](32), + SizeGB: to.Ptr[int32](32), + VolumeType: to.Ptr(compute.DiskStorageAccountTypesStandardSSDLRS), Tags: map[string]*string{ testTagKey: to.Ptr(testTagValue), },