Skip to content

Commit 53d9bed

Browse files
authored
Merge pull request kubernetes#95463 from andyzhangx/bigdisk-cachemode
fix azure disk attach failure for disk size bigger than 4TB
2 parents 475849e + daa4d76 commit 53d9bed

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

staging/src/k8s.io/legacy-cloud-providers/azure/azure_controller_common.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ const (
4444
maxStorageAccounts = 100 // max # is 200 (250 with special request). this allows 100 for everything else including stand alone disks
4545
maxDisksPerStorageAccounts = 60
4646
storageAccountUtilizationBeforeGrowing = 0.5
47+
// Disk Caching is not supported for disks 4 TiB and larger
48+
// https://docs.microsoft.com/en-us/azure/virtual-machines/premium-storage-performance#disk-caching
49+
diskCachingLimit = 4096 // GiB
4750

4851
maxLUN = 64 // max number of LUNs per VM
4952
errLeaseFailed = "AcquireDiskLeaseFailed"
@@ -156,10 +159,21 @@ func (c *controllerCommon) AttachDisk(isManagedDisk bool, diskName, diskURI stri
156159
return -1, danglingErr
157160
}
158161

159-
if disk.DiskProperties != nil && disk.DiskProperties.Encryption != nil &&
160-
disk.DiskProperties.Encryption.DiskEncryptionSetID != nil {
161-
diskEncryptionSetID = *disk.DiskProperties.Encryption.DiskEncryptionSetID
162+
if disk.DiskProperties != nil {
163+
if disk.DiskProperties.DiskSizeGB != nil && *disk.DiskProperties.DiskSizeGB >= diskCachingLimit && cachingMode != compute.CachingTypesNone {
164+
// Disk Caching is not supported for disks 4 TiB and larger
165+
// https://docs.microsoft.com/en-us/azure/virtual-machines/premium-storage-performance#disk-caching
166+
cachingMode = compute.CachingTypesNone
167+
klog.Warningf("size of disk(%s) is %dGB which is bigger than limit(%dGB), set cacheMode as None",
168+
diskURI, *disk.DiskProperties.DiskSizeGB, diskCachingLimit)
169+
}
170+
171+
if disk.DiskProperties.Encryption != nil &&
172+
disk.DiskProperties.Encryption.DiskEncryptionSetID != nil {
173+
diskEncryptionSetID = *disk.DiskProperties.Encryption.DiskEncryptionSetID
174+
}
162175
}
176+
163177
if v, ok := disk.Tags[WriteAcceleratorEnabled]; ok {
164178
if v != nil && strings.EqualFold(*v, "true") {
165179
writeAcceleratorEnabled = true

staging/src/k8s.io/legacy-cloud-providers/azure/azure_controller_common_test.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,15 @@ func TestCommonAttachDisk(t *testing.T) {
7777
expectedErr: true,
7878
},
7979
{
80-
desc: "correct LUN and no error shall be returned if everything is good",
81-
vmList: map[string]string{"vm1": "PowerState/Running"},
82-
nodeName: "vm1",
83-
existedDisk: compute.Disk{Name: to.StringPtr("disk-name"), DiskProperties: &compute.DiskProperties{Encryption: &compute.Encryption{DiskEncryptionSetID: &diskEncryptionSetID, Type: compute.EncryptionAtRestWithCustomerKey}}, Tags: testTags},
80+
desc: "correct LUN and no error shall be returned if everything is good",
81+
vmList: map[string]string{"vm1": "PowerState/Running"},
82+
nodeName: "vm1",
83+
existedDisk: compute.Disk{Name: to.StringPtr("disk-name"),
84+
DiskProperties: &compute.DiskProperties{
85+
Encryption: &compute.Encryption{DiskEncryptionSetID: &diskEncryptionSetID, Type: compute.EncryptionAtRestWithCustomerKey},
86+
DiskSizeGB: to.Int32Ptr(4096),
87+
},
88+
Tags: testTags},
8489
expectedLun: 1,
8590
expectedErr: false,
8691
},

0 commit comments

Comments
 (0)