Skip to content

Commit 0f44f9c

Browse files
committed
feat(cluster-autoscaler/exoscale): implement caching
Signed-off-by: Thomas Stadler <thomas.stadler@whizus.com>
1 parent 83be4eb commit 0f44f9c

File tree

5 files changed

+1151
-27
lines changed

5 files changed

+1151
-27
lines changed

cluster-autoscaler/cloudprovider/exoscale/exoscale_cloud_provider.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,21 @@ func (e *exoscaleCloudProvider) NodeGroups() []cloudprovider.NodeGroup {
5959
// should not be processed by cluster autoscaler, or non-nil error if such
6060
// occurred. Must be implemented.
6161
func (e *exoscaleCloudProvider) NodeGroupForNode(node *apiv1.Node) (cloudprovider.NodeGroup, error) {
62+
// Fast path: Check for nodepool-id label to avoid API calls
63+
if nodepoolID, hasLabel := node.Labels["node.exoscale.net/nodepool-id"]; hasLabel {
64+
// Try to find existing nodegroup with this SKS nodepool ID
65+
for _, ng := range e.manager.nodeGroups {
66+
// Check if this is an SKS nodepool nodegroup
67+
if sksNG, ok := ng.(*sksNodepoolNodeGroup); ok {
68+
if *sksNG.sksNodepool.ID == nodepoolID {
69+
debugf("found SKS nodegroup %s for node %s using nodepool-id label", nodepoolID, node.Name)
70+
return ng, nil
71+
}
72+
}
73+
}
74+
debugf("nodepool-id label found (%s) but no matching SKS nodegroup, falling back to API lookup", nodepoolID)
75+
}
76+
6277
instancePool, err := e.instancePoolFromNode(node)
6378
if err != nil {
6479
if err == errNoInstancePool {
@@ -77,7 +92,7 @@ func (e *exoscaleCloudProvider) NodeGroupForNode(node *apiv1.Node) (cloudprovide
7792
sksNodepool *egoscale.SKSNodepool
7893
)
7994

80-
sksClusters, err := e.manager.client.ListSKSClusters(e.manager.ctx, e.manager.zone)
95+
sksClusters, err := e.manager.ListSKSClustersCached(e.manager.ctx, e.manager.zone)
8196
if err != nil {
8297
errorf("unable to list SKS clusters: %v", err)
8398
return nil, err
@@ -264,7 +279,7 @@ func (e *exoscaleCloudProvider) instancePoolFromNode(node *apiv1.Node) (*egoscal
264279

265280
debugf("looking up node group for node ID %s", nodeID)
266281

267-
instance, err := e.manager.client.GetInstance(e.manager.ctx, e.manager.zone, nodeID)
282+
instance, err := e.manager.GetInstanceCached(e.manager.ctx, e.manager.zone, nodeID)
268283
if err != nil {
269284
return nil, err
270285
}
@@ -273,5 +288,5 @@ func (e *exoscaleCloudProvider) instancePoolFromNode(node *apiv1.Node) (*egoscal
273288
return nil, errNoInstancePool
274289
}
275290

276-
return e.manager.client.GetInstancePool(e.manager.ctx, e.manager.zone, instance.Manager.ID)
291+
return e.manager.GetInstancePoolCached(e.manager.ctx, e.manager.zone, instance.Manager.ID)
277292
}

0 commit comments

Comments
 (0)