Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sync with upstream v1.22.3 #131

Merged
merged 43 commits into from
Jun 25, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
07b2f4f
Set maxAsgNamesPerDescribe to the new maximum value
bpineau Apr 8, 2021
90433ac
Break out unmarshal from GenerateEC2InstanceTypes
aidy Jul 7, 2021
41e2d4a
Optimise GenerateEC2InstanceTypes unmarshal memory usage
aidy Jul 7, 2021
acc14a7
Merge pull request #4268 from gjtempleton/automated-cherry-pick-of-#3…
k8s-ci-robot Aug 16, 2021
823754e
Use highest available magnum microversion
tghartland Aug 13, 2021
b24e19c
Merge pull request #4283 from tghartland/4254-cherry-pick
k8s-ci-robot Aug 25, 2021
e4365cb
Merge pull request #4274 from kinvolk/imran/cloud-provider-packet-fix
k8s-ci-robot Aug 19, 2021
afe8be8
Merge pull request #4289 from kinvolk/backport-1.22
k8s-ci-robot Sep 6, 2021
4648ce2
Improve misleading log
sylr Apr 28, 2021
83babfd
Merge pull request #4334 from nitrag/backport-535a212-1.22
k8s-ci-robot Sep 30, 2021
7a53194
Cluster Autoscaler 1.22.1
towca Sep 30, 2021
c3ffe6a
Merge pull request #4363 from towca/jtuznik/1.22.1
k8s-ci-robot Oct 1, 2021
493d937
CA - AWS - Instance List Update 03-10-21 - 1.22 release branch
gjtempleton Oct 3, 2021
7864660
Merge pull request #4382 from gjtempleton/CA-AWS-Instance-List-Update…
k8s-ci-robot Oct 18, 2021
615460e
CA - AWS - Instance List Update 29-10-21 - 1.22 release branch
sturman Oct 29, 2021
9a0f5e0
Merge pull request #4432 from sturman/cluster-autoscaler-release-1.22
k8s-ci-robot Nov 1, 2021
f8d7d9a
Cluster-Autoscaler update AWS EC2 instance types with g5, m6 and r6
sturman Nov 29, 2021
4abe389
Merge pull request #4497 from marwanad/add-more-azure-instance-types
k8s-ci-robot Dec 7, 2021
f17533b
Merge pull request #4509 from gandhipr/cluster-autoscaler-release-1.22
k8s-ci-robot Dec 9, 2021
9c44788
Merge pull request #4485 from sturman/CA-EC2-AWS-Instance-List-Update…
k8s-ci-robot Dec 13, 2021
7a5de23
CA - AWS Instance List Update - 13/12/21 - 1.22
gjtempleton Dec 13, 2021
0d0c1c4
Merge pull request #4523 from gjtempleton/CA-AWS-Instance-List-Update…
k8s-ci-robot Dec 16, 2021
c88706f
Cluster Autoscaler 1.22.2
MaciekPytel Dec 16, 2021
d423516
Merge pull request #4530 from MaciekPytel/ca_1_22_2
k8s-ci-robot Dec 20, 2021
8faddc5
Add `--feature-gates` flag to support scale up on volume limits (CSI …
ialidzhikov Dec 19, 2021
fdc76d1
Merge pull request #4553 from ialidzhikov/automated-cherry-pick-of-#4…
k8s-ci-robot Dec 22, 2021
c1397c5
Fix Azure IMDS Url in InstanceMetadataService initialization
whites11 Jan 13, 2022
1c2491d
Merge pull request #4600 from whites11/azure-metadata-fix
k8s-ci-robot Jan 13, 2022
b604b1a
Remove variables not used in azure_util_test
lzhecheng Jan 19, 2022
dcb7c84
Merge pull request #4632 from lzhecheng/remove-vars-1-22
k8s-ci-robot Jan 21, 2022
f669753
add recent AKS agentpool label to ignore for similarity checks
marwanad Oct 25, 2021
d8df72e
ignore azure csi topology label for similarity checks and populate it…
marwanad Dec 21, 2021
59205e8
fix autoscaling due to VMSS tag prefix issue
m-craghead Feb 16, 2022
0d1f854
Merge pull request #4795 from marwanad/azure-scale-from-zero-cherry-p…
k8s-ci-robot Apr 7, 2022
3326b12
Merge pull request #4800 from m-craghead/VMSS-Tag-Prefix-Fix-CherryPi…
k8s-ci-robot Apr 11, 2022
6fe8712
CA - AWS Cloud Provider - 1.22 Static Instance List Update 02-06-2022
gjtempleton Jun 2, 2022
01ee516
fix instance type fallback
tzneal May 9, 2022
b2671f1
Merge pull request #4944 from tzneal/cluster-autoscaler-release-1.22-…
k8s-ci-robot Jun 4, 2022
01c0d41
Merge pull request #4936 from gjtempleton/cluster-autoscaler-release-…
k8s-ci-robot Jun 6, 2022
141d510
Cluster Autoscaler - 1.22.3 release
gjtempleton Jun 13, 2022
a28edd0
Merge pull request #4964 from gjtempleton/cluster-autoscaler-release-…
k8s-ci-robot Jun 13, 2022
437c024
Merge changes till upstream v1.22.3
himanshu-kun Jun 24, 2022
e01ec97
Sync_changes file updated
himanshu-kun Jun 24, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
536 changes: 148 additions & 388 deletions cluster-autoscaler/FAQ.md

Large diffs are not rendered by default.

31 changes: 31 additions & 0 deletions cluster-autoscaler/SYNC-CHANGES/SYNC-CHANGES-1.22.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@
- [During vendoring k8s](#during-vendoring-k8s)
- [Others](#others)

- [v1.22.1](#v1221)
- [Synced with which upstream CA](#synced-with-which-upstream-ca-1)
- [Changes made](#changes-made-1)
- [To FAQ](#to-faq-1)
- [During merging](#during-merging-1)
- [During vendoring k8s](#during-vendoring-k8s-1)
- [Others](#others-1)


# v1.22.0

Expand Down Expand Up @@ -35,3 +43,26 @@
### Others
- [Release matrix](../README.md#releases-gardenerautoscaler) of Gardener Autoscaler updated.
- GO111MODULE=off in .ci/build and .ci/test.


# v1.22.1


## Synced with which upstream CA

[v1.22.3](https://github.com/kubernetes/autoscaler/tree/cluster-autoscaler-1.22.3/cluster-autoscaler)

## Changes made

### To FAQ

- updated with new question and answers

### During merging
_None_

### During vendoring k8s
- didn't vendor in k8s 1.25 which is vendored in upstream CA 1.22.3

### Others

14 changes: 7 additions & 7 deletions cluster-autoscaler/cloudprovider/aws/auto_scaling_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,22 @@ import (
"github.com/stretchr/testify/require"
)

func TestMoreThen50Groups(t *testing.T) {
func TestMoreThen100Groups(t *testing.T) {
service := &AutoScalingMock{}
autoScalingWrapper := &autoScalingWrapper{
autoScaling: service,
}

// Generate 51 ASG names
names := make([]string, 51)
// Generate 101 ASG names
names := make([]string, 101)
for i := 0; i < len(names); i++ {
names[i] = fmt.Sprintf("asg-%d", i)
}

// First batch, first 50 elements
// First batch, first 100 elements
service.On("DescribeAutoScalingGroupsPages",
&autoscaling.DescribeAutoScalingGroupsInput{
AutoScalingGroupNames: aws.StringSlice(names[:50]),
AutoScalingGroupNames: aws.StringSlice(names[:100]),
MaxRecords: aws.Int64(maxRecordsReturnedByAPI),
},
mock.AnythingOfType("func(*autoscaling.DescribeAutoScalingGroupsOutput, bool) bool"),
Expand All @@ -51,10 +51,10 @@ func TestMoreThen50Groups(t *testing.T) {
fn(testNamedDescribeAutoScalingGroupsOutput("asg-1", 1, "test-instance-id"), false)
}).Return(nil)

// Second batch, element 51
// Second batch, element 101
service.On("DescribeAutoScalingGroupsPages",
&autoscaling.DescribeAutoScalingGroupsInput{
AutoScalingGroupNames: aws.StringSlice([]string{"asg-50"}),
AutoScalingGroupNames: aws.StringSlice([]string{"asg-100"}),
MaxRecords: aws.Int64(maxRecordsReturnedByAPI),
},
mock.AnythingOfType("func(*autoscaling.DescribeAutoScalingGroupsOutput, bool) bool"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,10 @@ func BuildAWS(opts config.AutoscalingOptions, do cloudprovider.NodeGroupDiscover

generatedInstanceTypes, err := GenerateEC2InstanceTypes(region)
if err != nil {
klog.Fatalf("Failed to generate AWS EC2 Instance Types: %v", err)
klog.Errorf("Failed to generate AWS EC2 Instance Types: %v, falling back to static list with last update time: %s", err, lastUpdateTime)
}
if generatedInstanceTypes == nil {
generatedInstanceTypes = map[string]*InstanceType{}
}
// fallback on the static list if we miss any instance types in the generated output
// credits to: https://github.com/lyft/cni-ipvlan-vpc-k8s/pull/80
Expand Down
19 changes: 19 additions & 0 deletions cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ limitations under the License.
package aws

import (
"os"
"testing"

"github.com/aws/aws-sdk-go/aws"
Expand All @@ -26,6 +27,7 @@ import (
"github.com/stretchr/testify/mock"
apiv1 "k8s.io/api/core/v1"
"k8s.io/autoscaler/cluster-autoscaler/cloudprovider"
"k8s.io/autoscaler/cluster-autoscaler/config"
)

type AutoScalingMock struct {
Expand Down Expand Up @@ -148,6 +150,23 @@ func TestBuildAwsCloudProvider(t *testing.T) {
assert.NoError(t, err)
}

func TestInstanceTypeFallback(t *testing.T) {
resourceLimiter := cloudprovider.NewResourceLimiter(
map[string]int64{cloudprovider.ResourceNameCores: 1, cloudprovider.ResourceNameMemory: 10000000},
map[string]int64{cloudprovider.ResourceNameCores: 10, cloudprovider.ResourceNameMemory: 100000000})

do := cloudprovider.NodeGroupDiscoveryOptions{}
opts := config.AutoscalingOptions{}

os.Setenv("AWS_REGION", "non-existent-region")
defer os.Unsetenv("AWS_REGION")

// This test ensures that no klog.Fatalf calls occur when constructing the AWS cloud provider. Specifically it is
// intended to ensure that instance type fallback works correctly in the event of an error enumerating instance
// types.
_ = BuildAWS(opts, do, resourceLimiter)
}

func TestName(t *testing.T) {
provider := testProvider(t, testAwsManager)
assert.Equal(t, provider.Name(), cloudprovider.AwsProviderName)
Expand Down
4 changes: 2 additions & 2 deletions cluster-autoscaler/cloudprovider/aws/aws_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ const (
operationWaitTimeout = 5 * time.Second
operationPollInterval = 100 * time.Millisecond
maxRecordsReturnedByAPI = 100
maxAsgNamesPerDescribe = 50
maxAsgNamesPerDescribe = 100
refreshInterval = 1 * time.Minute
autoDiscovererTypeASG = "asg"
asgAutoDiscovererKeyTag = "tag"
Expand Down Expand Up @@ -312,7 +312,7 @@ func (m *AwsManager) getAsgTemplate(asg *asg) (*asgTemplate, error) {
region := az[0 : len(az)-1]

if len(asg.AvailabilityZones) > 1 {
klog.Warningf("Found multiple availability zones for ASG %q; using %s\n", asg.Name, az)
klog.V(4).Infof("Found multiple availability zones for ASG %q; using %s for %s label\n", asg.Name, az, apiv1.LabelFailureDomainBetaZone)
}

instanceTypeName, err := m.buildInstanceType(asg)
Expand Down
79 changes: 63 additions & 16 deletions cluster-autoscaler/cloudprovider/aws/aws_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,26 @@ import (
"encoding/json"
"errors"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/ec2metadata"
"github.com/aws/aws-sdk-go/aws/endpoints"
"github.com/aws/aws-sdk-go/aws/session"
"io/ioutil"
klog "k8s.io/klog/v2"
"io"
"net/http"
"os"
"regexp"
"strconv"
"strings"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/ec2metadata"
"github.com/aws/aws-sdk-go/aws/endpoints"
"github.com/aws/aws-sdk-go/aws/session"

klog "k8s.io/klog/v2"
)

var (
ec2MetaDataServiceUrl = "http://169.254.169.254"
ec2PricingServiceUrlTemplate = "https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/%s/index.json"
ec2PricingServiceUrlTemplateCN = "https://pricing.cn-north-1.amazonaws.com.cn/offers/v1.0/cn/AmazonEC2/current/%s/index.json"
staticListLastUpdateTime = "2020-12-07"
staticListLastUpdateTime = "2022-06-02"
ec2Arm64Processors = []string{"AWS Graviton Processor", "AWS Graviton2 Processor"}
)

Expand Down Expand Up @@ -87,16 +89,9 @@ func GenerateEC2InstanceTypes(region string) (map[string]*InstanceType, error) {

defer res.Body.Close()

body, err := ioutil.ReadAll(res.Body)
if err != nil {
klog.Warningf("Error parsing %s skipping...\n", url)
continue
}

var unmarshalled = response{}
err = json.Unmarshal(body, &unmarshalled)
unmarshalled, err := unmarshalProductsResponse(res.Body)
if err != nil {
klog.Warningf("Error unmarshalling %s, skip...\n", url)
klog.Warningf("Error parsing %s skipping...\n%s\n", url, err)
continue
}

Expand Down Expand Up @@ -135,6 +130,58 @@ func GetStaticEC2InstanceTypes() (map[string]*InstanceType, string) {
return InstanceTypes, staticListLastUpdateTime
}

func unmarshalProductsResponse(r io.Reader) (*response, error) {
dec := json.NewDecoder(r)
t, err := dec.Token()
if err != nil {
return nil, err
}
if delim, ok := t.(json.Delim); !ok || delim.String() != "{" {
return nil, errors.New("Invalid products json")
}

unmarshalled := response{map[string]product{}}

for dec.More() {
t, err = dec.Token()
if err != nil {
return nil, err
}

if t == "products" {
tt, err := dec.Token()
if err != nil {
return nil, err
}
if delim, ok := tt.(json.Delim); !ok || delim.String() != "{" {
return nil, errors.New("Invalid products json")
}
for dec.More() {
productCode, err := dec.Token()
if err != nil {
return nil, err
}

prod := product{}
if err = dec.Decode(&prod); err != nil {
return nil, err
}
unmarshalled.Products[productCode.(string)] = prod
}
}
}

t, err = dec.Token()
if err != nil {
return nil, err
}
if delim, ok := t.(json.Delim); !ok || delim.String() != "}" {
return nil, errors.New("Invalid products json")
}

return &unmarshalled, nil
}

func parseMemory(memory string) int64 {
reg, err := regexp.Compile("[^0-9\\.]+")
if err != nil {
Expand Down
119 changes: 118 additions & 1 deletion cluster-autoscaler/cloudprovider/aws/aws_util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,14 @@ limitations under the License.
package aws

import (
"github.com/stretchr/testify/assert"
"net/http"
"net/http/httptest"
"os"
"strconv"
"strings"
"testing"

"github.com/stretchr/testify/assert"
)

func TestGetStaticEC2InstanceTypes(t *testing.T) {
Expand Down Expand Up @@ -136,3 +138,118 @@ func TestGetCurrentAwsRegionWithRegionEnv(t *testing.T) {
assert.Nil(t, err)
assert.Equal(t, region, result)
}

func TestUnmarshalProductsResponse(t *testing.T) {
body := `
{
"products": {
"VVD8BG8WWFD3DAZN" : {
"sku" : "VVD8BG8WWFD3DAZN",
"productFamily" : "Compute Instance",
"attributes" : {
"servicecode" : "AmazonEC2",
"location" : "US East (N. Virginia)",
"locationType" : "AWS Region",
"instanceType" : "r5b.4xlarge",
"currentGeneration" : "Yes",
"instanceFamily" : "Memory optimized",
"vcpu" : "16",
"physicalProcessor" : "Intel Xeon Platinum 8259 (Cascade Lake)",
"clockSpeed" : "3.1 GHz",
"memory" : "128 GiB",
"storage" : "EBS only",
"networkPerformance" : "Up to 10 Gigabit",
"processorArchitecture" : "64-bit",
"tenancy" : "Shared",
"operatingSystem" : "Linux",
"licenseModel" : "No License required",
"usagetype" : "UnusedBox:r5b.4xlarge",
"operation" : "RunInstances:0004",
"availabilityzone" : "NA",
"capacitystatus" : "UnusedCapacityReservation",
"classicnetworkingsupport" : "false",
"dedicatedEbsThroughput" : "10 Gbps",
"ecu" : "NA",
"enhancedNetworkingSupported" : "Yes",
"instancesku" : "G4NFAXD9TGJM3RY8",
"intelAvxAvailable" : "Yes",
"intelAvx2Available" : "No",
"intelTurboAvailable" : "No",
"marketoption" : "OnDemand",
"normalizationSizeFactor" : "32",
"preInstalledSw" : "SQL Std",
"servicename" : "Amazon Elastic Compute Cloud",
"vpcnetworkingsupport" : "true"
}
},
"C36QEQQQJ8ZR7N32" : {
"sku" : "C36QEQQQJ8ZR7N32",
"productFamily" : "Compute Instance",
"attributes" : {
"servicecode" : "AmazonEC2",
"location" : "US East (N. Virginia)",
"locationType" : "AWS Region",
"instanceType" : "d3en.8xlarge",
"currentGeneration" : "Yes",
"instanceFamily" : "Storage optimized",
"vcpu" : "32",
"physicalProcessor" : "Intel Xeon Platinum 8259 (Cascade Lake)",
"clockSpeed" : "3.1 GHz",
"memory" : "128 GiB",
"storage" : "16 x 14000 HDD",
"networkPerformance" : "50 Gigabit",
"processorArchitecture" : "64-bit",
"tenancy" : "Dedicated",
"operatingSystem" : "SUSE",
"licenseModel" : "No License required",
"usagetype" : "DedicatedRes:d3en.8xlarge",
"operation" : "RunInstances:000g",
"availabilityzone" : "NA",
"capacitystatus" : "AllocatedCapacityReservation",
"classicnetworkingsupport" : "false",
"dedicatedEbsThroughput" : "5000 Mbps",
"ecu" : "NA",
"enhancedNetworkingSupported" : "Yes",
"instancesku" : "2XW3BCEZ83WMGFJY",
"intelAvxAvailable" : "Yes",
"intelAvx2Available" : "Yes",
"intelTurboAvailable" : "Yes",
"marketoption" : "OnDemand",
"normalizationSizeFactor" : "64",
"preInstalledSw" : "NA",
"processorFeatures" : "AVX; AVX2; Intel AVX; Intel AVX2; Intel AVX512; Intel Turbo",
"servicename" : "Amazon Elastic Compute Cloud",
"vpcnetworkingsupport" : "true"
}
}
}
}
`
r := strings.NewReader(body)
resp, err := unmarshalProductsResponse(r)
assert.Nil(t, err)
assert.Len(t, resp.Products, 2)
assert.NotNil(t, resp.Products["VVD8BG8WWFD3DAZN"])
assert.NotNil(t, resp.Products["C36QEQQQJ8ZR7N32"])
assert.Equal(t, resp.Products["VVD8BG8WWFD3DAZN"].Attributes.InstanceType, "r5b.4xlarge")
assert.Equal(t, resp.Products["C36QEQQQJ8ZR7N32"].Attributes.InstanceType, "d3en.8xlarge")

invalidJsonTests := map[string]string{
"[": "[",
"]": "]",
"}": "}",
"{": "{",
"Plain text": "invalid",
"List": "[]",
"Invalid products ([])": `{"products":[]}`,
"Invalid product ([])": `{"products":{"zz":[]}}`,
}
for name, body := range invalidJsonTests {
t.Run(name, func(t *testing.T) {
r := strings.NewReader(body)
resp, err := unmarshalProductsResponse(r)
assert.NotNil(t, err)
assert.Nil(t, resp)
})
}
}
Loading