Skip to content

Commit ac50460

Browse files
cluster-autoscaler: use generated instance types
Signed-off-by: Julien Balestra <[email protected]>
1 parent 1ae89b9 commit ac50460

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,13 @@ var (
4949
type awsCloudProvider struct {
5050
awsManager *AwsManager
5151
resourceLimiter *cloudprovider.ResourceLimiter
52-
// InstanceTypes is a map of ec2 resources
53-
instanceTypes map[string]*InstanceType
5452
}
5553

5654
// BuildAwsCloudProvider builds CloudProvider implementation for AWS.
57-
func BuildAwsCloudProvider(awsManager *AwsManager, instanceTypes map[string]*InstanceType, resourceLimiter *cloudprovider.ResourceLimiter) (cloudprovider.CloudProvider, error) {
55+
func BuildAwsCloudProvider(awsManager *AwsManager, resourceLimiter *cloudprovider.ResourceLimiter) (cloudprovider.CloudProvider, error) {
5856
aws := &awsCloudProvider{
5957
awsManager: awsManager,
6058
resourceLimiter: resourceLimiter,
61-
instanceTypes: instanceTypes,
6259
}
6360
return aws, nil
6461
}
@@ -347,21 +344,30 @@ func BuildAWS(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscover
347344
}
348345

349346
// Generate EC2 list
350-
var instanceTypes map[string]*InstanceType
351-
var lastUpdateTime string
347+
instanceTypes, lastUpdateTime := GetStaticEC2InstanceTypes()
352348
if opts.AWSUseStaticInstanceList {
353-
instanceTypes, lastUpdateTime = GetStaticEC2InstanceTypes()
354349
klog.Warningf("Use static EC2 Instance Types and list could be outdated. Last update time: %s", lastUpdateTime)
355350
} else {
356351
region, err := GetCurrentAwsRegion()
357352
if err != nil {
358353
klog.Fatalf("Failed to get AWS Region: %v", err)
359354
}
360355

361-
instanceTypes, err = GenerateEC2InstanceTypes(region)
356+
generatedInstanceTypes, err := GenerateEC2InstanceTypes(region)
362357
if err != nil {
363358
klog.Fatalf("Failed to generate AWS EC2 Instance Types: %v", err)
364359
}
360+
// fallback on the static list if we miss any instance types in the generated output
361+
// credits to: https://github.com/lyft/cni-ipvlan-vpc-k8s/pull/80
362+
for k, v := range instanceTypes {
363+
_, ok := generatedInstanceTypes[k]
364+
if ok {
365+
continue
366+
}
367+
klog.Infof("Using static instance type %s", k)
368+
generatedInstanceTypes[k] = v
369+
}
370+
instanceTypes = generatedInstanceTypes
365371

366372
keys := make([]string, 0, len(instanceTypes))
367373
for key := range instanceTypes {
@@ -371,12 +377,12 @@ func BuildAWS(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscover
371377
klog.Infof("Successfully load %d EC2 Instance Types %s", len(keys), keys)
372378
}
373379

374-
manager, err := CreateAwsManager(config, do)
380+
manager, err := CreateAwsManager(config, do, instanceTypes)
375381
if err != nil {
376382
klog.Fatalf("Failed to create AWS Manager: %v", err)
377383
}
378384

379-
provider, err := BuildAwsCloudProvider(manager, instanceTypes, rl)
385+
provider, err := BuildAwsCloudProvider(manager, rl)
380386
if err != nil {
381387
klog.Fatalf("Failed to create AWS cloud provider: %v", err)
382388
}

cluster-autoscaler/cloudprovider/aws/aws_manager.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ type AwsManager struct {
6161
ec2Service ec2Wrapper
6262
asgCache *asgCache
6363
lastRefresh time.Time
64+
instanceTypes map[string]*InstanceType
6465
}
6566

6667
type asgTemplate struct {
@@ -174,6 +175,7 @@ func createAWSManagerInternal(
174175
discoveryOpts cloudprovider.NodeGroupDiscoveryOptions,
175176
autoScalingService *autoScalingWrapper,
176177
ec2Service *ec2Wrapper,
178+
instanceTypes map[string]*InstanceType,
177179
) (*AwsManager, error) {
178180

179181
cfg, err := readAWSCloudConfig(configReader)
@@ -219,6 +221,7 @@ func createAWSManagerInternal(
219221
autoScalingService: *autoScalingService,
220222
ec2Service: *ec2Service,
221223
asgCache: cache,
224+
instanceTypes: instanceTypes,
222225
}
223226

224227
if err := manager.forceRefresh(); err != nil {
@@ -244,8 +247,8 @@ func readAWSCloudConfig(config io.Reader) (*provider_aws.CloudConfig, error) {
244247
}
245248

246249
// CreateAwsManager constructs awsManager object.
247-
func CreateAwsManager(configReader io.Reader, discoveryOpts cloudprovider.NodeGroupDiscoveryOptions) (*AwsManager, error) {
248-
return createAWSManagerInternal(configReader, discoveryOpts, nil, nil)
250+
func CreateAwsManager(configReader io.Reader, discoveryOpts cloudprovider.NodeGroupDiscoveryOptions, instanceTypes map[string]*InstanceType) (*AwsManager, error) {
251+
return createAWSManagerInternal(configReader, discoveryOpts, nil, nil, instanceTypes)
249252
}
250253

251254
// Refresh is called before every main loop and can be used to dynamically update cloud provider state.
@@ -317,7 +320,7 @@ func (m *AwsManager) getAsgTemplate(asg *asg) (*asgTemplate, error) {
317320
return nil, err
318321
}
319322

320-
if t, ok := InstanceTypes[instanceTypeName]; ok {
323+
if t, ok := m.instanceTypes[instanceTypeName]; ok {
321324
return &asgTemplate{
322325
InstanceType: t,
323326
Region: region,

0 commit comments

Comments
 (0)