mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 12:43:23 +00:00
cloud provider: add zone/region to InstanceMetadata
The existing Zones interface was mainly created for the kubelet to interface with a local metadata server to fetch a node's zone and region. With external cloud providers, it makes more sense for the zone/region logic to be coupled to the Instances interface. This commit adds zone/region information to the recently added InstanceMetadata type we're using as part of the new InstancesV2 interface in the cloud provider. Signed-off-by: Andrew Sy Kim <kim.andrewsy@gmail.com>
This commit is contained in:
parent
f5334fad48
commit
d274971ff9
@ -294,4 +294,15 @@ type InstanceMetadata struct {
|
|||||||
// NodeAddress contains information for the instance's address.
|
// NodeAddress contains information for the instance's address.
|
||||||
// The node addresses returned here will be set on the node's status.addresses field.
|
// The node addresses returned here will be set on the node's status.addresses field.
|
||||||
NodeAddresses []v1.NodeAddress
|
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
|
||||||
}
|
}
|
||||||
|
@ -447,18 +447,41 @@ func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Co
|
|||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("failed to get instances from cloud provider")
|
return nil, fmt.Errorf("failed to get instances from cloud provider")
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeAddresses, err := getNodeAddressesByProviderIDOrName(ctx, instances, providerID, nodeName)
|
nodeAddresses, err := getNodeAddressesByProviderIDOrName(ctx, instances, providerID, nodeName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
instanceType, err := getInstanceTypeByProviderIDOrName(ctx, instances, providerID, nodeName)
|
instanceType, err := getInstanceTypeByProviderIDOrName(ctx, instances, providerID, nodeName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &cloudprovider.InstanceMetadata{
|
|
||||||
|
instanceMetadata := &cloudprovider.InstanceMetadata{
|
||||||
InstanceType: instanceType,
|
InstanceType: instanceType,
|
||||||
NodeAddresses: nodeAddresses,
|
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)
|
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 {
|
if instanceMeta.Zone != "" {
|
||||||
zone, err := getZoneByProviderIDOrName(ctx, zones, providerID, node.Name)
|
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneFailureDomain, instanceMeta.Zone)
|
||||||
if err != nil {
|
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelZoneFailureDomainStable, instanceMeta.Zone)
|
||||||
return nil, fmt.Errorf("failed to get zone from cloud provider: %v", err)
|
nodeModifiers = append(nodeModifiers, func(n *v1.Node) {
|
||||||
}
|
if n.Labels == nil {
|
||||||
if zone.FailureDomain != "" {
|
n.Labels = map[string]string{}
|
||||||
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)
|
n.Labels[v1.LabelZoneFailureDomain] = instanceMeta.Zone
|
||||||
nodeModifiers = append(nodeModifiers, func(n *v1.Node) {
|
n.Labels[v1.LabelZoneFailureDomainStable] = instanceMeta.Zone
|
||||||
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.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
|
return nodeModifiers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -325,6 +325,8 @@ func (f *Cloud) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloudprov
|
|||||||
ProviderID: node.Spec.ProviderID,
|
ProviderID: node.Spec.ProviderID,
|
||||||
InstanceType: f.InstanceTypes[types.NodeName(node.Spec.ProviderID)],
|
InstanceType: f.InstanceTypes[types.NodeName(node.Spec.ProviderID)],
|
||||||
NodeAddresses: f.Addresses,
|
NodeAddresses: f.Addresses,
|
||||||
|
Zone: f.Zone.FailureDomain,
|
||||||
|
Region: f.Zone.Region,
|
||||||
}, f.Err
|
}, f.Err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user