Skip to content

Commit 1b0ef51

Browse files
authored
Merge pull request kubernetes#93569 from andrewsykim/instance-v2-zone-region
cloud provider: add zone/region to InstanceMetadata
2 parents 1b5802f + d274971 commit 1b0ef51

File tree

3 files changed

+60
-29
lines changed

3 files changed

+60
-29
lines changed

staging/src/k8s.io/cloud-provider/cloud.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,4 +294,15 @@ type InstanceMetadata struct {
294294
// NodeAddress contains information for the instance's address.
295295
// The node addresses returned here will be set on the node's status.addresses field.
296296
NodeAddresses []v1.NodeAddress
297+
298+
// Zone is the zone that the instance is in.
299+
// The value set here is applied as the following labels on the node:
300+
// * topology.kubernetes.io/zone=<zone>
301+
// * failure-domain.beta.kubernetes.io/zone=<zone> (DEPRECATED)
302+
Zone string
303+
// Region is the region that the instance is in.
304+
// The value set here is applied as the following labels on the node:
305+
// * topology.kubernetes.io/region=<region>
306+
// * failure-domain.beta.kubernetes.io/region=<region> (DEPRECATED)
307+
Region string
297308
}

staging/src/k8s.io/cloud-provider/controllers/node/node_controller.go

Lines changed: 47 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -447,18 +447,41 @@ func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Co
447447
if !ok {
448448
return nil, fmt.Errorf("failed to get instances from cloud provider")
449449
}
450+
450451
nodeAddresses, err := getNodeAddressesByProviderIDOrName(ctx, instances, providerID, nodeName)
451452
if err != nil {
452453
return nil, err
453454
}
455+
454456
instanceType, err := getInstanceTypeByProviderIDOrName(ctx, instances, providerID, nodeName)
455457
if err != nil {
456458
return nil, err
457459
}
458-
return &cloudprovider.InstanceMetadata{
460+
461+
instanceMetadata := &cloudprovider.InstanceMetadata{
459462
InstanceType: instanceType,
460463
NodeAddresses: nodeAddresses,
461-
}, nil
464+
}
465+
466+
zones, ok := cnc.cloud.Zones()
467+
if !ok {
468+
return instanceMetadata, nil
469+
}
470+
471+
zone, err := getZoneByProviderIDOrName(ctx, zones, providerID, node.Name)
472+
if err != nil {
473+
return nil, fmt.Errorf("failed to get zone from cloud provider: %v", err)
474+
}
475+
476+
if zone.FailureDomain != "" {
477+
instanceMetadata.Zone = zone.FailureDomain
478+
}
479+
480+
if zone.Region != "" {
481+
instanceMetadata.Region = zone.Region
482+
}
483+
484+
return instanceMetadata, nil
462485
}
463486

464487
instanceMeta, err := instanceMetadataGetter(providerID, node.Name, node)
@@ -484,34 +507,29 @@ func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Co
484507
})
485508
}
486509

487-
if zones, ok := cnc.cloud.Zones(); ok {
488-
zone, err := getZoneByProviderIDOrName(ctx, zones, providerID, node.Name)
489-
if err != nil {
490-
return nil, fmt.Errorf("failed to get zone from cloud provider: %v", err)
491-
}
492-
if zone.FailureDomain != "" {
493-
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneFailureDomain, zone.FailureDomain)
494-
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneFailureDomainStable, zone.FailureDomain)
495-
nodeModifiers = append(nodeModifiers, func(n *v1.Node) {
496-
if n.Labels == nil {
497-
n.Labels = map[string]string{}
498-
}
499-
n.Labels[v1.LabelZoneFailureDomain] = zone.FailureDomain
500-
n.Labels[v1.LabelZoneFailureDomainStable] = zone.FailureDomain
501-
})
502-
}
503-
if zone.Region != "" {
504-
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneRegion, zone.Region)
505-
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneRegionStable, zone.Region)
506-
nodeModifiers = append(nodeModifiers, func(n *v1.Node) {
507-
if n.Labels == nil {
508-
n.Labels = map[string]string{}
509-
}
510-
n.Labels[v1.LabelZoneRegion] = zone.Region
511-
n.Labels[v1.LabelZoneRegionStable] = zone.Region
512-
})
513-
}
510+
if instanceMeta.Zone != "" {
511+
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneFailureDomain, instanceMeta.Zone)
512+
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneFailureDomainStable, instanceMeta.Zone)
513+
nodeModifiers = append(nodeModifiers, func(n *v1.Node) {
514+
if n.Labels == nil {
515+
n.Labels = map[string]string{}
516+
}
517+
n.Labels[v1.LabelZoneFailureDomain] = instanceMeta.Zone
518+
n.Labels[v1.LabelZoneFailureDomainStable] = instanceMeta.Zone
519+
})
514520
}
521+
if instanceMeta.Region != "" {
522+
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneRegion, instanceMeta.Region)
523+
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneRegionStable, instanceMeta.Region)
524+
nodeModifiers = append(nodeModifiers, func(n *v1.Node) {
525+
if n.Labels == nil {
526+
n.Labels = map[string]string{}
527+
}
528+
n.Labels[v1.LabelZoneRegion] = instanceMeta.Region
529+
n.Labels[v1.LabelZoneRegionStable] = instanceMeta.Region
530+
})
531+
}
532+
515533
return nodeModifiers, nil
516534
}
517535

staging/src/k8s.io/cloud-provider/fake/fake.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,8 @@ func (f *Cloud) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloudprov
325325
ProviderID: node.Spec.ProviderID,
326326
InstanceType: f.InstanceTypes[types.NodeName(node.Spec.ProviderID)],
327327
NodeAddresses: f.Addresses,
328+
Zone: f.Zone.FailureDomain,
329+
Region: f.Zone.Region,
328330
}, f.Err
329331
}
330332

0 commit comments

Comments
 (0)