Skip to content

Commit 55cf564

Browse files
committed
Copy entire testing folder
1 parent d871e7b commit 55cf564

File tree

107 files changed

+3927
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+3927
-0
lines changed
Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
# Stress testing access token validation
2+
#
3+
# Targeting 2 000 tokens with 5 000 total QPS for 5k node cluster, so it's 2.5
4+
# QPS per token.
5+
#
6+
# For this test number of tokens is not changed with number of nodes.
7+
# By default, those 2 000 tokens are are assigned to 80 service accounts, with
8+
# 25 tokens each. There is 1:1 mapping between deployments and service
9+
# accounts, so 80 deployments is generated, each with one pod.
10+
#
11+
# For smaller cluster, we scale down lineary QPS per token to
12+
# 2.5 * (Number of nodes)/(5 000). This results in 1 QPS per node, if there is
13+
# 2 000 tokens.
14+
#
15+
# Structure and mapping:
16+
# * For each namespace (by default 1), we are generating service accounts and
17+
# deployments (by default 80).
18+
# * For each service account we are generating tokens (by default 25).
19+
# * For each deployment we are creating pods (by default 1) and for those pods
20+
# we are mounting all tokens generated from linked service account.
21+
# * Each pod is running a number of clients equal to number of assigned tokens.
22+
#
23+
# When defining your own parameters:
24+
# Number of tokens = ${namespaces} * ${serviceAccounts} * ${tokensPerServiceAccount}
25+
# Total QPS = Number of tokens * ${replicas} * ${qpsPerWorker}
26+
#
27+
# For default values in 5k cluster this means:
28+
# Number of tokens = 1 * 80 * 25 = 2000
29+
# Total QPS = 2000 * 1 * 2.5 = 5000
30+
31+
# Size of test variables
32+
{{$namespaces := DefaultParam .CL2_ACCESS_TOKENS_NAMESPACES 1}}
33+
{{$serviceAccounts := DefaultParam .CL2_ACCESS_TOKENS_SERVICE_ACCOUNTS 80}}
34+
{{$tokensPerServiceAccount := DefaultParam .CL2_ACCESS_TOKENS_TOKENS_PER_SERVICE_ACCOUNT 25}}
35+
{{$replicas := DefaultParam .CL2_ACCESS_TOKENS_REPLICAS 1}}
36+
{{$qpsPerWorker := DefaultParam .CL2_ACCESS_TOKENS_QPS (MultiplyFloat 2.5 (DivideFloat .Nodes 5000))}}
37+
38+
# TestMetrics measurement variables
39+
{{$ENABLE_SYSTEM_POD_METRICS:= DefaultParam .ENABLE_SYSTEM_POD_METRICS true}}
40+
{{$ENABLE_RESTART_COUNT_CHECK := DefaultParam .ENABLE_RESTART_COUNT_CHECK true}}
41+
{{$RESTART_COUNT_THRESHOLD_OVERRIDES:= DefaultParam .RESTART_COUNT_THRESHOLD_OVERRIDES ""}}
42+
43+
# Configs
44+
{{$ALLOWED_SLOW_API_CALLS := DefaultParam .CL2_ALLOWED_SLOW_API_CALLS 0}}
45+
46+
name: access-tokens
47+
namespace:
48+
number: {{$namespaces}}
49+
tuningSets:
50+
- name: Sequence
51+
parallelismLimitedLoad:
52+
parallelismLimit: 1
53+
steps:
54+
- name: Starting measurements
55+
measurements:
56+
- Identifier: APIResponsivenessPrometheus
57+
Method: APIResponsivenessPrometheus
58+
Params:
59+
action: start
60+
- Identifier: TestMetrics
61+
Method: TestMetrics
62+
Params:
63+
action: start
64+
systemPodMetricsEnabled: {{$ENABLE_SYSTEM_POD_METRICS}}
65+
restartCountThresholdOverrides: {{YamlQuote $RESTART_COUNT_THRESHOLD_OVERRIDES 4}}
66+
enableRestartCountCheck: {{$ENABLE_RESTART_COUNT_CHECK}}
67+
allowedSlowCalls: {{$ALLOWED_SLOW_API_CALLS}}
68+
69+
- name: Creating ServiceAccounts
70+
phases:
71+
- namespaceRange:
72+
min: 1
73+
max: {{$namespaces}}
74+
replicasPerNamespace: 1
75+
tuningSet: Sequence
76+
objectBundle:
77+
- basename: service-account-getter
78+
objectTemplatePath: role.yaml
79+
- namespaceRange:
80+
min: 1
81+
max: {{$namespaces}}
82+
replicasPerNamespace: {{$serviceAccounts}}
83+
tuningSet: Sequence
84+
objectBundle:
85+
- basename: account
86+
objectTemplatePath: serviceAccount.yaml
87+
- basename: account
88+
objectTemplatePath: roleBinding.yaml
89+
templateFillMap:
90+
RoleName: service-account-getter
91+
92+
- name: Creating Tokens
93+
phases:
94+
{{range $i := Loop $serviceAccounts}}
95+
- namespaceRange:
96+
min: 1
97+
max: {{$namespaces}}
98+
replicasPerNamespace: {{$tokensPerServiceAccount}}
99+
tuningSet: Sequence
100+
objectBundle:
101+
- basename: account-{{$i}}
102+
objectTemplatePath: token.yaml
103+
{{end}}
104+
105+
106+
- name: Starting measurement for waiting for pods
107+
measurements:
108+
- Identifier: WaitForRunningPods
109+
Method: WaitForControlledPodsRunning
110+
Params:
111+
action: start
112+
apiVersion: apps/v1
113+
kind: Deployment
114+
labelSelector: group = access-tokens
115+
operationTimeout: 15m
116+
117+
- name: Creating pods
118+
phases:
119+
- namespaceRange:
120+
min: 1
121+
max: {{$namespaces}}
122+
replicasPerNamespace: {{$serviceAccounts}}
123+
tuningSet: Sequence
124+
objectBundle:
125+
- basename: account
126+
objectTemplatePath: deployment.yaml
127+
templateFillMap:
128+
QpsPerWorker: {{$qpsPerWorker}}
129+
Replicas: {{$replicas}}
130+
Tokens: {{$tokensPerServiceAccount}}
131+
132+
- name: Waiting for pods to be running
133+
measurements:
134+
- Identifier: WaitForRunningPods
135+
Method: WaitForControlledPodsRunning
136+
Params:
137+
action: gather
138+
139+
- name: Wait 5min
140+
measurements:
141+
- Identifier: Wait
142+
Method: Sleep
143+
Params:
144+
duration: 5m
145+
146+
- name: Deleting pods
147+
phases:
148+
- namespaceRange:
149+
min: 1
150+
max: {{$namespaces}}
151+
replicasPerNamespace: 0
152+
tuningSet: Sequence
153+
objectBundle:
154+
- basename: account
155+
objectTemplatePath: deployment.yaml
156+
templateFillMap:
157+
QpsPerWorker: {{$qpsPerWorker}}
158+
Replicas: {{$replicas}}
159+
Tokens: {{$tokensPerServiceAccount}}
160+
161+
- name: Waiting for pods to be deleted
162+
measurements:
163+
- Identifier: WaitForRunningPods
164+
Method: WaitForControlledPodsRunning
165+
Params:
166+
action: gather
167+
168+
- name: Collecting measurements
169+
measurements:
170+
- Identifier: APIResponsivenessPrometheus
171+
Method: APIResponsivenessPrometheus
172+
Params:
173+
action: gather
174+
enableViolations: true
175+
- Identifier: TestMetrics
176+
Method: TestMetrics
177+
Params:
178+
action: gather
179+
systemPodMetricsEnabled: {{$ENABLE_SYSTEM_POD_METRICS}}
180+
restartCountThresholdOverrides: {{YamlQuote $RESTART_COUNT_THRESHOLD_OVERRIDES 4}}
181+
enableRestartCountCheck: {{$ENABLE_RESTART_COUNT_CHECK}}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{{$name := .Name}}
2+
3+
apiVersion: apps/v1
4+
kind: Deployment
5+
metadata:
6+
name: {{.Name}}
7+
labels:
8+
group: access-tokens
9+
spec:
10+
selector:
11+
matchLabels:
12+
group: access-tokens
13+
name: {{.Name}}
14+
replicas: {{.Replicas}}
15+
template:
16+
metadata:
17+
labels:
18+
group: access-tokens
19+
name: {{.Name}}
20+
spec:
21+
imagePullPolicy: Always
22+
containers:
23+
- name: access-tokens
24+
image: gcr.io/k8s-testimages/perf-tests-util/access-tokens:v0.0.6
25+
args:
26+
{{range $tokenId := Loop .Tokens}}
27+
- --access-token-dirs=/var/tokens/{{$name}}-{{$tokenId}}
28+
{{end}}
29+
- --namespace={{.Namespace}}
30+
- --qps-per-worker={{.QpsPerWorker}}
31+
resources:
32+
requests:
33+
cpu: {{AddInt 10 (MultiplyFloat .Tokens .QpsPerWorker)}}m # 1mCpu per Token * per QPS
34+
memory: {{AddInt 50 (MultiplyInt .Tokens 5)}}Mi
35+
volumeMounts:
36+
{{range $j := Loop .Tokens}}
37+
- name: {{$name}}-{{$j}}
38+
mountPath: /var/tokens/{{$name}}-{{$j}}
39+
{{end}}
40+
volumes:
41+
{{range $j := Loop .Tokens}}
42+
- name: {{$name}}-{{$j}}
43+
secret:
44+
secretName: {{$name}}-{{$j}}
45+
{{end}}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: rbac.authorization.k8s.io/v1
2+
kind: Role
3+
metadata:
4+
name: {{.Name}}
5+
rules:
6+
- apiGroups:
7+
- ""
8+
resources:
9+
- serviceaccounts
10+
verbs:
11+
- get
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: rbac.authorization.k8s.io/v1
2+
kind: RoleBinding
3+
metadata:
4+
name: {{.Name}}
5+
roleRef:
6+
apiGroup: rbac.authorization.k8s.io
7+
kind: Role
8+
name: {{.RoleName}}-0
9+
subjects:
10+
- kind: ServiceAccount
11+
name: {{.Name}}
12+
namespace: {{.Namespace}}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
apiVersion: v1
2+
kind: ServiceAccount
3+
metadata:
4+
name: {{.Name}}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: {{.Name}}
5+
annotations:
6+
kubernetes.io/service-account.name: {{.BaseName}}
7+
type: kubernetes.io/service-account-token
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
{{$MODE := DefaultParam .MODE "Indexed"}}
2+
{{$NODES_PER_NAMESPACE := MinInt .Nodes (DefaultParam .NODES_PER_NAMESPACE 100)}}
3+
{{$PODS_PER_NODE := DefaultParam .PODS_PER_NODE 30}}
4+
{{$LOAD_TEST_THROUGHPUT := DefaultParam .CL2_LOAD_TEST_THROUGHPUT 10}}
5+
6+
{{$totalPods := MultiplyInt $PODS_PER_NODE .Nodes}}
7+
{{$namespaces := DivideInt .Nodes $NODES_PER_NAMESPACE}}
8+
{{$podsPerNamespace := DivideInt $totalPods $namespaces}}
9+
10+
# small_job: 1/2 of namespace pods should be in small Jobs.
11+
{{$smallJobSize := 5}}
12+
{{$smallJobsPerNamespace := DivideInt $podsPerNamespace (MultiplyInt 2 $smallJobSize)}}
13+
# medium_job: 1/4 of namespace pods should be in medium Jobs.
14+
{{$mediumJobSize := 20}}
15+
{{$mediumJobsPerNamespace := DivideInt $podsPerNamespace (MultiplyInt 4 $mediumJobSize)}}
16+
# Large_job: 1/4 of namespace pods should be in large Jobs.
17+
{{$largeJobSize := 400}}
18+
{{$largeJobsPerNamespace := DivideInt $podsPerNamespace (MultiplyInt 4 $largeJobSize)}}
19+
20+
{{$jobRunningTime := DefaultParam .CL2_JOB_RUNNING_TIME "30s"}}
21+
22+
name: batch
23+
24+
namespace:
25+
number: {{$namespaces}}
26+
27+
tuningSets:
28+
- name: UniformQPS
29+
qpsLoad:
30+
qps: {{$LOAD_TEST_THROUGHPUT}}
31+
32+
steps:
33+
- name: Start measurements
34+
measurements:
35+
- Identifier: WaitForFinishedJobs
36+
Method: WaitForFinishedJobs
37+
Params:
38+
action: start
39+
labelSelector: group = test-job
40+
- Identifier: JobLifecycleLatency
41+
Method: JobLifecycleLatency
42+
Params:
43+
action: start
44+
labelSelector: group = test-job
45+
- name: Create {{$MODE}} jobs
46+
phases:
47+
- namespaceRange:
48+
min: 1
49+
max: {{$namespaces}}
50+
replicasPerNamespace: {{$smallJobsPerNamespace}}
51+
tuningSet: UniformQPS
52+
objectBundle:
53+
- basename: small
54+
objectTemplatePath: "job.yaml"
55+
templateFillMap:
56+
Replicas: {{$smallJobSize}}
57+
Mode: {{$MODE}}
58+
Sleep: {{$jobRunningTime}}
59+
- namespaceRange:
60+
min: 1
61+
max: {{$namespaces}}
62+
replicasPerNamespace: {{$mediumJobsPerNamespace}}
63+
tuningSet: UniformQPS
64+
objectBundle:
65+
- basename: medium
66+
objectTemplatePath: "job.yaml"
67+
templateFillMap:
68+
Replicas: {{$mediumJobSize}}
69+
Mode: {{$MODE}}
70+
Sleep: {{$jobRunningTime}}
71+
- namespaceRange:
72+
min: 1
73+
max: {{$namespaces}}
74+
replicasPerNamespace: {{$largeJobsPerNamespace}}
75+
tuningSet: UniformQPS
76+
objectBundle:
77+
- basename: large
78+
objectTemplatePath: "job.yaml"
79+
templateFillMap:
80+
Replicas: {{$largeJobSize}}
81+
Mode: {{$MODE}}
82+
Sleep: {{$jobRunningTime}}
83+
- name: Wait for {{$MODE}} jobs to finish
84+
measurements:
85+
- Identifier: JobLifecycleLatency
86+
Method: JobLifecycleLatency
87+
Params:
88+
action: gather
89+
timeout: 10m
90+
- Identifier: WaitForFinishedJobs
91+
Method: WaitForFinishedJobs
92+
Params:
93+
action: gather
94+
timeout: 10m
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
apiVersion: batch/v1
2+
kind: Job
3+
metadata:
4+
name: {{.Name}}
5+
labels:
6+
group: test-job
7+
spec:
8+
parallelism: {{.Replicas}}
9+
completions: {{.Replicas}}
10+
completionMode: {{.Mode}}
11+
template:
12+
metadata:
13+
labels:
14+
group: test-pod
15+
spec:
16+
containers:
17+
- name: {{.Name}}
18+
image: gcr.io/k8s-staging-perf-tests/sleep:v0.0.3
19+
args:
20+
- {{.Sleep}}
21+
restartPolicy: Never
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
RESTART_COUNT_THRESHOLD_OVERRIDES: |
2+
# Main purpose of this check is detection crashlooping pods.
3+
# With enabled node killer pods running on a killed node crash, and this is expected
4+
coredns: 1
5+
fluentd-gcp: 1
6+
kube-proxy: 1
7+
konnectivity-agent: 1
8+
metadata-proxy: 1
9+
prometheus-to-sd-exporter: 1
10+
volume-snapshot-controller: 1
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ENABLE_CHAOSMONKEY: true

0 commit comments

Comments
 (0)