Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
2a8ec62e
Commit
2a8ec62e
authored
Mar 04, 2016
by
k8s-merge-robot
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #22522 from mwielgus/cm_utils
Auto commit by PR queue bot
parents
917fb426
0a7e344d
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
79 additions
and
8 deletions
+79
-8
autoscaling_utils.go
test/e2e/autoscaling_utils.go
+76
-5
cluster_size_autoscaling.go
test/e2e/cluster_size_autoscaling.go
+1
-1
horizontal_pod_autoscaling.go
test/e2e/horizontal_pod_autoscaling.go
+1
-1
initial_resources.go
test/e2e/initial_resources.go
+1
-1
No files found.
test/e2e/autoscaling_utils.go
View file @
2a8ec62e
...
@@ -33,6 +33,7 @@ const (
...
@@ -33,6 +33,7 @@ const (
staticConsumptionTimeInSeconds
=
3600
staticConsumptionTimeInSeconds
=
3600
dynamicRequestSizeInMillicores
=
20
dynamicRequestSizeInMillicores
=
20
dynamicRequestSizeInMegabytes
=
100
dynamicRequestSizeInMegabytes
=
100
dynamicRequestSizeCustomMetric
=
10
port
=
80
port
=
80
targetPort
=
8080
targetPort
=
8080
timeoutRC
=
120
*
time
.
Second
timeoutRC
=
120
*
time
.
Second
...
@@ -42,6 +43,7 @@ const (
...
@@ -42,6 +43,7 @@ const (
rcIsNil
=
"ERROR: replicationController = nil"
rcIsNil
=
"ERROR: replicationController = nil"
deploymentIsNil
=
"ERROR: deployment = nil"
deploymentIsNil
=
"ERROR: deployment = nil"
invalidKind
=
"ERROR: invalid workload kind for resource consumer"
invalidKind
=
"ERROR: invalid workload kind for resource consumer"
customMetricName
=
"QPS"
)
)
/*
/*
...
@@ -58,21 +60,26 @@ type ResourceConsumer struct {
...
@@ -58,21 +60,26 @@ type ResourceConsumer struct {
framework
*
Framework
framework
*
Framework
cpu
chan
int
cpu
chan
int
mem
chan
int
mem
chan
int
customMetric
chan
int
stopCPU
chan
int
stopCPU
chan
int
stopMem
chan
int
stopMem
chan
int
stopCustomMetric
chan
int
consumptionTimeInSeconds
int
consumptionTimeInSeconds
int
sleepTime
time
.
Duration
sleepTime
time
.
Duration
requestSizeInMillicores
int
requestSizeInMillicores
int
requestSizeInMegabytes
int
requestSizeInMegabytes
int
requestSizeCustomMetric
int
}
}
func
NewDynamicResourceConsumer
(
name
,
kind
string
,
replicas
,
initCPUTotal
,
initMemoryTotal
int
,
cpuLimit
,
memLimit
int64
,
framework
*
Framework
)
*
ResourceConsumer
{
func
NewDynamicResourceConsumer
(
name
,
kind
string
,
replicas
,
initCPUTotal
,
initMemoryTotal
,
initCustomMetric
int
,
cpuLimit
,
memLimit
int64
,
framework
*
Framework
)
*
ResourceConsumer
{
return
newResourceConsumer
(
name
,
kind
,
replicas
,
initCPUTotal
,
initMemoryTotal
,
dynamicConsumptionTimeInSeconds
,
dynamicRequestSizeInMillicores
,
dynamicRequestSizeInMegabytes
,
cpuLimit
,
memLimit
,
framework
)
return
newResourceConsumer
(
name
,
kind
,
replicas
,
initCPUTotal
,
initMemoryTotal
,
initCustomMetric
,
dynamicConsumptionTimeInSeconds
,
dynamicRequestSizeInMillicores
,
dynamicRequestSizeInMegabytes
,
dynamicRequestSizeCustomMetric
,
cpuLimit
,
memLimit
,
framework
)
}
}
// TODO this still defaults to replication controller
// TODO this still defaults to replication controller
func
NewStaticResourceConsumer
(
name
string
,
replicas
,
initCPUTotal
,
initMemoryTotal
int
,
cpuLimit
,
memLimit
int64
,
framework
*
Framework
)
*
ResourceConsumer
{
func
NewStaticResourceConsumer
(
name
string
,
replicas
,
initCPUTotal
,
initMemoryTotal
,
initCustomMetric
int
,
cpuLimit
,
memLimit
int64
,
framework
*
Framework
)
*
ResourceConsumer
{
return
newResourceConsumer
(
name
,
kindRC
,
replicas
,
initCPUTotal
,
initMemoryTotal
,
staticConsumptionTimeInSeconds
,
initCPUTotal
/
replicas
,
initMemoryTotal
/
replicas
,
cpuLimit
,
memLimit
,
framework
)
return
newResourceConsumer
(
name
,
kindRC
,
replicas
,
initCPUTotal
,
initMemoryTotal
,
initCustomMetric
,
staticConsumptionTimeInSeconds
,
initCPUTotal
/
replicas
,
initMemoryTotal
/
replicas
,
initCustomMetric
/
replicas
,
cpuLimit
,
memLimit
,
framework
)
}
}
/*
/*
...
@@ -82,7 +89,9 @@ initMemoryTotal argument is in megabytes
...
@@ -82,7 +89,9 @@ initMemoryTotal argument is in megabytes
memLimit argument is in megabytes, memLimit is a maximum amount of memory that can be consumed by a single pod
memLimit argument is in megabytes, memLimit is a maximum amount of memory that can be consumed by a single pod
cpuLimit argument is in millicores, cpuLimit is a maximum amount of cpu that can be consumed by a single pod
cpuLimit argument is in millicores, cpuLimit is a maximum amount of cpu that can be consumed by a single pod
*/
*/
func
newResourceConsumer
(
name
,
kind
string
,
replicas
,
initCPUTotal
,
initMemoryTotal
,
consumptionTimeInSeconds
,
requestSizeInMillicores
,
requestSizeInMegabytes
int
,
cpuLimit
,
memLimit
int64
,
framework
*
Framework
)
*
ResourceConsumer
{
func
newResourceConsumer
(
name
,
kind
string
,
replicas
,
initCPUTotal
,
initMemoryTotal
,
initCustomMetric
,
consumptionTimeInSeconds
,
requestSizeInMillicores
,
requestSizeInMegabytes
int
,
requestSizeCustomMetric
int
,
cpuLimit
,
memLimit
int64
,
framework
*
Framework
)
*
ResourceConsumer
{
runServiceAndWorkloadForResourceConsumer
(
framework
.
Client
,
framework
.
Namespace
.
Name
,
name
,
kind
,
replicas
,
cpuLimit
,
memLimit
)
runServiceAndWorkloadForResourceConsumer
(
framework
.
Client
,
framework
.
Namespace
.
Name
,
name
,
kind
,
replicas
,
cpuLimit
,
memLimit
)
rc
:=
&
ResourceConsumer
{
rc
:=
&
ResourceConsumer
{
name
:
name
,
name
:
name
,
...
@@ -90,17 +99,22 @@ func newResourceConsumer(name, kind string, replicas, initCPUTotal, initMemoryTo
...
@@ -90,17 +99,22 @@ func newResourceConsumer(name, kind string, replicas, initCPUTotal, initMemoryTo
framework
:
framework
,
framework
:
framework
,
cpu
:
make
(
chan
int
),
cpu
:
make
(
chan
int
),
mem
:
make
(
chan
int
),
mem
:
make
(
chan
int
),
customMetric
:
make
(
chan
int
),
stopCPU
:
make
(
chan
int
),
stopCPU
:
make
(
chan
int
),
stopMem
:
make
(
chan
int
),
stopMem
:
make
(
chan
int
),
stopCustomMetric
:
make
(
chan
int
),
consumptionTimeInSeconds
:
consumptionTimeInSeconds
,
consumptionTimeInSeconds
:
consumptionTimeInSeconds
,
sleepTime
:
time
.
Duration
(
consumptionTimeInSeconds
)
*
time
.
Second
,
sleepTime
:
time
.
Duration
(
consumptionTimeInSeconds
)
*
time
.
Second
,
requestSizeInMillicores
:
requestSizeInMillicores
,
requestSizeInMillicores
:
requestSizeInMillicores
,
requestSizeInMegabytes
:
requestSizeInMegabytes
,
requestSizeInMegabytes
:
requestSizeInMegabytes
,
requestSizeCustomMetric
:
requestSizeCustomMetric
,
}
}
go
rc
.
makeConsumeCPURequests
()
go
rc
.
makeConsumeCPURequests
()
rc
.
ConsumeCPU
(
initCPUTotal
)
rc
.
ConsumeCPU
(
initCPUTotal
)
go
rc
.
makeConsumeMemRequests
()
go
rc
.
makeConsumeMemRequests
()
rc
.
ConsumeMem
(
initMemoryTotal
)
rc
.
ConsumeMem
(
initMemoryTotal
)
go
rc
.
makeConsumeCustomMetric
()
rc
.
ConsumeCustomMetric
(
initCustomMetric
)
return
rc
return
rc
}
}
...
@@ -116,6 +130,12 @@ func (rc *ResourceConsumer) ConsumeMem(megabytes int) {
...
@@ -116,6 +130,12 @@ func (rc *ResourceConsumer) ConsumeMem(megabytes int) {
rc
.
mem
<-
megabytes
rc
.
mem
<-
megabytes
}
}
// ConsumeMem consumes given number of custom metric
func
(
rc
*
ResourceConsumer
)
ConsumeCustomMetric
(
amount
int
)
{
Logf
(
"RC %s: consume custom metric %v in total"
,
rc
.
name
,
amount
)
rc
.
customMetric
<-
amount
}
func
(
rc
*
ResourceConsumer
)
makeConsumeCPURequests
()
{
func
(
rc
*
ResourceConsumer
)
makeConsumeCPURequests
()
{
defer
GinkgoRecover
()
defer
GinkgoRecover
()
var
count
int
var
count
int
...
@@ -172,6 +192,35 @@ func (rc *ResourceConsumer) makeConsumeMemRequests() {
...
@@ -172,6 +192,35 @@ func (rc *ResourceConsumer) makeConsumeMemRequests() {
}
}
}
}
func
(
rc
*
ResourceConsumer
)
makeConsumeCustomMetric
()
{
defer
GinkgoRecover
()
var
count
int
var
rest
int
sleepTime
:=
time
.
Duration
(
0
)
for
{
select
{
case
total
:=
<-
rc
.
customMetric
:
Logf
(
"RC %s: consume custom metric %v in total"
,
rc
.
name
,
total
)
if
rc
.
requestSizeInMegabytes
!=
0
{
count
=
total
/
rc
.
requestSizeCustomMetric
}
rest
=
total
-
count
*
rc
.
requestSizeCustomMetric
case
<-
time
.
After
(
sleepTime
)
:
Logf
(
"RC %s: sending %v requests to consume %v custom metric each and 1 request to consume %v"
,
rc
.
name
,
count
,
rc
.
requestSizeCustomMetric
,
rest
)
if
count
>
0
{
rc
.
sendConsumeCustomMetric
(
count
,
rc
.
requestSizeCustomMetric
,
rc
.
consumptionTimeInSeconds
)
}
if
rest
>
0
{
go
rc
.
sendOneConsumeCustomMetric
(
rest
,
rc
.
consumptionTimeInSeconds
)
}
sleepTime
=
rc
.
sleepTime
case
<-
rc
.
stopCustomMetric
:
return
}
}
}
func
(
rc
*
ResourceConsumer
)
sendConsumeCPURequests
(
requests
,
millicores
,
durationSec
int
)
{
func
(
rc
*
ResourceConsumer
)
sendConsumeCPURequests
(
requests
,
millicores
,
durationSec
int
)
{
for
i
:=
0
;
i
<
requests
;
i
++
{
for
i
:=
0
;
i
<
requests
;
i
++
{
go
rc
.
sendOneConsumeCPURequest
(
millicores
,
durationSec
)
go
rc
.
sendOneConsumeCPURequest
(
millicores
,
durationSec
)
...
@@ -184,6 +233,12 @@ func (rc *ResourceConsumer) sendConsumeMemRequests(requests, megabytes, duration
...
@@ -184,6 +233,12 @@ func (rc *ResourceConsumer) sendConsumeMemRequests(requests, megabytes, duration
}
}
}
}
func
(
rc
*
ResourceConsumer
)
sendConsumeCustomMetric
(
requests
,
delta
,
durationSec
int
)
{
for
i
:=
0
;
i
<
requests
;
i
++
{
go
rc
.
sendOneConsumeCustomMetric
(
delta
,
durationSec
)
}
}
// sendOneConsumeCPURequest sends POST request for cpu consumption
// sendOneConsumeCPURequest sends POST request for cpu consumption
func
(
rc
*
ResourceConsumer
)
sendOneConsumeCPURequest
(
millicores
int
,
durationSec
int
)
{
func
(
rc
*
ResourceConsumer
)
sendOneConsumeCPURequest
(
millicores
int
,
durationSec
int
)
{
defer
GinkgoRecover
()
defer
GinkgoRecover
()
...
@@ -212,6 +267,21 @@ func (rc *ResourceConsumer) sendOneConsumeMemRequest(megabytes int, durationSec
...
@@ -212,6 +267,21 @@ func (rc *ResourceConsumer) sendOneConsumeMemRequest(megabytes int, durationSec
expectNoError
(
err
)
expectNoError
(
err
)
}
}
// sendOneConsumeCustomMetric sends POST request for custom metric consumption
func
(
rc
*
ResourceConsumer
)
sendOneConsumeCustomMetric
(
delta
int
,
durationSec
int
)
{
defer
GinkgoRecover
()
proxyRequest
,
err
:=
getServicesProxyRequest
(
rc
.
framework
.
Client
,
rc
.
framework
.
Client
.
Post
())
expectNoError
(
err
)
_
,
err
=
proxyRequest
.
Namespace
(
rc
.
framework
.
Namespace
.
Name
)
.
Name
(
rc
.
name
)
.
Suffix
(
"BumpMetric"
)
.
Param
(
"metric"
,
customMetricName
)
.
Param
(
"delta"
,
strconv
.
Itoa
(
delta
))
.
Param
(
"durationSec"
,
strconv
.
Itoa
(
durationSec
))
.
DoRaw
()
expectNoError
(
err
)
}
func
(
rc
*
ResourceConsumer
)
GetReplicas
()
int
{
func
(
rc
*
ResourceConsumer
)
GetReplicas
()
int
{
switch
rc
.
kind
{
switch
rc
.
kind
{
case
kindRC
:
case
kindRC
:
...
@@ -262,6 +332,7 @@ func (rc *ResourceConsumer) CleanUp() {
...
@@ -262,6 +332,7 @@ func (rc *ResourceConsumer) CleanUp() {
By
(
fmt
.
Sprintf
(
"Removing consuming RC %s"
,
rc
.
name
))
By
(
fmt
.
Sprintf
(
"Removing consuming RC %s"
,
rc
.
name
))
rc
.
stopCPU
<-
0
rc
.
stopCPU
<-
0
rc
.
stopMem
<-
0
rc
.
stopMem
<-
0
rc
.
stopCustomMetric
<-
0
// Wait some time to ensure all child goroutines are finished.
// Wait some time to ensure all child goroutines are finished.
time
.
Sleep
(
10
*
time
.
Second
)
time
.
Sleep
(
10
*
time
.
Second
)
expectNoError
(
DeleteRC
(
rc
.
framework
.
Client
,
rc
.
framework
.
Namespace
.
Name
,
rc
.
name
))
expectNoError
(
DeleteRC
(
rc
.
framework
.
Client
,
rc
.
framework
.
Namespace
.
Name
,
rc
.
name
))
...
...
test/e2e/cluster_size_autoscaling.go
View file @
2a8ec62e
...
@@ -127,7 +127,7 @@ func createConsumingRCs(f *Framework, name string, count, cpuPerReplica, memPerR
...
@@ -127,7 +127,7 @@ func createConsumingRCs(f *Framework, name string, count, cpuPerReplica, memPerR
var
res
[]
*
ResourceConsumer
var
res
[]
*
ResourceConsumer
for
i
:=
1
;
i
<=
count
;
i
++
{
for
i
:=
1
;
i
<=
count
;
i
++
{
name
:=
fmt
.
Sprintf
(
"%s-%d"
,
name
,
i
)
name
:=
fmt
.
Sprintf
(
"%s-%d"
,
name
,
i
)
res
=
append
(
res
,
NewStaticResourceConsumer
(
name
,
1
,
cpuPerReplica
,
memPerReplica
,
int64
(
cpuPerReplica
),
int64
(
memPerReplica
+
100
),
f
))
res
=
append
(
res
,
NewStaticResourceConsumer
(
name
,
1
,
cpuPerReplica
,
memPerReplica
,
0
,
int64
(
cpuPerReplica
),
int64
(
memPerReplica
+
100
),
f
))
}
}
return
res
return
res
}
}
...
...
test/e2e/horizontal_pod_autoscaling.go
View file @
2a8ec62e
...
@@ -115,7 +115,7 @@ type HPAScaleTest struct {
...
@@ -115,7 +115,7 @@ type HPAScaleTest struct {
// The second state change (optional) is due to the CPU burst parameter, which HPA again responds to.
// The second state change (optional) is due to the CPU burst parameter, which HPA again responds to.
// TODO The use of 3 states is arbitrary, we could eventually make this test handle "n" states once this test stabilizes.
// TODO The use of 3 states is arbitrary, we could eventually make this test handle "n" states once this test stabilizes.
func
(
scaleTest
*
HPAScaleTest
)
run
(
name
,
kind
string
,
rc
*
ResourceConsumer
,
f
*
Framework
)
{
func
(
scaleTest
*
HPAScaleTest
)
run
(
name
,
kind
string
,
rc
*
ResourceConsumer
,
f
*
Framework
)
{
rc
=
NewDynamicResourceConsumer
(
name
,
kind
,
scaleTest
.
initPods
,
scaleTest
.
totalInitialCPUUsage
,
0
,
scaleTest
.
perPodCPURequest
,
100
,
f
)
rc
=
NewDynamicResourceConsumer
(
name
,
kind
,
scaleTest
.
initPods
,
scaleTest
.
totalInitialCPUUsage
,
0
,
0
,
scaleTest
.
perPodCPURequest
,
100
,
f
)
defer
rc
.
CleanUp
()
defer
rc
.
CleanUp
()
createCPUHorizontalPodAutoscaler
(
rc
,
scaleTest
.
targetCPUUtilizationPercent
,
scaleTest
.
minPods
,
scaleTest
.
maxPods
,
scaleTest
.
useV1
)
createCPUHorizontalPodAutoscaler
(
rc
,
scaleTest
.
targetCPUUtilizationPercent
,
scaleTest
.
minPods
,
scaleTest
.
maxPods
,
scaleTest
.
useV1
)
rc
.
WaitForReplicas
(
scaleTest
.
firstScale
)
rc
.
WaitForReplicas
(
scaleTest
.
firstScale
)
...
...
test/e2e/initial_resources.go
View file @
2a8ec62e
...
@@ -37,7 +37,7 @@ var _ = Describe("Initial Resources [Feature:InitialResources] [Flaky]", func()
...
@@ -37,7 +37,7 @@ var _ = Describe("Initial Resources [Feature:InitialResources] [Flaky]", func()
cpu
:=
100
cpu
:=
100
mem
:=
200
mem
:=
200
for
i
:=
0
;
i
<
10
;
i
++
{
for
i
:=
0
;
i
<
10
;
i
++
{
rc
:=
NewStaticResourceConsumer
(
fmt
.
Sprintf
(
"ir-%d"
,
i
),
1
,
cpu
,
mem
,
int64
(
2
*
cpu
),
int64
(
2
*
mem
),
f
)
rc
:=
NewStaticResourceConsumer
(
fmt
.
Sprintf
(
"ir-%d"
,
i
),
1
,
cpu
,
mem
,
0
,
int64
(
2
*
cpu
),
int64
(
2
*
mem
),
f
)
defer
rc
.
CleanUp
()
defer
rc
.
CleanUp
()
}
}
// Wait some time to make sure usage data is gathered.
// Wait some time to make sure usage data is gathered.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment