mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 21:47:07 +00:00
Merge pull request #87945 from andyzhangx/azure-writeaccelerator
add azure disk WriteAccelerator support
This commit is contained in:
commit
177506d87c
@ -130,6 +130,7 @@ func (p *azureDiskProvisioner) Provision(selectedNode *v1.Node, allowedTopologie
|
|||||||
availabilityZone string
|
availabilityZone string
|
||||||
availabilityZones sets.String
|
availabilityZones sets.String
|
||||||
selectedAvailabilityZone string
|
selectedAvailabilityZone string
|
||||||
|
writeAcceleratorEnabled string
|
||||||
|
|
||||||
diskIopsReadWrite string
|
diskIopsReadWrite string
|
||||||
diskMbpsReadWrite string
|
diskMbpsReadWrite string
|
||||||
@ -178,6 +179,8 @@ func (p *azureDiskProvisioner) Provision(selectedNode *v1.Node, allowedTopologie
|
|||||||
diskMbpsReadWrite = v
|
diskMbpsReadWrite = v
|
||||||
case "diskencryptionsetid":
|
case "diskencryptionsetid":
|
||||||
diskEncryptionSetID = v
|
diskEncryptionSetID = v
|
||||||
|
case azure.WriteAcceleratorEnabled:
|
||||||
|
writeAcceleratorEnabled = v
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("AzureDisk - invalid option %s in storage class", k)
|
return nil, fmt.Errorf("AzureDisk - invalid option %s in storage class", k)
|
||||||
}
|
}
|
||||||
@ -245,6 +248,9 @@ func (p *azureDiskProvisioner) Provision(selectedNode *v1.Node, allowedTopologie
|
|||||||
if p.options.CloudTags != nil {
|
if p.options.CloudTags != nil {
|
||||||
tags = *(p.options.CloudTags)
|
tags = *(p.options.CloudTags)
|
||||||
}
|
}
|
||||||
|
if strings.EqualFold(writeAcceleratorEnabled, "true") {
|
||||||
|
tags[azure.WriteAcceleratorEnabled] = "true"
|
||||||
|
}
|
||||||
|
|
||||||
volumeOptions := &azure.ManagedDiskOptions{
|
volumeOptions := &azure.ManagedDiskOptions{
|
||||||
DiskName: name,
|
DiskName: name,
|
||||||
|
@ -51,6 +51,10 @@ const (
|
|||||||
sourceSnapshot = "snapshot"
|
sourceSnapshot = "snapshot"
|
||||||
sourceVolume = "volume"
|
sourceVolume = "volume"
|
||||||
|
|
||||||
|
// WriteAcceleratorEnabled support for Azure Write Accelerator on Azure Disks
|
||||||
|
// https://docs.microsoft.com/azure/virtual-machines/windows/how-to-enable-write-accelerator
|
||||||
|
WriteAcceleratorEnabled = "writeacceleratorenabled"
|
||||||
|
|
||||||
// see https://docs.microsoft.com/en-us/rest/api/compute/disks/createorupdate#create-a-managed-disk-by-copying-a-snapshot.
|
// see https://docs.microsoft.com/en-us/rest/api/compute/disks/createorupdate#create-a-managed-disk-by-copying-a-snapshot.
|
||||||
diskSnapshotPath = "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/snapshots/%s"
|
diskSnapshotPath = "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/snapshots/%s"
|
||||||
|
|
||||||
@ -113,6 +117,8 @@ func (c *controllerCommon) getNodeVMSet(nodeName types.NodeName, crt cacheReadTy
|
|||||||
// return (lun, error)
|
// return (lun, error)
|
||||||
func (c *controllerCommon) AttachDisk(isManagedDisk bool, diskName, diskURI string, nodeName types.NodeName, cachingMode compute.CachingTypes) (int32, error) {
|
func (c *controllerCommon) AttachDisk(isManagedDisk bool, diskName, diskURI string, nodeName types.NodeName, cachingMode compute.CachingTypes) (int32, error) {
|
||||||
diskEncryptionSetID := ""
|
diskEncryptionSetID := ""
|
||||||
|
writeAcceleratorEnabled := false
|
||||||
|
|
||||||
if isManagedDisk {
|
if isManagedDisk {
|
||||||
diskName := path.Base(diskURI)
|
diskName := path.Base(diskURI)
|
||||||
resourceGroup, err := getResourceGroupFromDiskURI(diskURI)
|
resourceGroup, err := getResourceGroupFromDiskURI(diskURI)
|
||||||
@ -142,6 +148,11 @@ func (c *controllerCommon) AttachDisk(isManagedDisk bool, diskName, diskURI stri
|
|||||||
disk.DiskProperties.Encryption.DiskEncryptionSetID != nil {
|
disk.DiskProperties.Encryption.DiskEncryptionSetID != nil {
|
||||||
diskEncryptionSetID = *disk.DiskProperties.Encryption.DiskEncryptionSetID
|
diskEncryptionSetID = *disk.DiskProperties.Encryption.DiskEncryptionSetID
|
||||||
}
|
}
|
||||||
|
if v, ok := disk.Tags[WriteAcceleratorEnabled]; ok {
|
||||||
|
if v != nil && strings.EqualFold(*v, "true") {
|
||||||
|
writeAcceleratorEnabled = true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vmset, err := c.getNodeVMSet(nodeName, cacheReadTypeUnsafe)
|
vmset, err := c.getNodeVMSet(nodeName, cacheReadTypeUnsafe)
|
||||||
@ -167,7 +178,7 @@ func (c *controllerCommon) AttachDisk(isManagedDisk bool, diskName, diskURI stri
|
|||||||
klog.V(2).Infof("Trying to attach volume %q lun %d to node %q.", diskURI, lun, nodeName)
|
klog.V(2).Infof("Trying to attach volume %q lun %d to node %q.", diskURI, lun, nodeName)
|
||||||
c.diskAttachDetachMap.Store(strings.ToLower(diskURI), "attaching")
|
c.diskAttachDetachMap.Store(strings.ToLower(diskURI), "attaching")
|
||||||
defer c.diskAttachDetachMap.Delete(strings.ToLower(diskURI))
|
defer c.diskAttachDetachMap.Delete(strings.ToLower(diskURI))
|
||||||
return lun, vmset.AttachDisk(isManagedDisk, diskName, diskURI, nodeName, lun, cachingMode, diskEncryptionSetID)
|
return lun, vmset.AttachDisk(isManagedDisk, diskName, diskURI, nodeName, lun, cachingMode, diskEncryptionSetID, writeAcceleratorEnabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DetachDisk detaches a disk from host. The vhd can be identified by diskName or diskURI.
|
// DetachDisk detaches a disk from host. The vhd can be identified by diskName or diskURI.
|
||||||
|
@ -22,6 +22,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute"
|
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute"
|
||||||
|
"github.com/Azure/go-autorest/autorest/to"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
@ -29,7 +30,7 @@ import (
|
|||||||
|
|
||||||
// AttachDisk attaches a vhd to vm
|
// AttachDisk attaches a vhd to vm
|
||||||
// the vhd must exist, can be identified by diskName, diskURI, and lun.
|
// the vhd must exist, can be identified by diskName, diskURI, and lun.
|
||||||
func (as *availabilitySet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nodeName types.NodeName, lun int32, cachingMode compute.CachingTypes, diskEncryptionSetID string) error {
|
func (as *availabilitySet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nodeName types.NodeName, lun int32, cachingMode compute.CachingTypes, diskEncryptionSetID string, writeAcceleratorEnabled bool) error {
|
||||||
vm, err := as.getVirtualMachine(nodeName, cacheReadTypeDefault)
|
vm, err := as.getVirtualMachine(nodeName, cacheReadTypeDefault)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -59,11 +60,12 @@ func (as *availabilitySet) AttachDisk(isManagedDisk bool, diskName, diskURI stri
|
|||||||
}
|
}
|
||||||
disks = append(disks,
|
disks = append(disks,
|
||||||
compute.DataDisk{
|
compute.DataDisk{
|
||||||
Name: &diskName,
|
Name: &diskName,
|
||||||
Lun: &lun,
|
Lun: &lun,
|
||||||
Caching: cachingMode,
|
Caching: cachingMode,
|
||||||
CreateOption: "attach",
|
CreateOption: "attach",
|
||||||
ManagedDisk: managedDisk,
|
ManagedDisk: managedDisk,
|
||||||
|
WriteAcceleratorEnabled: to.BoolPtr(writeAcceleratorEnabled),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
disks = append(disks,
|
disks = append(disks,
|
||||||
|
@ -53,7 +53,7 @@ func TestStandardAttachDisk(t *testing.T) {
|
|||||||
setTestVirtualMachines(testCloud, map[string]string{"vm1": "PowerState/Running"}, false)
|
setTestVirtualMachines(testCloud, map[string]string{"vm1": "PowerState/Running"}, false)
|
||||||
|
|
||||||
err := vmSet.AttachDisk(true, "",
|
err := vmSet.AttachDisk(true, "",
|
||||||
"uri", test.nodeName, 0, compute.CachingTypesReadOnly, "")
|
"uri", test.nodeName, 0, compute.CachingTypesReadOnly, "", false)
|
||||||
assert.Equal(t, test.expectedErr, err != nil, "TestCase[%d]: %s, err: %v", i, test.desc, err)
|
assert.Equal(t, test.expectedErr, err != nil, "TestCase[%d]: %s, err: %v", i, test.desc, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute"
|
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute"
|
||||||
|
"github.com/Azure/go-autorest/autorest/to"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
@ -29,7 +30,7 @@ import (
|
|||||||
|
|
||||||
// AttachDisk attaches a vhd to vm
|
// AttachDisk attaches a vhd to vm
|
||||||
// the vhd must exist, can be identified by diskName, diskURI, and lun.
|
// the vhd must exist, can be identified by diskName, diskURI, and lun.
|
||||||
func (ss *scaleSet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nodeName types.NodeName, lun int32, cachingMode compute.CachingTypes, diskEncryptionSetID string) error {
|
func (ss *scaleSet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nodeName types.NodeName, lun int32, cachingMode compute.CachingTypes, diskEncryptionSetID string, writeAcceleratorEnabled bool) error {
|
||||||
vmName := mapNodeNameToVMName(nodeName)
|
vmName := mapNodeNameToVMName(nodeName)
|
||||||
ssName, instanceID, vm, err := ss.getVmssVM(vmName, cacheReadTypeDefault)
|
ssName, instanceID, vm, err := ss.getVmssVM(vmName, cacheReadTypeDefault)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -61,11 +62,12 @@ func (ss *scaleSet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nod
|
|||||||
}
|
}
|
||||||
disks = append(disks,
|
disks = append(disks,
|
||||||
compute.DataDisk{
|
compute.DataDisk{
|
||||||
Name: &diskName,
|
Name: &diskName,
|
||||||
Lun: &lun,
|
Lun: &lun,
|
||||||
Caching: compute.CachingTypes(cachingMode),
|
Caching: compute.CachingTypes(cachingMode),
|
||||||
CreateOption: "attach",
|
CreateOption: "attach",
|
||||||
ManagedDisk: managedDisk,
|
ManagedDisk: managedDisk,
|
||||||
|
WriteAcceleratorEnabled: to.BoolPtr(writeAcceleratorEnabled),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
disks = append(disks,
|
disks = append(disks,
|
||||||
|
@ -963,7 +963,7 @@ func (f *fakeVMSet) EnsureBackendPoolDeleted(service *v1.Service, backendPoolID,
|
|||||||
return fmt.Errorf("unimplemented")
|
return fmt.Errorf("unimplemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fakeVMSet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nodeName types.NodeName, lun int32, cachingMode compute.CachingTypes, diskEncryptionSetID string) error {
|
func (f *fakeVMSet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nodeName types.NodeName, lun int32, cachingMode compute.CachingTypes, diskEncryptionSetID string, writeAcceleratorEnabled bool) error {
|
||||||
return fmt.Errorf("unimplemented")
|
return fmt.Errorf("unimplemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ type VMSet interface {
|
|||||||
EnsureBackendPoolDeleted(service *v1.Service, backendPoolID, vmSetName string, backendAddressPools *[]network.BackendAddressPool) error
|
EnsureBackendPoolDeleted(service *v1.Service, backendPoolID, vmSetName string, backendAddressPools *[]network.BackendAddressPool) error
|
||||||
|
|
||||||
// AttachDisk attaches a vhd to vm. The vhd must exist, can be identified by diskName, diskURI, and lun.
|
// AttachDisk attaches a vhd to vm. The vhd must exist, can be identified by diskName, diskURI, and lun.
|
||||||
AttachDisk(isManagedDisk bool, diskName, diskURI string, nodeName types.NodeName, lun int32, cachingMode compute.CachingTypes, diskEncryptionSetID string) error
|
AttachDisk(isManagedDisk bool, diskName, diskURI string, nodeName types.NodeName, lun int32, cachingMode compute.CachingTypes, diskEncryptionSetID string, writeAcceleratorEnabled bool) error
|
||||||
// DetachDisk detaches a vhd from host. The vhd can be identified by diskName or diskURI.
|
// DetachDisk detaches a vhd from host. The vhd can be identified by diskName or diskURI.
|
||||||
DetachDisk(diskName, diskURI string, nodeName types.NodeName) error
|
DetachDisk(diskName, diskURI string, nodeName types.NodeName) error
|
||||||
// GetDataDisks gets a list of data disks attached to the node.
|
// GetDataDisks gets a list of data disks attached to the node.
|
||||||
|
Loading…
Reference in New Issue
Block a user