mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 19:31:44 +00:00
Merge pull request #101534 from kassarl/issue-98281
Use GA topology labels for Azuredisk
This commit is contained in:
commit
160cdbbdca
@ -361,19 +361,19 @@ func (p *azureDiskProvisioner) Provision(selectedNode *v1.Node, allowedTopologie
|
||||
})
|
||||
}
|
||||
} else {
|
||||
// Set node affinity labels based on fault domains.
|
||||
// Set node affinity labels based on topology.
|
||||
// This is required because unzoned AzureDisk can't be attached to zoned nodes.
|
||||
// There are at most 3 fault domains available in each region.
|
||||
// There are at most 3 Availability Zones per supported Azure region.
|
||||
// Refer https://docs.microsoft.com/en-us/azure/virtual-machines/windows/manage-availability.
|
||||
for i := 0; i < 3; i++ {
|
||||
requirements := []v1.NodeSelectorRequirement{
|
||||
{
|
||||
Key: v1.LabelFailureDomainBetaRegion,
|
||||
Key: v1.LabelTopologyRegion,
|
||||
Operator: v1.NodeSelectorOpIn,
|
||||
Values: []string{diskController.GetLocation()},
|
||||
},
|
||||
{
|
||||
Key: v1.LabelFailureDomainBetaZone,
|
||||
Key: v1.LabelTopologyZone,
|
||||
Operator: v1.NodeSelectorOpIn,
|
||||
Values: []string{strconv.Itoa(i)},
|
||||
},
|
||||
|
@ -269,6 +269,11 @@ func TestTranslateInTreeStorageClassToCSI(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "some translated topology",
|
||||
options: NewStorageClass(map[string]string{}, generateToplogySelectors(v1.LabelTopologyZone, []string{"foo"})),
|
||||
expOptions: NewStorageClass(map[string]string{}, generateToplogySelectors(AzureDiskTopologyKey, []string{"foo"})),
|
||||
},
|
||||
{
|
||||
name: "some translated topology with beta labels",
|
||||
options: NewStorageClass(map[string]string{}, generateToplogySelectors(v1.LabelFailureDomainBetaZone, []string{"foo"})),
|
||||
expOptions: NewStorageClass(map[string]string{}, generateToplogySelectors(AzureDiskTopologyKey, []string{"foo"})),
|
||||
},
|
||||
|
@ -92,12 +92,6 @@ const (
|
||||
|
||||
externalResourceGroupLabel = "kubernetes.azure.com/resource-group"
|
||||
managedByAzureLabel = "kubernetes.azure.com/managed"
|
||||
|
||||
// LabelFailureDomainBetaZone refer to https://github.com/kubernetes/api/blob/8519c5ea46199d57724725d5b969c5e8e0533692/core/v1/well_known_labels.go#L22-L23
|
||||
LabelFailureDomainBetaZone = "failure-domain.beta.kubernetes.io/zone"
|
||||
|
||||
// LabelFailureDomainBetaRegion failure-domain region label
|
||||
LabelFailureDomainBetaRegion = "failure-domain.beta.kubernetes.io/region"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -751,8 +745,12 @@ func (az *Cloud) SetInformers(informerFactory informers.SharedInformerFactory) {
|
||||
UpdateFunc: func(prev, obj interface{}) {
|
||||
prevNode := prev.(*v1.Node)
|
||||
newNode := obj.(*v1.Node)
|
||||
if newNode.Labels[LabelFailureDomainBetaZone] ==
|
||||
prevNode.Labels[LabelFailureDomainBetaZone] {
|
||||
if newNode.Labels[v1.LabelFailureDomainBetaZone] ==
|
||||
prevNode.Labels[v1.LabelFailureDomainBetaZone] {
|
||||
return
|
||||
}
|
||||
if newNode.Labels[v1.LabelTopologyZone] ==
|
||||
prevNode.Labels[v1.LabelTopologyZone] {
|
||||
return
|
||||
}
|
||||
az.updateNodeCaches(prevNode, newNode)
|
||||
@ -785,11 +783,13 @@ func (az *Cloud) updateNodeCaches(prevNode, newNode *v1.Node) {
|
||||
defer az.nodeCachesLock.Unlock()
|
||||
|
||||
if prevNode != nil {
|
||||
|
||||
// Remove from nodeNames cache.
|
||||
az.nodeNames.Delete(prevNode.ObjectMeta.Name)
|
||||
|
||||
// Remove from nodeZones cache.
|
||||
prevZone, ok := prevNode.ObjectMeta.Labels[LabelFailureDomainBetaZone]
|
||||
// Remove from nodeZones cache
|
||||
prevZone, ok := prevNode.ObjectMeta.Labels[v1.LabelTopologyZone]
|
||||
|
||||
if ok && az.isAvailabilityZone(prevZone) {
|
||||
az.nodeZones[prevZone].Delete(prevNode.ObjectMeta.Name)
|
||||
if az.nodeZones[prevZone].Len() == 0 {
|
||||
@ -797,6 +797,15 @@ func (az *Cloud) updateNodeCaches(prevNode, newNode *v1.Node) {
|
||||
}
|
||||
}
|
||||
|
||||
//Remove from nodeZones cache if using depreciated LabelFailureDomainBetaZone
|
||||
prevZoneFailureDomain, ok := prevNode.ObjectMeta.Labels[v1.LabelFailureDomainBetaZone]
|
||||
if ok && az.isAvailabilityZone(prevZoneFailureDomain) {
|
||||
az.nodeZones[prevZone].Delete(prevNode.ObjectMeta.Name)
|
||||
if az.nodeZones[prevZone].Len() == 0 {
|
||||
az.nodeZones[prevZone] = nil
|
||||
}
|
||||
}
|
||||
|
||||
// Remove from nodeResourceGroups cache.
|
||||
_, ok = prevNode.ObjectMeta.Labels[externalResourceGroupLabel]
|
||||
if ok {
|
||||
@ -815,7 +824,7 @@ func (az *Cloud) updateNodeCaches(prevNode, newNode *v1.Node) {
|
||||
az.nodeNames.Insert(newNode.ObjectMeta.Name)
|
||||
|
||||
// Add to nodeZones cache.
|
||||
newZone, ok := newNode.ObjectMeta.Labels[LabelFailureDomainBetaZone]
|
||||
newZone, ok := newNode.ObjectMeta.Labels[v1.LabelTopologyZone]
|
||||
if ok && az.isAvailabilityZone(newZone) {
|
||||
if az.nodeZones[newZone] == nil {
|
||||
az.nodeZones[newZone] = sets.NewString()
|
||||
|
@ -355,7 +355,7 @@ func (c *Cloud) GetAzureDiskLabels(diskURI string) (map[string]string, error) {
|
||||
}
|
||||
|
||||
labels := map[string]string{
|
||||
LabelFailureDomainBetaRegion: c.Location,
|
||||
v1.LabelTopologyRegion: c.Location,
|
||||
}
|
||||
// no azure credential is set, return nil
|
||||
if c.DisksClient == nil {
|
||||
@ -384,6 +384,6 @@ func (c *Cloud) GetAzureDiskLabels(diskURI string) (map[string]string, error) {
|
||||
|
||||
zone := c.makeZone(c.Location, zoneID)
|
||||
klog.V(4).Infof("Got zone %q for Azure disk %q", zone, diskName)
|
||||
labels[LabelFailureDomainBetaZone] = zone
|
||||
labels[v1.LabelTopologyZone] = zone
|
||||
return labels, nil
|
||||
}
|
||||
|
@ -427,8 +427,8 @@ func TestGetLabelsForVolume(t *testing.T) {
|
||||
},
|
||||
existedDisk: compute.Disk{Name: to.StringPtr(diskName), DiskProperties: &compute.DiskProperties{DiskSizeGB: &diskSizeGB}, Zones: &[]string{"1"}},
|
||||
expected: map[string]string{
|
||||
LabelFailureDomainBetaRegion: testCloud0.Location,
|
||||
LabelFailureDomainBetaZone: testCloud0.makeZone(testCloud0.Location, 1),
|
||||
v1.LabelTopologyRegion: testCloud0.Location,
|
||||
v1.LabelTopologyZone: testCloud0.makeZone(testCloud0.Location, 1),
|
||||
},
|
||||
expectedErr: false,
|
||||
},
|
||||
@ -464,7 +464,7 @@ func TestGetLabelsForVolume(t *testing.T) {
|
||||
},
|
||||
existedDisk: compute.Disk{Name: to.StringPtr(diskName), DiskProperties: &compute.DiskProperties{DiskSizeGB: &diskSizeGB}},
|
||||
expected: map[string]string{
|
||||
LabelFailureDomainBetaRegion: testCloud0.Location,
|
||||
v1.LabelTopologyRegion: testCloud0.Location,
|
||||
},
|
||||
expectedErr: false,
|
||||
expectedErrMsg: nil,
|
||||
|
@ -3249,9 +3249,10 @@ func TestUpdateNodeCaches(t *testing.T) {
|
||||
prevNode := v1.Node{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Labels: map[string]string{
|
||||
LabelFailureDomainBetaZone: zone,
|
||||
externalResourceGroupLabel: "true",
|
||||
managedByAzureLabel: "false",
|
||||
v1.LabelFailureDomainBetaZone: zone,
|
||||
v1.LabelTopologyZone: zone,
|
||||
externalResourceGroupLabel: "true",
|
||||
managedByAzureLabel: "false",
|
||||
},
|
||||
Name: "prevNode",
|
||||
},
|
||||
@ -3266,7 +3267,7 @@ func TestUpdateNodeCaches(t *testing.T) {
|
||||
newNode := v1.Node{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Labels: map[string]string{
|
||||
LabelFailureDomainBetaZone: zone,
|
||||
v1.LabelTopologyZone: zone,
|
||||
externalResourceGroupLabel: "true",
|
||||
managedByAzureLabel: "false",
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user