mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +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 {
|
} 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.
|
// 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.
|
// Refer https://docs.microsoft.com/en-us/azure/virtual-machines/windows/manage-availability.
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 3; i++ {
|
||||||
requirements := []v1.NodeSelectorRequirement{
|
requirements := []v1.NodeSelectorRequirement{
|
||||||
{
|
{
|
||||||
Key: v1.LabelFailureDomainBetaRegion,
|
Key: v1.LabelTopologyRegion,
|
||||||
Operator: v1.NodeSelectorOpIn,
|
Operator: v1.NodeSelectorOpIn,
|
||||||
Values: []string{diskController.GetLocation()},
|
Values: []string{diskController.GetLocation()},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Key: v1.LabelFailureDomainBetaZone,
|
Key: v1.LabelTopologyZone,
|
||||||
Operator: v1.NodeSelectorOpIn,
|
Operator: v1.NodeSelectorOpIn,
|
||||||
Values: []string{strconv.Itoa(i)},
|
Values: []string{strconv.Itoa(i)},
|
||||||
},
|
},
|
||||||
|
@ -269,6 +269,11 @@ func TestTranslateInTreeStorageClassToCSI(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "some translated topology",
|
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"})),
|
options: NewStorageClass(map[string]string{}, generateToplogySelectors(v1.LabelFailureDomainBetaZone, []string{"foo"})),
|
||||||
expOptions: NewStorageClass(map[string]string{}, generateToplogySelectors(AzureDiskTopologyKey, []string{"foo"})),
|
expOptions: NewStorageClass(map[string]string{}, generateToplogySelectors(AzureDiskTopologyKey, []string{"foo"})),
|
||||||
},
|
},
|
||||||
|
@ -92,12 +92,6 @@ const (
|
|||||||
|
|
||||||
externalResourceGroupLabel = "kubernetes.azure.com/resource-group"
|
externalResourceGroupLabel = "kubernetes.azure.com/resource-group"
|
||||||
managedByAzureLabel = "kubernetes.azure.com/managed"
|
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 (
|
const (
|
||||||
@ -751,8 +745,12 @@ func (az *Cloud) SetInformers(informerFactory informers.SharedInformerFactory) {
|
|||||||
UpdateFunc: func(prev, obj interface{}) {
|
UpdateFunc: func(prev, obj interface{}) {
|
||||||
prevNode := prev.(*v1.Node)
|
prevNode := prev.(*v1.Node)
|
||||||
newNode := obj.(*v1.Node)
|
newNode := obj.(*v1.Node)
|
||||||
if newNode.Labels[LabelFailureDomainBetaZone] ==
|
if newNode.Labels[v1.LabelFailureDomainBetaZone] ==
|
||||||
prevNode.Labels[LabelFailureDomainBetaZone] {
|
prevNode.Labels[v1.LabelFailureDomainBetaZone] {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if newNode.Labels[v1.LabelTopologyZone] ==
|
||||||
|
prevNode.Labels[v1.LabelTopologyZone] {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
az.updateNodeCaches(prevNode, newNode)
|
az.updateNodeCaches(prevNode, newNode)
|
||||||
@ -785,11 +783,13 @@ func (az *Cloud) updateNodeCaches(prevNode, newNode *v1.Node) {
|
|||||||
defer az.nodeCachesLock.Unlock()
|
defer az.nodeCachesLock.Unlock()
|
||||||
|
|
||||||
if prevNode != nil {
|
if prevNode != nil {
|
||||||
|
|
||||||
// Remove from nodeNames cache.
|
// Remove from nodeNames cache.
|
||||||
az.nodeNames.Delete(prevNode.ObjectMeta.Name)
|
az.nodeNames.Delete(prevNode.ObjectMeta.Name)
|
||||||
|
|
||||||
// Remove from nodeZones cache.
|
// Remove from nodeZones cache
|
||||||
prevZone, ok := prevNode.ObjectMeta.Labels[LabelFailureDomainBetaZone]
|
prevZone, ok := prevNode.ObjectMeta.Labels[v1.LabelTopologyZone]
|
||||||
|
|
||||||
if ok && az.isAvailabilityZone(prevZone) {
|
if ok && az.isAvailabilityZone(prevZone) {
|
||||||
az.nodeZones[prevZone].Delete(prevNode.ObjectMeta.Name)
|
az.nodeZones[prevZone].Delete(prevNode.ObjectMeta.Name)
|
||||||
if az.nodeZones[prevZone].Len() == 0 {
|
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.
|
// Remove from nodeResourceGroups cache.
|
||||||
_, ok = prevNode.ObjectMeta.Labels[externalResourceGroupLabel]
|
_, ok = prevNode.ObjectMeta.Labels[externalResourceGroupLabel]
|
||||||
if ok {
|
if ok {
|
||||||
@ -815,7 +824,7 @@ func (az *Cloud) updateNodeCaches(prevNode, newNode *v1.Node) {
|
|||||||
az.nodeNames.Insert(newNode.ObjectMeta.Name)
|
az.nodeNames.Insert(newNode.ObjectMeta.Name)
|
||||||
|
|
||||||
// Add to nodeZones cache.
|
// Add to nodeZones cache.
|
||||||
newZone, ok := newNode.ObjectMeta.Labels[LabelFailureDomainBetaZone]
|
newZone, ok := newNode.ObjectMeta.Labels[v1.LabelTopologyZone]
|
||||||
if ok && az.isAvailabilityZone(newZone) {
|
if ok && az.isAvailabilityZone(newZone) {
|
||||||
if az.nodeZones[newZone] == nil {
|
if az.nodeZones[newZone] == nil {
|
||||||
az.nodeZones[newZone] = sets.NewString()
|
az.nodeZones[newZone] = sets.NewString()
|
||||||
|
@ -355,7 +355,7 @@ func (c *Cloud) GetAzureDiskLabels(diskURI string) (map[string]string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
labels := map[string]string{
|
labels := map[string]string{
|
||||||
LabelFailureDomainBetaRegion: c.Location,
|
v1.LabelTopologyRegion: c.Location,
|
||||||
}
|
}
|
||||||
// no azure credential is set, return nil
|
// no azure credential is set, return nil
|
||||||
if c.DisksClient == 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)
|
zone := c.makeZone(c.Location, zoneID)
|
||||||
klog.V(4).Infof("Got zone %q for Azure disk %q", zone, diskName)
|
klog.V(4).Infof("Got zone %q for Azure disk %q", zone, diskName)
|
||||||
labels[LabelFailureDomainBetaZone] = zone
|
labels[v1.LabelTopologyZone] = zone
|
||||||
return labels, nil
|
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"}},
|
existedDisk: compute.Disk{Name: to.StringPtr(diskName), DiskProperties: &compute.DiskProperties{DiskSizeGB: &diskSizeGB}, Zones: &[]string{"1"}},
|
||||||
expected: map[string]string{
|
expected: map[string]string{
|
||||||
LabelFailureDomainBetaRegion: testCloud0.Location,
|
v1.LabelTopologyRegion: testCloud0.Location,
|
||||||
LabelFailureDomainBetaZone: testCloud0.makeZone(testCloud0.Location, 1),
|
v1.LabelTopologyZone: testCloud0.makeZone(testCloud0.Location, 1),
|
||||||
},
|
},
|
||||||
expectedErr: false,
|
expectedErr: false,
|
||||||
},
|
},
|
||||||
@ -464,7 +464,7 @@ func TestGetLabelsForVolume(t *testing.T) {
|
|||||||
},
|
},
|
||||||
existedDisk: compute.Disk{Name: to.StringPtr(diskName), DiskProperties: &compute.DiskProperties{DiskSizeGB: &diskSizeGB}},
|
existedDisk: compute.Disk{Name: to.StringPtr(diskName), DiskProperties: &compute.DiskProperties{DiskSizeGB: &diskSizeGB}},
|
||||||
expected: map[string]string{
|
expected: map[string]string{
|
||||||
LabelFailureDomainBetaRegion: testCloud0.Location,
|
v1.LabelTopologyRegion: testCloud0.Location,
|
||||||
},
|
},
|
||||||
expectedErr: false,
|
expectedErr: false,
|
||||||
expectedErrMsg: nil,
|
expectedErrMsg: nil,
|
||||||
|
@ -3249,9 +3249,10 @@ func TestUpdateNodeCaches(t *testing.T) {
|
|||||||
prevNode := v1.Node{
|
prevNode := v1.Node{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Labels: map[string]string{
|
Labels: map[string]string{
|
||||||
LabelFailureDomainBetaZone: zone,
|
v1.LabelFailureDomainBetaZone: zone,
|
||||||
externalResourceGroupLabel: "true",
|
v1.LabelTopologyZone: zone,
|
||||||
managedByAzureLabel: "false",
|
externalResourceGroupLabel: "true",
|
||||||
|
managedByAzureLabel: "false",
|
||||||
},
|
},
|
||||||
Name: "prevNode",
|
Name: "prevNode",
|
||||||
},
|
},
|
||||||
@ -3266,7 +3267,7 @@ func TestUpdateNodeCaches(t *testing.T) {
|
|||||||
newNode := v1.Node{
|
newNode := v1.Node{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Labels: map[string]string{
|
Labels: map[string]string{
|
||||||
LabelFailureDomainBetaZone: zone,
|
v1.LabelTopologyZone: zone,
|
||||||
externalResourceGroupLabel: "true",
|
externalResourceGroupLabel: "true",
|
||||||
managedByAzureLabel: "false",
|
managedByAzureLabel: "false",
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user