Skip to content

Commit f653d07

Browse files
committed
feature: add MetricsUpdateIntervalSeconds args option in trimaran plugins
Signed-off-by: googs1025 <[email protected]>
1 parent f071739 commit f653d07

File tree

8 files changed

+57
-12
lines changed

8 files changed

+57
-12
lines changed

apis/config/scheme/scheme_test.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,8 @@ func TestCodecsEncodePluginConfig(t *testing.T) {
280280
Type: config.Prometheus,
281281
Address: "http://prometheus-k8s.monitoring.svc.cluster.local:9090",
282282
},
283-
WatcherAddress: "http://deadbeef:2020"},
283+
MetricsUpdateIntervalSeconds: 30,
284+
WatcherAddress: "http://deadbeef:2020"},
284285
TargetUtilization: 60,
285286
DefaultRequests: corev1.ResourceList{
286287
corev1.ResourceCPU: testCPUQuantity,
@@ -297,7 +298,8 @@ func TestCodecsEncodePluginConfig(t *testing.T) {
297298
Address: "http://prometheus-k8s.monitoring.svc.cluster.local:9090",
298299
InsecureSkipVerify: false,
299300
},
300-
WatcherAddress: "http://deadbeef:2020"},
301+
MetricsUpdateIntervalSeconds: 30,
302+
WatcherAddress: "http://deadbeef:2020"},
301303
SafeVarianceMargin: v1.DefaultSafeVarianceMargin,
302304
SafeVarianceSensitivity: v1.DefaultSafeVarianceSensitivity,
303305
},
@@ -311,7 +313,8 @@ func TestCodecsEncodePluginConfig(t *testing.T) {
311313
Address: "http://prometheus-k8s.monitoring.svc.cluster.local:9090",
312314
InsecureSkipVerify: false,
313315
},
314-
WatcherAddress: "http://deadbeef:2020"},
316+
MetricsUpdateIntervalSeconds: 30,
317+
WatcherAddress: "http://deadbeef:2020"},
315318
SmoothingWindowSize: v1.DefaultSmoothingWindowSize,
316319
RiskLimitWeights: map[corev1.ResourceName]float64{
317320
corev1.ResourceCPU: v1.DefaultRiskLimitWeight,
@@ -387,6 +390,7 @@ profiles:
387390
insecureSkipVerify: false
388391
token: ""
389392
type: Prometheus
393+
metricsUpdateIntervalSeconds: 30
390394
targetUtilization: 60
391395
watcherAddress: http://deadbeef:2020
392396
name: TargetLoadPacking
@@ -398,6 +402,7 @@ profiles:
398402
insecureSkipVerify: false
399403
token: ""
400404
type: Prometheus
405+
metricsUpdateIntervalSeconds: 30
401406
safeVarianceMargin: 1
402407
safeVarianceSensitivity: 1
403408
watcherAddress: http://deadbeef:2020
@@ -410,6 +415,7 @@ profiles:
410415
insecureSkipVerify: false
411416
token: ""
412417
type: Prometheus
418+
metricsUpdateIntervalSeconds: 30
413419
riskLimitWeights:
414420
cpu: 0.5
415421
memory: 0.5

apis/config/types.go

+2
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ type TrimaranSpec struct {
8888
MetricProvider MetricProviderSpec
8989
// Address of load watcher service
9090
WatcherAddress string
91+
// Interval in seconds for periodic metrics updates. Default is 30 seconds if not set.
92+
MetricsUpdateIntervalSeconds int32
9193
}
9294

9395
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

apis/config/v1/defaults.go

+5
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ var (
8080
// DefaultInsecureSkipVerify is whether to skip the certificate verification
8181
DefaultInsecureSkipVerify = true
8282

83+
DefaultMetricsUpdateIntervalSeconds int32 = 30
84+
8385
defaultResourceSpec = []schedulerconfigv1.ResourceSpec{
8486
{Name: string(v1.ResourceCPU), Weight: 1},
8587
{Name: string(v1.ResourceMemory), Weight: 1},
@@ -133,6 +135,9 @@ func SetDefaultTrimaranSpec(args *TrimaranSpec) {
133135
if args.MetricProvider.Type == Prometheus && args.MetricProvider.InsecureSkipVerify == nil {
134136
args.MetricProvider.InsecureSkipVerify = &DefaultInsecureSkipVerify
135137
}
138+
if args.MetricsUpdateIntervalSeconds == nil {
139+
args.MetricsUpdateIntervalSeconds = &DefaultMetricsUpdateIntervalSeconds
140+
}
136141
}
137142

138143
// SetDefaults_TargetLoadPackingArgs sets the default parameters for TargetLoadPacking plugin

apis/config/v1/defaults_test.go

+21-7
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,9 @@ func TestSchedulingDefaults(t *testing.T) {
8686
TrimaranSpec: TrimaranSpec{
8787
MetricProvider: MetricProviderSpec{
8888
Type: "KubernetesMetricsServer",
89-
}},
89+
},
90+
MetricsUpdateIntervalSeconds: pointer.Int32(30),
91+
},
9092
DefaultRequests: v1.ResourceList{v1.ResourceCPU: resource.MustParse(
9193
strconv.FormatInt(DefaultRequestsMilliCores, 10) + "m")},
9294
DefaultRequestsMultiplier: pointer.StringPtr("1.5"),
@@ -104,7 +106,9 @@ func TestSchedulingDefaults(t *testing.T) {
104106
},
105107
expect: &TargetLoadPackingArgs{
106108
TrimaranSpec: TrimaranSpec{
107-
WatcherAddress: pointer.StringPtr("http://localhost:2020")},
109+
WatcherAddress: pointer.StringPtr("http://localhost:2020"),
110+
MetricsUpdateIntervalSeconds: pointer.Int32(30),
111+
},
108112
DefaultRequests: v1.ResourceList{v1.ResourceCPU: resource.MustParse("100m")},
109113
DefaultRequestsMultiplier: pointer.StringPtr("2.5"),
110114
TargetUtilization: pointer.Int64Ptr(50),
@@ -117,7 +121,9 @@ func TestSchedulingDefaults(t *testing.T) {
117121
TrimaranSpec: TrimaranSpec{
118122
MetricProvider: MetricProviderSpec{
119123
Type: "KubernetesMetricsServer",
120-
}},
124+
},
125+
MetricsUpdateIntervalSeconds: pointer.Int32(30),
126+
},
121127
SafeVarianceMargin: pointer.Float64Ptr(1.0),
122128
SafeVarianceSensitivity: pointer.Float64Ptr(1.0),
123129
},
@@ -132,7 +138,9 @@ func TestSchedulingDefaults(t *testing.T) {
132138
TrimaranSpec: TrimaranSpec{
133139
MetricProvider: MetricProviderSpec{
134140
Type: "KubernetesMetricsServer",
135-
}},
141+
},
142+
MetricsUpdateIntervalSeconds: pointer.Int32(30),
143+
},
136144
SafeVarianceMargin: pointer.Float64Ptr(2.0),
137145
SafeVarianceSensitivity: pointer.Float64Ptr(2.0),
138146
},
@@ -144,7 +152,9 @@ func TestSchedulingDefaults(t *testing.T) {
144152
TrimaranSpec: TrimaranSpec{
145153
MetricProvider: MetricProviderSpec{
146154
Type: "KubernetesMetricsServer",
147-
}},
155+
},
156+
MetricsUpdateIntervalSeconds: pointer.Int32(30),
157+
},
148158
SmoothingWindowSize: pointer.Int64Ptr(5),
149159
RiskLimitWeights: map[v1.ResourceName]float64{
150160
v1.ResourceCPU: 0.5,
@@ -165,7 +175,9 @@ func TestSchedulingDefaults(t *testing.T) {
165175
TrimaranSpec: TrimaranSpec{
166176
MetricProvider: MetricProviderSpec{
167177
Type: "KubernetesMetricsServer",
168-
}},
178+
},
179+
MetricsUpdateIntervalSeconds: pointer.Int32(30),
180+
},
169181
SmoothingWindowSize: pointer.Int64Ptr(10),
170182
RiskLimitWeights: map[v1.ResourceName]float64{
171183
v1.ResourceCPU: 0.2,
@@ -186,7 +198,9 @@ func TestSchedulingDefaults(t *testing.T) {
186198
TrimaranSpec: TrimaranSpec{
187199
MetricProvider: MetricProviderSpec{
188200
Type: "KubernetesMetricsServer",
189-
}},
201+
},
202+
MetricsUpdateIntervalSeconds: pointer.Int32(30),
203+
},
190204
SmoothingWindowSize: pointer.Int64Ptr(10),
191205
RiskLimitWeights: map[v1.ResourceName]float64{
192206
v1.ResourceCPU: 0.5,

apis/config/v1/types.go

+2
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ type TrimaranSpec struct {
8888
MetricProvider MetricProviderSpec `json:"metricProvider,omitempty"`
8989
// Address of load watcher service
9090
WatcherAddress *string `json:"watcherAddress,omitempty"`
91+
// Interval in seconds for periodic metrics updates. Default is 30 seconds if not set.
92+
MetricsUpdateIntervalSeconds *int32 `json:"metricsUpdateIntervalSeconds,omitempty"`
9193
}
9294

9395
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

apis/config/v1/zz_generated.conversion.go

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apis/config/v1/zz_generated.deepcopy.go

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/trimaran/collector.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import (
3030
)
3131

3232
const (
33-
metricsUpdateIntervalSeconds = 30
33+
defaultMetricsUpdateIntervalSeconds = 30
3434
)
3535

3636
// Collector : get data from load watcher, encapsulating the load watcher and its operations
@@ -69,6 +69,11 @@ func NewCollector(logger klog.Logger, trimaranSpec *pluginConfig.TrimaranSpec) (
6969
client, _ = loadwatcherapi.NewLibraryClient(opts)
7070
}
7171

72+
metricsUpdateIntervalSeconds := trimaranSpec.MetricsUpdateIntervalSeconds
73+
if metricsUpdateIntervalSeconds == 0 {
74+
metricsUpdateIntervalSeconds = defaultMetricsUpdateIntervalSeconds
75+
}
76+
7277
collector := &Collector{
7378
client: client,
7479
}
@@ -80,7 +85,7 @@ func NewCollector(logger klog.Logger, trimaranSpec *pluginConfig.TrimaranSpec) (
8085
}
8186
// start periodic updates
8287
go func() {
83-
metricsUpdaterTicker := time.NewTicker(time.Second * metricsUpdateIntervalSeconds)
88+
metricsUpdaterTicker := time.NewTicker(time.Second * time.Duration(metricsUpdateIntervalSeconds))
8489
for range metricsUpdaterTicker.C {
8590
err = collector.updateMetrics(logger)
8691
if err != nil {

0 commit comments

Comments
 (0)