mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 03:11:40 +00:00
Merge pull request #90057 from ialidzhikov/fix/gcp-ccm
Fix Node initialization for GCP cloud provider
This commit is contained in:
commit
ec79307b04
@ -239,7 +239,7 @@ func (cnc *CloudNodeController) updateNodeAddress(ctx context.Context, node *v1.
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeAddresses, err := getNodeAddressesByProviderIDOrName(ctx, instances, node)
|
nodeAddresses, err := getNodeAddressesByProviderIDOrName(ctx, instances, node.Spec.ProviderID, node.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.Errorf("Error getting node addresses for node %q: %v", node.Name, err)
|
klog.Errorf("Error getting node addresses for node %q: %v", node.Name, err)
|
||||||
return
|
return
|
||||||
@ -407,10 +407,14 @@ func (cnc *CloudNodeController) initializeNode(ctx context.Context, node *v1.Nod
|
|||||||
// All of the returned functions are idempotent, because they are used in a retry-if-conflict
|
// All of the returned functions are idempotent, because they are used in a retry-if-conflict
|
||||||
// loop, meaning they could get called multiple times.
|
// loop, meaning they could get called multiple times.
|
||||||
func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Context, node *v1.Node, instances cloudprovider.Instances) ([]nodeModifier, error) {
|
func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Context, node *v1.Node, instances cloudprovider.Instances) ([]nodeModifier, error) {
|
||||||
var nodeModifiers []nodeModifier
|
var (
|
||||||
|
nodeModifiers []nodeModifier
|
||||||
|
providerID string
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
if node.Spec.ProviderID == "" {
|
if node.Spec.ProviderID == "" {
|
||||||
providerID, err := cloudprovider.GetInstanceProviderID(ctx, cnc.cloud, types.NodeName(node.Name))
|
providerID, err = cloudprovider.GetInstanceProviderID(ctx, cnc.cloud, types.NodeName(node.Name))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
nodeModifiers = append(nodeModifiers, func(n *v1.Node) {
|
nodeModifiers = append(nodeModifiers, func(n *v1.Node) {
|
||||||
if n.Spec.ProviderID == "" {
|
if n.Spec.ProviderID == "" {
|
||||||
@ -428,9 +432,11 @@ func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Co
|
|||||||
// do not, the taint will be removed, and this will not be retried
|
// do not, the taint will be removed, and this will not be retried
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
providerID = node.Spec.ProviderID
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeAddresses, err := getNodeAddressesByProviderIDOrName(ctx, instances, node)
|
nodeAddresses, err := getNodeAddressesByProviderIDOrName(ctx, instances, providerID, node.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -443,7 +449,7 @@ func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Co
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if instanceType, err := getInstanceTypeByProviderIDOrName(ctx, instances, node); err != nil {
|
if instanceType, err := getInstanceTypeByProviderIDOrName(ctx, instances, providerID, node.Name); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if instanceType != "" {
|
} else if instanceType != "" {
|
||||||
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelInstanceType, instanceType)
|
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelInstanceType, instanceType)
|
||||||
@ -458,7 +464,7 @@ func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Co
|
|||||||
}
|
}
|
||||||
|
|
||||||
if zones, ok := cnc.cloud.Zones(); ok {
|
if zones, ok := cnc.cloud.Zones(); ok {
|
||||||
zone, err := getZoneByProviderIDOrName(ctx, zones, node)
|
zone, err := getZoneByProviderIDOrName(ctx, zones, providerID, node.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to get zone from cloud provider: %v", err)
|
return nil, fmt.Errorf("failed to get zone from cloud provider: %v", err)
|
||||||
}
|
}
|
||||||
@ -531,11 +537,11 @@ func ensureNodeExistsByProviderID(ctx context.Context, instances cloudprovider.I
|
|||||||
return instances.InstanceExistsByProviderID(ctx, providerID)
|
return instances.InstanceExistsByProviderID(ctx, providerID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getNodeAddressesByProviderIDOrName(ctx context.Context, instances cloudprovider.Instances, node *v1.Node) ([]v1.NodeAddress, error) {
|
func getNodeAddressesByProviderIDOrName(ctx context.Context, instances cloudprovider.Instances, providerID, nodeName string) ([]v1.NodeAddress, error) {
|
||||||
nodeAddresses, err := instances.NodeAddressesByProviderID(ctx, node.Spec.ProviderID)
|
nodeAddresses, err := instances.NodeAddressesByProviderID(ctx, providerID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
providerIDErr := err
|
providerIDErr := err
|
||||||
nodeAddresses, err = instances.NodeAddresses(ctx, types.NodeName(node.Name))
|
nodeAddresses, err = instances.NodeAddresses(ctx, types.NodeName(nodeName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error fetching node by provider ID: %v, and error by node name: %v", providerIDErr, err)
|
return nil, fmt.Errorf("error fetching node by provider ID: %v, and error by node name: %v", providerIDErr, err)
|
||||||
}
|
}
|
||||||
@ -576,11 +582,13 @@ func ensureNodeProvidedIPExists(node *v1.Node, nodeAddresses []v1.NodeAddress) (
|
|||||||
return nodeIP, nodeIPExists
|
return nodeIP, nodeIPExists
|
||||||
}
|
}
|
||||||
|
|
||||||
func getInstanceTypeByProviderIDOrName(ctx context.Context, instances cloudprovider.Instances, node *v1.Node) (string, error) {
|
// getInstanceTypeByProviderIDOrName will attempt to get the instance type of node using its providerID
|
||||||
instanceType, err := instances.InstanceTypeByProviderID(ctx, node.Spec.ProviderID)
|
// then it's name. If both attempts fail, an error is returned.
|
||||||
|
func getInstanceTypeByProviderIDOrName(ctx context.Context, instances cloudprovider.Instances, providerID, nodeName string) (string, error) {
|
||||||
|
instanceType, err := instances.InstanceTypeByProviderID(ctx, providerID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
providerIDErr := err
|
providerIDErr := err
|
||||||
instanceType, err = instances.InstanceType(ctx, types.NodeName(node.Name))
|
instanceType, err = instances.InstanceType(ctx, types.NodeName(nodeName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("InstanceType: Error fetching by providerID: %v Error fetching by NodeName: %v", providerIDErr, err)
|
return "", fmt.Errorf("InstanceType: Error fetching by providerID: %v Error fetching by NodeName: %v", providerIDErr, err)
|
||||||
}
|
}
|
||||||
@ -589,12 +597,12 @@ func getInstanceTypeByProviderIDOrName(ctx context.Context, instances cloudprovi
|
|||||||
}
|
}
|
||||||
|
|
||||||
// getZoneByProviderIDorName will attempt to get the zone of node using its providerID
|
// getZoneByProviderIDorName will attempt to get the zone of node using its providerID
|
||||||
// then it's name. If both attempts fail, an error is returned
|
// then it's name. If both attempts fail, an error is returned.
|
||||||
func getZoneByProviderIDOrName(ctx context.Context, zones cloudprovider.Zones, node *v1.Node) (cloudprovider.Zone, error) {
|
func getZoneByProviderIDOrName(ctx context.Context, zones cloudprovider.Zones, providerID, nodeName string) (cloudprovider.Zone, error) {
|
||||||
zone, err := zones.GetZoneByProviderID(ctx, node.Spec.ProviderID)
|
zone, err := zones.GetZoneByProviderID(ctx, providerID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
providerIDErr := err
|
providerIDErr := err
|
||||||
zone, err = zones.GetZoneByNodeName(ctx, types.NodeName(node.Name))
|
zone, err = zones.GetZoneByNodeName(ctx, types.NodeName(nodeName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return cloudprovider.Zone{}, fmt.Errorf("Zone: Error fetching by providerID: %v Error fetching by NodeName: %v", providerIDErr, err)
|
return cloudprovider.Zone{}, fmt.Errorf("Zone: Error fetching by providerID: %v Error fetching by NodeName: %v", providerIDErr, err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user