code: func (az *Cloud) InstanceType(ctx context.Context, name types.NodeName) (string, error) {
  	// Returns "" for unmanaged nodes because azure cloud provider couldn't fetch information for them.
  	unmanaged, err := az.IsNodeUnmanaged(string(name))
  	if err != nil {
  		return "", err
  	}
  	if unmanaged {
  		klog.V(4).Infof("InstanceType: omitting unmanaged node %q", name)
  		return "", nil
  	}
  
  	if az.UseInstanceMetadata {
  		metadata, err := az.metadata.GetMetadata()
  		if err != nil {
  			return "", err
  		}
  
  		if metadata.Compute == nil {
  			return "", fmt.Errorf("failure of getting instance metadata")
  		}
  
  		isLocalInstance, err := az.isCurrentInstance(name, metadata.Compute.Name)
  		if err != nil {
  			return "", err
  		}
  		if isLocalInstance {
  			if metadata.Compute.VMSize != "" {
  				return metadata.Compute.VMSize, nil
  			}
  		}
  	}
  
  	return az.vmSet.GetInstanceTypeByNodeName(string(name))
  }
docs: // InstanceType returns the type of the specified instance.
  // Note that if the instance does not exist or is no longer running, we must return ("", cloudprovider.InstanceNotFound)
  // (Implementer Note): This is used by kubelet. Kubelet will label the node. Real log from kubelet:
  //       Adding node label from cloud provider: beta.kubernetes.io/instance-type=[value]