Skip to content

Commit a76e813

Browse files
authored
Merge pull request #8748 from k8s-infra-cherrypick-robot/cherry-pick-8747-to-cluster-autoscaler-release-1.34
[cluster-autoscaler-release-1.34] Add peer proto fields for NodeGroupTemplateNodeInfoResponse / NodeGroupAutoscalingOptions
2 parents 3f94cc3 + ebbb16c commit a76e813

File tree

5 files changed

+244
-68
lines changed

5 files changed

+244
-68
lines changed

cluster-autoscaler/cloudprovider/externalgrpc/examples/external-grpc-cloud-provider-service/wrapper/wrapper.go

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ import (
2020
"context"
2121
"fmt"
2222
"reflect"
23+
"time"
2324

2425
"google.golang.org/grpc/codes"
2526
"google.golang.org/grpc/status"
2627
"google.golang.org/protobuf/types/known/anypb"
28+
"google.golang.org/protobuf/types/known/durationpb"
2729

2830
apiv1 "k8s.io/api/core/v1"
2931
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -388,8 +390,13 @@ func (w *Wrapper) NodeGroupTemplateNodeInfo(_ context.Context, req *protos.NodeG
388390
}
389391
return nil, err
390392
}
393+
infoBytes, err := info.Node().Marshal()
394+
if err != nil {
395+
return nil, err
396+
}
391397
return &protos.NodeGroupTemplateNodeInfoResponse{
392-
NodeInfo: info.Node(),
398+
NodeInfo: info.Node(),
399+
NodeBytes: infoBytes,
393400
}, nil
394401
}
395402

@@ -406,12 +413,37 @@ func (w *Wrapper) NodeGroupGetOptions(_ context.Context, req *protos.NodeGroupAu
406413
if pbDefaults == nil {
407414
return nil, fmt.Errorf("request fields were nil")
408415
}
416+
417+
var scaleDownUnneededTime time.Duration
418+
if d := pbDefaults.GetScaleDownUnneededDuration(); d != nil {
419+
scaleDownUnneededTime = d.AsDuration()
420+
} else {
421+
// fall back to deprecated field removed in 1.35
422+
scaleDownUnneededTime = pbDefaults.GetScaleDownUnneededTime().Duration
423+
}
424+
425+
var scaleDownUnreadyTime time.Duration
426+
if d := pbDefaults.GetScaleDownUnreadyDuration(); d != nil {
427+
scaleDownUnreadyTime = d.AsDuration()
428+
} else {
429+
// fall back to deprecated field removed in 1.35
430+
scaleDownUnreadyTime = pbDefaults.GetScaleDownUnreadyTime().Duration
431+
}
432+
433+
var maxNodeProvisionTime time.Duration
434+
if d := pbDefaults.GetMaxNodeProvisionDuration(); d != nil {
435+
maxNodeProvisionTime = d.AsDuration()
436+
} else {
437+
// fall back to deprecated field removed in 1.35
438+
maxNodeProvisionTime = pbDefaults.GetMaxNodeProvisionTime().Duration
439+
}
440+
409441
defaults := config.NodeGroupAutoscalingOptions{
410442
ScaleDownUtilizationThreshold: pbDefaults.GetScaleDownGpuUtilizationThreshold(),
411443
ScaleDownGpuUtilizationThreshold: pbDefaults.GetScaleDownGpuUtilizationThreshold(),
412-
ScaleDownUnneededTime: pbDefaults.GetScaleDownUnneededTime().Duration,
413-
ScaleDownUnreadyTime: pbDefaults.GetScaleDownUnneededTime().Duration,
414-
MaxNodeProvisionTime: pbDefaults.GetMaxNodeProvisionTime().Duration,
444+
ScaleDownUnneededTime: scaleDownUnneededTime,
445+
ScaleDownUnreadyTime: scaleDownUnreadyTime,
446+
MaxNodeProvisionTime: maxNodeProvisionTime,
415447
ZeroOrMaxNodeScaling: pbDefaults.GetZeroOrMaxNodeScaling(),
416448
IgnoreDaemonSetsUtilization: pbDefaults.GetIgnoreDaemonSetsUtilization(),
417449
}
@@ -438,6 +470,9 @@ func (w *Wrapper) NodeGroupGetOptions(_ context.Context, req *protos.NodeGroupAu
438470
MaxNodeProvisionTime: &metav1.Duration{
439471
Duration: opts.MaxNodeProvisionTime,
440472
},
473+
ScaleDownUnneededDuration: durationpb.New(opts.ScaleDownUnneededTime),
474+
ScaleDownUnreadyDuration: durationpb.New(opts.ScaleDownUnreadyTime),
475+
MaxNodeProvisionDuration: durationpb.New(opts.MaxNodeProvisionTime),
441476
ZeroOrMaxNodeScaling: opts.ZeroOrMaxNodeScaling,
442477
IgnoreDaemonSetsUtilization: opts.IgnoreDaemonSetsUtilization,
443478
},

cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group.go

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import (
2323

2424
"google.golang.org/grpc/codes"
2525
"google.golang.org/grpc/status"
26+
"google.golang.org/protobuf/types/known/durationpb"
27+
2628
apiv1 "k8s.io/api/core/v1"
2729
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2830
"k8s.io/autoscaler/cluster-autoscaler/cloudprovider"
@@ -227,7 +229,16 @@ func (n *NodeGroup) TemplateNodeInfo() (*framework.NodeInfo, error) {
227229
klog.V(1).Infof("Error on gRPC call NodeGroupTemplateNodeInfo: %v", err)
228230
return nil, err
229231
}
230-
pbNodeInfo := res.GetNodeInfo()
232+
var pbNodeInfo *apiv1.Node
233+
if pbNodeBytes := res.GetNodeBytes(); pbNodeBytes != nil {
234+
pbNodeInfo = &apiv1.Node{}
235+
if err := pbNodeInfo.Unmarshal(pbNodeBytes); err != nil {
236+
return nil, err
237+
}
238+
} else {
239+
// Fall back to deprecated field removed in 1.35
240+
pbNodeInfo = res.GetNodeInfo()
241+
}
231242
if pbNodeInfo == nil {
232243
n.nodeInfo = new(*framework.NodeInfo)
233244
return nil, nil
@@ -283,6 +294,9 @@ func (n *NodeGroup) GetOptions(defaults config.NodeGroupAutoscalingOptions) (*co
283294
MaxNodeProvisionTime: &metav1.Duration{
284295
Duration: defaults.MaxNodeProvisionTime,
285296
},
297+
ScaleDownUnneededDuration: durationpb.New(defaults.ScaleDownUnneededTime),
298+
ScaleDownUnreadyDuration: durationpb.New(defaults.ScaleDownUnreadyTime),
299+
MaxNodeProvisionDuration: durationpb.New(defaults.MaxNodeProvisionTime),
286300
ZeroOrMaxNodeScaling: defaults.ZeroOrMaxNodeScaling,
287301
IgnoreDaemonSetsUtilization: defaults.IgnoreDaemonSetsUtilization,
288302
},
@@ -299,12 +313,37 @@ func (n *NodeGroup) GetOptions(defaults config.NodeGroupAutoscalingOptions) (*co
299313
if pbOpts == nil {
300314
return nil, nil
301315
}
316+
317+
var scaleDownUnneededTime time.Duration
318+
if d := pbOpts.GetScaleDownUnneededDuration(); d != nil {
319+
scaleDownUnneededTime = d.AsDuration()
320+
} else {
321+
// fall back to deprecated field removed in 1.35
322+
scaleDownUnneededTime = pbOpts.GetScaleDownUnneededTime().Duration
323+
}
324+
325+
var scaleDownUnreadyTime time.Duration
326+
if d := pbOpts.GetScaleDownUnreadyDuration(); d != nil {
327+
scaleDownUnreadyTime = d.AsDuration()
328+
} else {
329+
// fall back to deprecated field removed in 1.35
330+
scaleDownUnreadyTime = pbOpts.GetScaleDownUnreadyTime().Duration
331+
}
332+
333+
var maxNodeProvisionTime time.Duration
334+
if d := pbOpts.GetMaxNodeProvisionDuration(); d != nil {
335+
maxNodeProvisionTime = d.AsDuration()
336+
} else {
337+
// fall back to deprecated field removed in 1.35
338+
maxNodeProvisionTime = pbOpts.GetMaxNodeProvisionTime().Duration
339+
}
340+
302341
opts := &config.NodeGroupAutoscalingOptions{
303342
ScaleDownUtilizationThreshold: pbOpts.GetScaleDownUtilizationThreshold(),
304343
ScaleDownGpuUtilizationThreshold: pbOpts.GetScaleDownGpuUtilizationThreshold(),
305-
ScaleDownUnneededTime: pbOpts.GetScaleDownUnneededTime().Duration,
306-
ScaleDownUnreadyTime: pbOpts.GetScaleDownUnreadyTime().Duration,
307-
MaxNodeProvisionTime: pbOpts.GetMaxNodeProvisionTime().Duration,
344+
ScaleDownUnneededTime: scaleDownUnneededTime,
345+
ScaleDownUnreadyTime: scaleDownUnreadyTime,
346+
MaxNodeProvisionTime: maxNodeProvisionTime,
308347
ZeroOrMaxNodeScaling: pbOpts.GetZeroOrMaxNodeScaling(),
309348
IgnoreDaemonSetsUtilization: pbOpts.GetIgnoreDaemonSetsUtilization(),
310349
}

cluster-autoscaler/cloudprovider/externalgrpc/externalgrpc_node_group_test.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import (
2525
"github.com/stretchr/testify/mock"
2626
"google.golang.org/grpc/codes"
2727
"google.golang.org/grpc/status"
28+
"google.golang.org/protobuf/types/known/durationpb"
29+
2830
apiv1 "k8s.io/api/core/v1"
2931
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3032
"k8s.io/autoscaler/cluster-autoscaler/cloudprovider"
@@ -124,17 +126,20 @@ func TestCloudProvider_TemplateNodeInfo(t *testing.T) {
124126
// test correct call
125127
apiv1Node1 := &apiv1.Node{}
126128
apiv1Node1.Name = "node1"
129+
apiv1Node1Bytes, _ := apiv1Node1.Marshal()
127130

128131
apiv1Node2 := &apiv1.Node{}
129132
apiv1Node2.Name = "node2"
133+
apiv1Node2Bytes, _ := apiv1Node2.Marshal()
130134

131135
m.On(
132136
"NodeGroupTemplateNodeInfo", mock.Anything, mock.MatchedBy(func(req *protos.NodeGroupTemplateNodeInfoRequest) bool {
133137
return req.Id == "nodeGroup1"
134138
}),
135139
).Return(
136140
&protos.NodeGroupTemplateNodeInfoResponse{
137-
NodeInfo: apiv1Node1,
141+
NodeInfo: apiv1Node1,
142+
NodeBytes: apiv1Node1Bytes,
138143
}, nil,
139144
).Once()
140145

@@ -144,7 +149,8 @@ func TestCloudProvider_TemplateNodeInfo(t *testing.T) {
144149
}),
145150
).Return(
146151
&protos.NodeGroupTemplateNodeInfoResponse{
147-
NodeInfo: apiv1Node2,
152+
NodeInfo: apiv1Node2,
153+
NodeBytes: apiv1Node2Bytes,
148154
}, nil,
149155
).Once()
150156

@@ -181,7 +187,8 @@ func TestCloudProvider_TemplateNodeInfo(t *testing.T) {
181187
}),
182188
).Return(
183189
&protos.NodeGroupTemplateNodeInfoResponse{
184-
NodeInfo: nil,
190+
NodeInfo: nil,
191+
NodeBytes: nil,
185192
}, nil,
186193
).Once()
187194

@@ -202,7 +209,8 @@ func TestCloudProvider_TemplateNodeInfo(t *testing.T) {
202209
}),
203210
).Return(
204211
&protos.NodeGroupTemplateNodeInfoResponse{
205-
NodeInfo: nil,
212+
NodeInfo: nil,
213+
NodeBytes: nil,
206214
},
207215
fmt.Errorf("mock error"),
208216
).Once()
@@ -223,7 +231,8 @@ func TestCloudProvider_TemplateNodeInfo(t *testing.T) {
223231
}),
224232
).Return(
225233
&protos.NodeGroupTemplateNodeInfoResponse{
226-
NodeInfo: nil,
234+
NodeInfo: nil,
235+
NodeBytes: nil,
227236
},
228237
status.Error(codes.Unimplemented, "mock error"),
229238
).Once()
@@ -257,6 +266,9 @@ func TestCloudProvider_GetOptions(t *testing.T) {
257266
ScaleDownUnneededTime: &v1.Duration{Duration: time.Minute},
258267
ScaleDownUnreadyTime: &v1.Duration{Duration: time.Hour},
259268
MaxNodeProvisionTime: &v1.Duration{Duration: time.Minute},
269+
ScaleDownUnneededDuration: durationpb.New(time.Minute),
270+
ScaleDownUnreadyDuration: durationpb.New(time.Hour),
271+
MaxNodeProvisionDuration: durationpb.New(time.Minute),
260272
ZeroOrMaxNodeScaling: true,
261273
IgnoreDaemonSetsUtilization: true,
262274
},
@@ -365,6 +377,9 @@ func TestCloudProvider_GetOptions(t *testing.T) {
365377
ScaleDownUnneededTime: &v1.Duration{Duration: time.Minute},
366378
ScaleDownUnreadyTime: &v1.Duration{Duration: time.Hour},
367379
MaxNodeProvisionTime: &v1.Duration{Duration: time.Minute},
380+
ScaleDownUnneededDuration: durationpb.New(time.Minute),
381+
ScaleDownUnreadyDuration: durationpb.New(time.Hour),
382+
MaxNodeProvisionDuration: durationpb.New(time.Minute),
368383
},
369384
},
370385
nil,

0 commit comments

Comments
 (0)