17
17
set -e
18
18
set -x
19
19
20
- REPO_ROOT=$( git rev-parse --show-toplevel)
21
- cd " ${REPO_ROOT} "
22
- cd ..
23
- WORKSPACE=$( pwd)
24
- cd " ${WORKSPACE} /kops"
25
-
26
- # Create bindir
27
- BINDIR=" ${WORKSPACE} /bin"
28
- export PATH=" ${BINDIR} :${PATH} "
29
- mkdir -p " ${BINDIR} "
30
-
31
- # Build kubetest-2 kOps support
32
- pushd " ${WORKSPACE} /kops"
33
- GOBIN=${BINDIR} make test-e2e-install
34
- popd
35
-
36
- # Setup our cleanup function; as we allocate resources we set a variable to indicate they should be cleaned up
37
- function cleanup {
38
- # shellcheck disable=SC2153
39
- if [[ " ${DELETE_CLUSTER:- } " == " true" ]]; then
40
- kubetest2 kops " ${KUBETEST2_ARGS[@]} " --down || echo " kubetest2 down failed"
41
- fi
42
- }
43
- trap cleanup EXIT
20
+ make test-e2e-install
44
21
45
22
# Default cluster name
46
23
SCRIPT_NAME=$( basename " $( dirname " $0 " ) " )
@@ -53,30 +30,26 @@ if [[ -z "${K8S_VERSION:-}" ]]; then
53
30
K8S_VERSION=" $( curl -s -L https://dl.k8s.io/release/stable.txt) "
54
31
fi
55
32
56
- # Download latest prebuilt kOps
57
- if [[ -z " ${KOPS_BASE_URL:- } " ]]; then
58
- KOPS_BASE_URL=" $( curl -s https://storage.googleapis.com/kops-ci/bin/latest-ci.txt) "
59
- fi
60
- export KOPS_BASE_URL
61
-
62
- KOPS_BIN=${BINDIR} /kops
63
- wget -qO " ${KOPS_BIN} " " $KOPS_BASE_URL /$( go env GOOS) /$( go env GOARCH) /kops"
64
- chmod +x " ${KOPS_BIN} "
33
+ # A temp patch for kubetest2 https://github.com/kubernetes-sigs/kubetest2/pull/256
34
+ git clone https://github.com/kubernetes-sigs/kubetest2.git /tmp/kubetest2
35
+ pushd /tmp/kubetest2
36
+ make install-all
37
+ popd
65
38
66
39
# Default cloud provider to aws
67
40
if [[ -z " ${CLOUD_PROVIDER:- } " ]]; then
68
41
CLOUD_PROVIDER=" aws"
69
42
fi
70
43
echo " CLOUD_PROVIDER=${CLOUD_PROVIDER} "
71
-
72
- # KOPS_STATE_STORE holds metadata about the clusters we create
73
- if [[ -z " ${KOPS_STATE_STORE:- } " ]]; then
74
- echo " Must specify KOPS_STATE_STORE"
75
- exit 1
44
+ if [[ " ${CLOUD_PROVIDER} " != " gce" ]]; then
45
+ # KOPS_STATE_STORE holds metadata about the clusters we create
46
+ if [[ -z " ${KOPS_STATE_STORE:- } " ]]; then
47
+ echo " Must specify KOPS_STATE_STORE"
48
+ exit 1
49
+ fi
50
+ echo " KOPS_STATE_STORE=${KOPS_STATE_STORE} "
51
+ export KOPS_STATE_STORE
76
52
fi
77
- echo " KOPS_STATE_STORE=${KOPS_STATE_STORE} "
78
- export KOPS_STATE_STORE
79
-
80
53
81
54
if [[ -z " ${ADMIN_ACCESS:- } " ]]; then
82
55
ADMIN_ACCESS=" 0.0.0.0/0" # Or use your IPv4 with /32
@@ -86,12 +59,25 @@ echo "ADMIN_ACCESS=${ADMIN_ACCESS}"
86
59
# cilium does not yet pass conformance tests (shared hostport test)
87
60
# create_args="--networking cilium"
88
61
create_args=()
89
- create_args=(" --network-cidr=10.0.0.0/16,10.1.0.0/16,10.2.0.0/16,10.3.0.0/16,10.4.0.0/16,10.5.0.0/16,10.6.0.0/16,10.7.0.0/16,10.8.0.0/16,10.9.0.0/16,10.10.0.0/16,10.11.0.0/16,10.12.0.0/16" )
62
+ if [[ " ${CLOUD_PROVIDER} " == " aws" ]]; then
63
+ create_args+=(" --network-cidr=10.0.0.0/16,10.1.0.0/16,10.2.0.0/16,10.3.0.0/16,10.4.0.0/16,10.5.0.0/16,10.6.0.0/16,10.7.0.0/16,10.8.0.0/16,10.9.0.0/16,10.10.0.0/16,10.11.0.0/16,10.12.0.0/16" )
64
+ create_args+=(" --node-size=t3a.medium,t3.medium,t2.medium,t3a.large,c5a.large,t3.large,c5.large,m5a.large,m6a.large,m5.large,c4.large,c7a.large,r5a.large,r6a.large,m7a.large" )
65
+ create_args+=(" --node-volume-size=20" )
66
+ create_args+=(" --zones=us-east-2a,us-east-2b,us-east-2c" )
67
+ create_args+=(" --image=${INSTANCE_IMAGE:- ssm:/ aws/ service/ canonical/ ubuntu/ server/ 20.04/ stable/ current/ amd64/ hvm/ ebs-gp2/ ami-id} " )
68
+ fi
69
+ if [[ " ${CLOUD_PROVIDER} " == " gce" ]]; then
70
+ create_args+=(" --zones=us-east1-b,us-east1-c,us-east1-d" )
71
+ create_args+=(" --node-size=e2-standard-2" )
72
+ create_args+=(" --node-volume-size=30" )
73
+ create_args+=(" --master-volume-size=1000" )
74
+ create_args+=(" --gce-service-account=default" )
75
+ create_args+=(" --image=${INSTANCE_IMAGE:- ubuntu-os-cloud/ ubuntu-2204-jammy-v20231213a} " )
76
+ fi
90
77
create_args+=(" --networking=${CNI_PLUGIN:- calico} " )
91
78
if [[ " ${CNI_PLUGIN} " == " amazonvpc" ]]; then
92
- create_args+=(" --set spec.networking.amazonVPC.env=ENABLE_PREFIX_DELEGATION=true" )
79
+ create_args+=(" --set spec.networking.amazonVPC.env=ENABLE_PREFIX_DELEGATION=true" )
93
80
fi
94
- create_args+=(" --image=${INSTANCE_IMAGE:- ssm:/ aws/ service/ canonical/ ubuntu/ server/ 20.04/ stable/ current/ amd64/ hvm/ ebs-gp2/ ami-id} " )
95
81
create_args+=(" --set spec.etcdClusters[0].manager.listenMetricsURLs=http://localhost:2382" )
96
82
create_args+=(" --set spec.etcdClusters[0].manager.env=ETCD_QUOTA_BACKEND_BYTES=8589934592" )
97
83
create_args+=(" --set spec.etcdClusters[1].manager.env=ETCD_QUOTA_BACKEND_BYTES=8589934592" )
@@ -114,18 +100,16 @@ create_args+=("--set spec.kubeAPIServer.maxRequestsInflight=800")
114
100
create_args+=(" --set spec.kubeAPIServer.maxMutatingRequestsInflight=400" )
115
101
create_args+=(" --set spec.kubeAPIServer.enableProfiling=true" )
116
102
create_args+=(" --set spec.kubeAPIServer.enableContentionProfiling=true" )
103
+ create_args+=(" --set spec.kubeAPIServer.logLevel=2" )
117
104
# this is required for Prometheus server to scrape metrics endpoint on APIServer
118
105
create_args+=(" --set spec.kubeAPIServer.anonymousAuth=true" )
119
106
# this is required for prometheus to scrape kube-proxy metrics endpoint
120
107
create_args+=(" --set spec.kubeProxy.metricsBindAddress=0.0.0.0:10249" )
121
108
create_args+=(" --node-count=${KUBE_NODE_COUNT:- 101} " )
122
109
# TODO: track failures of tests (HostPort & OIDC) when using `--dns=none`
123
- create_args+=(" --dns none" )
124
- create_args+=(" --node-size=t3a.medium,t3.medium,t2.medium,t3a.large,c5a.large,t3.large,c5.large,m5a.large,m6a.large,m5.large,c4.large,c7a.large,r5a.large,r6a.large,m7a.large" )
125
- create_args+=(" --node-volume-size=20" )
110
+ create_args+=(" --dns=none" )
126
111
create_args+=(" --control-plane-count=${CONTROL_PLANE_COUNT:- 1} " )
127
112
create_args+=(" --master-size=${CONTROL_PLANE_SIZE:- c5.2xlarge} " )
128
- create_args+=(" --zones=us-east-2a,us-east-2b,us-east-2c" )
129
113
130
114
131
115
# AWS ONLY feature flags
@@ -141,10 +125,16 @@ KUBETEST2_ARGS=()
141
125
KUBETEST2_ARGS+=(" -v=2" )
142
126
KUBETEST2_ARGS+=(" --cloud-provider=${CLOUD_PROVIDER} " )
143
127
KUBETEST2_ARGS+=(" --cluster-name=${CLUSTER_NAME:- } " )
144
- KUBETEST2_ARGS+=(" --kops-binary-path= ${KOPS_BIN} " )
128
+ KUBETEST2_ARGS+=(" --kops-version-marker=https://storage.googleapis.com/k8s-staging-kops/kops/releases/markers/master/latest-ci.txt " )
145
129
KUBETEST2_ARGS+=(" --admin-access=${ADMIN_ACCESS:- } " )
146
130
KUBETEST2_ARGS+=(" --env=KOPS_FEATURE_FLAGS=${KOPS_FEATURE_FLAGS} " )
147
131
132
+ if [[ " ${CLOUD_PROVIDER} " == " gce" ]]; then
133
+ KUBETEST2_ARGS+=(" --boskos-resource-type=scalability-scale-project" )
134
+ KUBETEST2_ARGS+=(" --control-plane-instance-group-overrides=spec.rootVolume.type=pd-ssd" )
135
+ KUBETEST2_ARGS+=(" --max-nodes-to-dump=10" )
136
+ fi
137
+
148
138
# More time for bigger clusters
149
139
KUBETEST2_ARGS+=(" --validation-wait=55m" )
150
140
KUBETEST2_ARGS+=(" --validation-count=3" )
@@ -155,24 +145,18 @@ if [[ -z "${DELETE_CLUSTER:-}" ]]; then
155
145
DELETE_CLUSTER=" true"
156
146
fi
157
147
158
- kubetest2 kops " ${KUBETEST2_ARGS[@]} " \
159
- --up \
160
- --kubernetes-version=" ${K8S_VERSION} " \
161
- --create-args=" ${create_args[*]} "
162
-
163
- KUBECONFIG=$( mktemp -t kubeconfig.XXXXXXXXX)
164
- kops export kubecfg --admin --kubeconfig=" ${KUBECONFIG} "
165
-
166
- kops get instances
148
+ if [[ " ${DELETE_CLUSTER:- } " == " true" ]]; then
149
+ KUBETEST2_ARGS+=(" --down" )
150
+ fi
167
151
168
- # CL2 uses KUBE_SSH_KEY_PATH path to ssh to instances for scraping metrics
169
- export KUBE_SSH_KEY_PATH=" /tmp/kops/${CLUSTER_NAME} /id_ed25519"
170
152
# this is used as a label to select kube-proxy pods on kops for kube-proxy service
171
153
# used by CL2 Prometheus here https://github.com/kubernetes/perf-tests/blob/master/clusterloader2/pkg/prometheus/manifests/default/kube-proxy-service.yaml#L2
172
154
export PROMETHEUS_KUBE_PROXY_SELECTOR_KEY=" k8s-app"
173
155
export PROMETHEUS_SCRAPE_APISERVER_ONLY=" true"
174
156
export CL2_PROMETHEUS_TOLERATE_MASTER=" true"
175
157
if [[ " ${CLOUD_PROVIDER} " == " aws" ]]; then
158
+ # CL2 uses KUBE_SSH_KEY_PATH path to ssh to instances for scraping metrics
159
+ export KUBE_SSH_KEY_PATH=" /tmp/kops/${CLUSTER_NAME} /id_ed25519"
176
160
cat > " ${GOPATH} " /src/k8s.io/perf-tests/clusterloader2/testing/load/overrides.yaml << EOL
177
161
# we are not testing statefulsets at this point
178
162
SMALL_STATEFUL_SETS_PER_NAMESPACE: 0
@@ -182,29 +166,28 @@ if [[ "${CLOUD_PROVIDER}" == "aws" ]]; then
182
166
ENABLE_RESTART_COUNT_CHECK: false
183
167
EOL
184
168
cat " ${GOPATH} " /src/k8s.io/perf-tests/clusterloader2/testing/load/overrides.yaml
185
-
186
- kubetest2 kops " ${KUBETEST2_ARGS[@]} " \
187
- --test=clusterloader2 \
188
- --kubernetes-version=" ${K8S_VERSION} " \
189
- -- \
190
- --provider=" ${CLOUD_PROVIDER} " \
191
- --repo-root=" ${GOPATH} " /src/k8s.io/perf-tests \
192
- --test-configs=" ${GOPATH} " /src/k8s.io/perf-tests/clusterloader2/testing/load/config.yaml \
193
- --test-overrides=" ${GOPATH} " /src/k8s.io/perf-tests/clusterloader2/testing/load/overrides.yaml \
194
- --kube-config=" ${KUBECONFIG} "
195
169
else
196
- kubetest2 kops " ${KUBETEST2_ARGS[@]} " \
197
- --test=clusterloader2 \
198
- --kubernetes-version=" ${K8S_VERSION} " \
199
- -- \
200
- --provider=" ${CLOUD_PROVIDER} " \
201
- --repo-root=" ${GOPATH} " /src/k8s.io/perf-tests \
202
- --test-configs=" ${GOPATH} " /src/k8s.io/perf-tests/clusterloader2/testing/load/config.yaml \
203
- --kube-config=" ${KUBECONFIG} "
170
+ cat > " ${GOPATH} " /src/k8s.io/perf-tests/clusterloader2/testing/load/overrides.yaml << EOL
171
+ # setting a default value here to avoid an incorrect yaml file
172
+ CL2_ENABLE_PVS: true
173
+ EOL
204
174
fi
205
175
206
-
207
- if [[ " ${DELETE_CLUSTER:- } " == " true" ]]; then
208
- DELETE_CLUSTER=false # Don't delete again in trap
209
- kubetest2 kops " ${KUBETEST2_ARGS[@]} " --down
210
- fi
176
+ kubetest2 kops " ${KUBETEST2_ARGS[@]} " \
177
+ --up \
178
+ --kubernetes-version=" ${K8S_VERSION} " \
179
+ --create-args=" ${create_args[*]} " \
180
+ --test=clusterloader2 \
181
+ -- \
182
+ --provider=" ${CLOUD_PROVIDER} " \
183
+ --repo-root=" ${GOPATH} " /src/k8s.io/perf-tests \
184
+ --test-configs=" ${GOPATH} " /src/k8s.io/perf-tests/clusterloader2/testing/load/config.yaml \
185
+ --test-overrides=" ${GOPATH} " /src/k8s.io/perf-tests/clusterloader2/testing/load/overrides.yaml \
186
+ --extra-args=" --experimental-prometheus-snapshot-to-report-dir=true" \
187
+ --kube-config=" ${HOME} /.kube/config"
188
+ # --test-overrides="${GOPATH}"/src/k8s.io/perf-tests/clusterloader2/testing/experiments/enable_restart_count_check.yaml \
189
+ # --test-overrides="${GOPATH}"/src/k8s.io/perf-tests/clusterloader2/testing/experiments/ignore_known_gce_container_restarts.yaml \
190
+ # --test-overrides="${GOPATH}"/src/k8s.io/perf-tests/clusterloader2/testing/overrides/5000_nodes.yaml \
191
+ # --test-overrides="${GOPATH}"/src/k8s.io/perf-tests/clusterloader2/testing/load/config.yaml \
192
+ # --test-overrides="${GOPATH}"/src/k8s.io/perf-tests/clusterloader2/testing/huge-service/config.yaml \
193
+ # --test-overrides="${GOPATH}"/src/k8s.io/perf-tests/clusterloader2/testing/access-tokens/config.yaml \
0 commit comments