Skip to content

Commit 2ff1f55

Browse files
authored
Merge pull request kubernetes#3755 from vivekbagade/master
Add max pods per node config to build node
2 parents ba83299 + b7115de commit 2ff1f55

File tree

3 files changed

+23
-9
lines changed

3 files changed

+23
-9
lines changed

cluster-autoscaler/cloudprovider/gce/gce_manager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ func (m *gceManagerImpl) GetMigTemplateNode(mig Mig) (*apiv1.Node, error) {
485485
if err != nil {
486486
return nil, err
487487
}
488-
return m.templates.BuildNodeFromTemplate(mig, template, cpu, mem)
488+
return m.templates.BuildNodeFromTemplate(mig, template, cpu, mem, nil)
489489
}
490490

491491
func (m *gceManagerImpl) getCpuAndMemoryForMachineType(machineType string, zone string) (cpu int64, mem int64, err error) {

cluster-autoscaler/cloudprovider/gce/templates.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,14 @@ func (t *GceTemplateBuilder) getAcceleratorCount(accelerators []*gce.Accelerator
5252
}
5353

5454
// BuildCapacity builds a list of resource capacities given list of hardware.
55-
func (t *GceTemplateBuilder) BuildCapacity(cpu int64, mem int64, accelerators []*gce.AcceleratorConfig, os OperatingSystem) (apiv1.ResourceList, error) {
55+
func (t *GceTemplateBuilder) BuildCapacity(cpu int64, mem int64, accelerators []*gce.AcceleratorConfig, os OperatingSystem, pods *int64) (apiv1.ResourceList, error) {
5656
capacity := apiv1.ResourceList{}
57-
// TODO: get a real value.
58-
capacity[apiv1.ResourcePods] = *resource.NewQuantity(110, resource.DecimalSI)
57+
if pods == nil {
58+
capacity[apiv1.ResourcePods] = *resource.NewQuantity(110, resource.DecimalSI)
59+
} else {
60+
capacity[apiv1.ResourcePods] = *resource.NewQuantity(*pods, resource.DecimalSI)
61+
}
62+
5963
capacity[apiv1.ResourceCPU] = *resource.NewQuantity(cpu, resource.DecimalSI)
6064
memTotal := mem - CalculateKernelReserved(mem, os)
6165
capacity[apiv1.ResourceMemory] = *resource.NewQuantity(memTotal, resource.DecimalSI)
@@ -120,7 +124,7 @@ func getKubeEnvValueFromTemplateMetadata(template *gce.InstanceTemplate) (string
120124
}
121125

122126
// BuildNodeFromTemplate builds node from provided GCE template.
123-
func (t *GceTemplateBuilder) BuildNodeFromTemplate(mig Mig, template *gce.InstanceTemplate, cpu int64, mem int64) (*apiv1.Node, error) {
127+
func (t *GceTemplateBuilder) BuildNodeFromTemplate(mig Mig, template *gce.InstanceTemplate, cpu int64, mem int64, pods *int64) (*apiv1.Node, error) {
124128

125129
if template.Properties == nil {
126130
return nil, fmt.Errorf("instance template %s has no properties", template.Name)
@@ -146,7 +150,7 @@ func (t *GceTemplateBuilder) BuildNodeFromTemplate(mig Mig, template *gce.Instan
146150
return nil, fmt.Errorf("could not obtain os from kube-env from template metadata")
147151
}
148152

149-
capacity, err := t.BuildCapacity(cpu, mem, template.Properties.GuestAccelerators, os)
153+
capacity, err := t.BuildCapacity(cpu, mem, template.Properties.GuestAccelerators, os, pods)
150154
if err != nil {
151155
return nil, err
152156
}

cluster-autoscaler/cloudprovider/gce/templates_test.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
)
3636

3737
func TestBuildNodeFromTemplateSetsResources(t *testing.T) {
38+
var thirtyPodsPerNode int64 = 30
3839
type testCase struct {
3940
scenario string
4041
kubeEnv string
@@ -46,6 +47,7 @@ func TestBuildNodeFromTemplateSetsResources(t *testing.T) {
4647
reservedCpu string
4748
reservedMemory string
4849
expectedErr bool
50+
pods *int64
4951
}
5052
testCases := []testCase{
5153
{
@@ -87,6 +89,14 @@ func TestBuildNodeFromTemplateSetsResources(t *testing.T) {
8789
scenario: "totally messed up kube-env",
8890
kubeEnv: "This kube-env is totally messed up",
8991
expectedErr: true,
92+
}, {
93+
scenario: "max pods per node specified",
94+
kubeEnv: "",
95+
physicalCpu: 8,
96+
physicalMemory: 200 * units.MiB,
97+
pods: &thirtyPodsPerNode,
98+
kubeReserved: false,
99+
expectedErr: false,
90100
},
91101
}
92102
for _, tc := range testCases {
@@ -110,7 +120,7 @@ func TestBuildNodeFromTemplateSetsResources(t *testing.T) {
110120
if tc.kubeEnv != "" {
111121
template.Properties.Metadata.Items = []*gce.MetadataItems{{Key: "kube-env", Value: &tc.kubeEnv}}
112122
}
113-
node, err := tb.BuildNodeFromTemplate(mig, template, tc.physicalCpu, tc.physicalMemory)
123+
node, err := tb.BuildNodeFromTemplate(mig, template, tc.physicalCpu, tc.physicalMemory, tc.pods)
114124
if tc.expectedErr {
115125
assert.Error(t, err)
116126
} else {
@@ -119,7 +129,7 @@ func TestBuildNodeFromTemplateSetsResources(t *testing.T) {
119129
assert.NotNil(t, node.Status)
120130
assert.NotNil(t, node.Status.Capacity)
121131
assert.NotNil(t, node.Status.Allocatable)
122-
capacity, err := tb.BuildCapacity(tc.physicalCpu, tc.physicalMemory, tc.accelerators, OperatingSystemLinux)
132+
capacity, err := tb.BuildCapacity(tc.physicalCpu, tc.physicalMemory, tc.accelerators, OperatingSystemLinux, tc.pods)
123133
assert.NoError(t, err)
124134
assertEqualResourceLists(t, "Capacity", capacity, node.Status.Capacity)
125135
if !tc.kubeReserved {
@@ -361,7 +371,7 @@ func TestBuildCapacityMemory(t *testing.T) {
361371
t.Run(fmt.Sprintf("%v", idx), func(t *testing.T) {
362372
tb := GceTemplateBuilder{}
363373
noAccelerators := make([]*gce.AcceleratorConfig, 0)
364-
buildCapacity, err := tb.BuildCapacity(tc.physicalCpu, tc.physicalMemory, noAccelerators, tc.os)
374+
buildCapacity, err := tb.BuildCapacity(tc.physicalCpu, tc.physicalMemory, noAccelerators, tc.os, nil)
365375
assert.NoError(t, err)
366376
expectedCapacity, err := makeResourceList2(tc.physicalCpu, tc.expectedCapacityMemory, 0, 110)
367377
assert.NoError(t, err)

0 commit comments

Comments
 (0)