Merge pull request #93569 from andrewsykim/instance-v2-zone-region

cloud provider: add zone/region to InstanceMetadata
This commit is contained in:
Kubernetes Prow Robot 2020-09-10 17:14:14 -07:00 committed by GitHub
commit 1b0ef515b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 60 additions and 29 deletions

View File

@ -294,4 +294,15 @@ type InstanceMetadata struct {
// NodeAddress contains information for the instance's address.
// The node addresses returned here will be set on the node's status.addresses field.
NodeAddresses []v1.NodeAddress
// Zone is the zone that the instance is in.
// The value set here is applied as the following labels on the node:
// * topology.kubernetes.io/zone=<zone>
// * failure-domain.beta.kubernetes.io/zone=<zone> (DEPRECATED)
Zone string
// Region is the region that the instance is in.
// The value set here is applied as the following labels on the node:
// * topology.kubernetes.io/region=<region>
// * failure-domain.beta.kubernetes.io/region=<region> (DEPRECATED)
Region string
}

View File

@ -447,18 +447,41 @@ func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Co
if !ok {
return nil, fmt.Errorf("failed to get instances from cloud provider")
}
nodeAddresses, err := getNodeAddressesByProviderIDOrName(ctx, instances, providerID, nodeName)
if err != nil {
return nil, err
}
instanceType, err := getInstanceTypeByProviderIDOrName(ctx, instances, providerID, nodeName)
if err != nil {
return nil, err
}
return &cloudprovider.InstanceMetadata{
instanceMetadata := &cloudprovider.InstanceMetadata{
InstanceType: instanceType,
NodeAddresses: nodeAddresses,
}, nil
}
zones, ok := cnc.cloud.Zones()
if !ok {
return instanceMetadata, nil
}
zone, err := getZoneByProviderIDOrName(ctx, zones, providerID, node.Name)
if err != nil {
return nil, fmt.Errorf("failed to get zone from cloud provider: %v", err)
}
if zone.FailureDomain != "" {
instanceMetadata.Zone = zone.FailureDomain
}
if zone.Region != "" {
instanceMetadata.Region = zone.Region
}
return instanceMetadata, nil
}
instanceMeta, err := instanceMetadataGetter(providerID, node.Name, node)
@ -484,34 +507,29 @@ func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Co
})
}
if zones, ok := cnc.cloud.Zones(); ok {
zone, err := getZoneByProviderIDOrName(ctx, zones, providerID, node.Name)
if err != nil {
return nil, fmt.Errorf("failed to get zone from cloud provider: %v", err)
}
if zone.FailureDomain != "" {
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneFailureDomain, zone.FailureDomain)
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneFailureDomainStable, zone.FailureDomain)
nodeModifiers = append(nodeModifiers, func(n *v1.Node) {
if n.Labels == nil {
n.Labels = map[string]string{}
}
n.Labels[v1.LabelZoneFailureDomain] = zone.FailureDomain
n.Labels[v1.LabelZoneFailureDomainStable] = zone.FailureDomain
})
}
if zone.Region != "" {
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneRegion, zone.Region)
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneRegionStable, zone.Region)
nodeModifiers = append(nodeModifiers, func(n *v1.Node) {
if n.Labels == nil {
n.Labels = map[string]string{}
}
n.Labels[v1.LabelZoneRegion] = zone.Region
n.Labels[v1.LabelZoneRegionStable] = zone.Region
})
}
if instanceMeta.Zone != "" {
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneFailureDomain, instanceMeta.Zone)
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneFailureDomainStable, instanceMeta.Zone)
nodeModifiers = append(nodeModifiers, func(n *v1.Node) {
if n.Labels == nil {
n.Labels = map[string]string{}
}
n.Labels[v1.LabelZoneFailureDomain] = instanceMeta.Zone
n.Labels[v1.LabelZoneFailureDomainStable] = instanceMeta.Zone
})
}
if instanceMeta.Region != "" {
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneRegion, instanceMeta.Region)
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneRegionStable, instanceMeta.Region)
nodeModifiers = append(nodeModifiers, func(n *v1.Node) {
if n.Labels == nil {
n.Labels = map[string]string{}
}
n.Labels[v1.LabelZoneRegion] = instanceMeta.Region
n.Labels[v1.LabelZoneRegionStable] = instanceMeta.Region
})
}
return nodeModifiers, nil
}

View File

@ -325,6 +325,8 @@ func (f *Cloud) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloudprov
ProviderID: node.Spec.ProviderID,
InstanceType: f.InstanceTypes[types.NodeName(node.Spec.ProviderID)],
NodeAddresses: f.Addresses,
Zone: f.Zone.FailureDomain,
Region: f.Zone.Region,
}, f.Err
}