Skip to content

Commit c762dc5

Browse files
tootoonchianalexzielenski
authored andcommitted
Use ProviderID to map k8s nodeName to Azure VMs.
This patch allows Kubernetes nodeName to be different from osProfile.computerName.
1 parent 22a9682 commit c762dc5

File tree

7 files changed

+39
-17
lines changed

7 files changed

+39
-17
lines changed

staging/src/k8s.io/legacy-cloud-providers/azure/azure.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,8 @@ type Cloud struct {
275275
// nodeZones is a mapping from Zone to a sets.String of Node's names in the Zone
276276
// it is updated by the nodeInformer
277277
nodeZones map[string]sets.String
278+
// nodeProvidersIDs maps kube node name to its Azure ProviderID
279+
nodeProviderIDs map[string]string
278280
// nodeResourceGroups holds nodes external resource groups
279281
nodeResourceGroups map[string]string
280282
// unmanagedNodes holds a list of nodes not managed by Azure cloud provider.
@@ -344,6 +346,7 @@ func NewCloudWithoutFeatureGates(configReader io.Reader) (*Cloud, error) {
344346
az := &Cloud{
345347
nodeNames: sets.NewString(),
346348
nodeZones: map[string]sets.String{},
349+
nodeProviderIDs: map[string]string{},
347350
nodeResourceGroups: map[string]string{},
348351
unmanagedNodes: sets.NewString(),
349352
excludeLoadBalancerNodes: sets.NewString(),
@@ -803,6 +806,11 @@ func (az *Cloud) updateNodeCaches(prevNode, newNode *v1.Node) {
803806
}
804807
}
805808

809+
// Remove from nodeProviderIDs cache.
810+
if len(prevNode.Spec.ProviderID) != 0 {
811+
delete(az.nodeProviderIDs, prevNode.ObjectMeta.Name)
812+
}
813+
806814
// Remove from nodeResourceGroups cache.
807815
_, ok = prevNode.ObjectMeta.Labels[externalResourceGroupLabel]
808816
if ok {
@@ -836,6 +844,11 @@ func (az *Cloud) updateNodeCaches(prevNode, newNode *v1.Node) {
836844
az.nodeZones[newZone].Insert(newNode.ObjectMeta.Name)
837845
}
838846

847+
// Add to nodeProviderIDs cache.
848+
if len(newNode.Spec.ProviderID) != 0 {
849+
az.nodeProviderIDs[newNode.ObjectMeta.Name] = newNode.Spec.ProviderID
850+
}
851+
839852
// Add to nodeResourceGroups cache.
840853
newRG, ok := newNode.ObjectMeta.Labels[externalResourceGroupLabel]
841854
if ok && len(newRG) > 0 {

staging/src/k8s.io/legacy-cloud-providers/azure/azure_controller_common.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func (c *controllerCommon) getNodeVMSet(nodeName types.NodeName, crt azcache.Azu
107107
}
108108

109109
// 3. If the node is managed by availability set, then return ss.availabilitySet.
110-
managedByAS, err := ss.isNodeManagedByAvailabilitySet(mapNodeNameToVMName(nodeName), crt)
110+
managedByAS, err := ss.isNodeManagedByAvailabilitySet(c.cloud.mapNodeNameToVMName(nodeName), crt)
111111
if err != nil {
112112
return nil, err
113113
}

staging/src/k8s.io/legacy-cloud-providers/azure/azure_controller_standard.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func (as *availabilitySet) AttachDisk(isManagedDisk bool, diskName, diskURI stri
3939
return err
4040
}
4141

42-
vmName := mapNodeNameToVMName(nodeName)
42+
vmName := as.Cloud.mapNodeNameToVMName(nodeName)
4343
nodeResourceGroup, err := as.GetNodeResourceGroup(vmName)
4444
if err != nil {
4545
return err
@@ -126,7 +126,7 @@ func (as *availabilitySet) DetachDisk(diskName, diskURI string, nodeName types.N
126126
return nil
127127
}
128128

129-
vmName := mapNodeNameToVMName(nodeName)
129+
vmName := as.Cloud.mapNodeNameToVMName(nodeName)
130130
nodeResourceGroup, err := as.GetNodeResourceGroup(vmName)
131131
if err != nil {
132132
return err

staging/src/k8s.io/legacy-cloud-providers/azure/azure_controller_vmss.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import (
3434
// AttachDisk attaches a vhd to vm
3535
// the vhd must exist, can be identified by diskName, diskURI, and lun.
3636
func (ss *scaleSet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nodeName types.NodeName, lun int32, cachingMode compute.CachingTypes, diskEncryptionSetID string, writeAcceleratorEnabled bool) error {
37-
vmName := mapNodeNameToVMName(nodeName)
37+
vmName := ss.Cloud.mapNodeNameToVMName(nodeName)
3838
ssName, instanceID, vm, err := ss.getVmssVM(vmName, azcache.CacheReadTypeDefault)
3939
if err != nil {
4040
return err
@@ -121,7 +121,7 @@ func (ss *scaleSet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nod
121121
// DetachDisk detaches a disk from host
122122
// the vhd can be identified by diskName or diskURI
123123
func (ss *scaleSet) DetachDisk(diskName, diskURI string, nodeName types.NodeName) error {
124-
vmName := mapNodeNameToVMName(nodeName)
124+
vmName := ss.Cloud.mapNodeNameToVMName(nodeName)
125125
ssName, instanceID, vm, err := ss.getVmssVM(vmName, azcache.CacheReadTypeDefault)
126126
if err != nil {
127127
return err

staging/src/k8s.io/legacy-cloud-providers/azure/azure_instances.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ func (az *Cloud) InstanceShutdownByProviderID(ctx context.Context, providerID st
257257

258258
func (az *Cloud) isCurrentInstance(name types.NodeName, metadataVMName string) (bool, error) {
259259
var err error
260-
nodeName := mapNodeNameToVMName(name)
260+
nodeName := az.mapNodeNameToVMName(name)
261261

262262
// VMSS vmName is not same with hostname, use hostname instead.
263263
if az.VMType == vmTypeVMSS {
@@ -280,7 +280,7 @@ func (az *Cloud) isCurrentInstance(name types.NodeName, metadataVMName string) (
280280
// InstanceID returns the cloud provider ID of the specified instance.
281281
// Note that if the instance does not exist or is no longer running, we must return ("", cloudprovider.InstanceNotFound)
282282
func (az *Cloud) InstanceID(ctx context.Context, name types.NodeName) (string, error) {
283-
nodeName := mapNodeNameToVMName(name)
283+
nodeName := az.mapNodeNameToVMName(name)
284284
unmanaged, err := az.IsNodeUnmanaged(nodeName)
285285
if err != nil {
286286
return "", err
@@ -425,8 +425,15 @@ func (az *Cloud) CurrentNodeName(ctx context.Context, hostname string) (types.No
425425
return types.NodeName(hostname), nil
426426
}
427427

428-
// mapNodeNameToVMName maps a k8s NodeName to an Azure VM Name
429-
// This is a simple string cast.
430-
func mapNodeNameToVMName(nodeName types.NodeName) string {
431-
return string(nodeName)
428+
// mapNodeNameToVMName maps a k8s NodeName to an Azure VM Name using providerID.
429+
func (az *Cloud) mapNodeNameToVMName(nodeName types.NodeName) string {
430+
vmName := string(nodeName)
431+
providerID, ok := az.nodeProviderIDs[vmName]
432+
if ok {
433+
if name, err := az.VMSet.GetNodeNameByProviderID(providerID); err == nil {
434+
vmName = string(name)
435+
}
436+
}
437+
438+
return vmName
432439
}

staging/src/k8s.io/legacy-cloud-providers/azure/azure_standard.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -818,7 +818,7 @@ func (as *availabilitySet) getPrimaryInterfaceWithVMSet(nodeName, vmSetName stri
818818
// EnsureHostInPool ensures the given VM's Primary NIC's Primary IP Configuration is
819819
// participating in the specified LoadBalancer Backend Pool.
820820
func (as *availabilitySet) EnsureHostInPool(service *v1.Service, nodeName types.NodeName, backendPoolID string, vmSetName string, isInternal bool) (string, string, string, *compute.VirtualMachineScaleSetVM, error) {
821-
vmName := mapNodeNameToVMName(nodeName)
821+
vmName := as.Cloud.mapNodeNameToVMName(nodeName)
822822
serviceName := getServiceName(service)
823823
nic, _, err := as.getPrimaryInterfaceWithVMSet(vmName, vmSetName)
824824
if err != nil {
@@ -989,7 +989,7 @@ func (as *availabilitySet) EnsureBackendPoolDeleted(service *v1.Service, backend
989989
continue
990990
}
991991

992-
vmName := mapNodeNameToVMName(types.NodeName(nodeName))
992+
vmName := as.Cloud.mapNodeNameToVMName(types.NodeName(nodeName))
993993
nic, vmasID, err := as.getPrimaryInterfaceWithVMSet(vmName, vmSetName)
994994
if err != nil {
995995
if err == errNotInVMSet {

staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -695,11 +695,13 @@ func (ss *scaleSet) getNodeIdentityByNodeName(nodeName string, crt azcache.Azure
695695
return node, nil
696696
}
697697

698-
if _, err := getScaleSetVMInstanceID(nodeName); err != nil {
698+
vmName := ss.Cloud.mapNodeNameToVMName(types.NodeName(nodeName))
699+
700+
if _, err := getScaleSetVMInstanceID(vmName); err != nil {
699701
return nil, err
700702
}
701703

702-
node, err := getter(nodeName, crt)
704+
node, err := getter(vmName, crt)
703705
if err != nil {
704706
return nil, err
705707
}
@@ -708,7 +710,7 @@ func (ss *scaleSet) getNodeIdentityByNodeName(nodeName string, crt azcache.Azure
708710
}
709711

710712
klog.V(2).Infof("Couldn't find VMSS for node %s, refreshing the cache", nodeName)
711-
node, err = getter(nodeName, azcache.CacheReadTypeForceRefresh)
713+
node, err = getter(vmName, azcache.CacheReadTypeForceRefresh)
712714
if err != nil {
713715
return nil, err
714716
}
@@ -967,7 +969,7 @@ func (ss *scaleSet) getConfigForScaleSetByIPFamily(config *compute.VirtualMachin
967969
// participating in the specified LoadBalancer Backend Pool, which returns (resourceGroup, vmssName, instanceID, vmssVM, error).
968970
func (ss *scaleSet) EnsureHostInPool(service *v1.Service, nodeName types.NodeName, backendPoolID string, vmSetName string, isInternal bool) (string, string, string, *compute.VirtualMachineScaleSetVM, error) {
969971
klog.V(3).Infof("ensuring node %q of scaleset %q in LB backendpool %q", nodeName, vmSetName, backendPoolID)
970-
vmName := mapNodeNameToVMName(nodeName)
972+
vmName := ss.Cloud.mapNodeNameToVMName(nodeName)
971973
ssName, instanceID, vm, err := ss.getVmssVM(vmName, azcache.CacheReadTypeDefault)
972974
if err != nil {
973975
if errors.Is(err, cloudprovider.InstanceNotFound) {

0 commit comments

Comments
 (0)