Skip to content

Commit ca75cc7

Browse files
committed
add gce scale scenario
1 parent a10595f commit ca75cc7

File tree

1 file changed

+66
-83
lines changed

1 file changed

+66
-83
lines changed

Diff for: tests/e2e/scenarios/scalability/run-test.sh

+66-83
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,7 @@
1717
set -e
1818
set -x
1919

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
4421

4522
# Default cluster name
4623
SCRIPT_NAME=$(basename "$(dirname "$0")")
@@ -53,30 +30,26 @@ if [[ -z "${K8S_VERSION:-}" ]]; then
5330
K8S_VERSION="$(curl -s -L https://dl.k8s.io/release/stable.txt)"
5431
fi
5532

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
6538

6639
# Default cloud provider to aws
6740
if [[ -z "${CLOUD_PROVIDER:-}" ]]; then
6841
CLOUD_PROVIDER="aws"
6942
fi
7043
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
7652
fi
77-
echo "KOPS_STATE_STORE=${KOPS_STATE_STORE}"
78-
export KOPS_STATE_STORE
79-
8053

8154
if [[ -z "${ADMIN_ACCESS:-}" ]]; then
8255
ADMIN_ACCESS="0.0.0.0/0" # Or use your IPv4 with /32
@@ -86,12 +59,25 @@ echo "ADMIN_ACCESS=${ADMIN_ACCESS}"
8659
# cilium does not yet pass conformance tests (shared hostport test)
8760
#create_args="--networking cilium"
8861
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
9077
create_args+=("--networking=${CNI_PLUGIN:-calico}")
9178
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")
9380
fi
94-
create_args+=("--image=${INSTANCE_IMAGE:-ssm:/aws/service/canonical/ubuntu/server/20.04/stable/current/amd64/hvm/ebs-gp2/ami-id}")
9581
create_args+=("--set spec.etcdClusters[0].manager.listenMetricsURLs=http://localhost:2382")
9682
create_args+=("--set spec.etcdClusters[0].manager.env=ETCD_QUOTA_BACKEND_BYTES=8589934592")
9783
create_args+=("--set spec.etcdClusters[1].manager.env=ETCD_QUOTA_BACKEND_BYTES=8589934592")
@@ -114,18 +100,16 @@ create_args+=("--set spec.kubeAPIServer.maxRequestsInflight=800")
114100
create_args+=("--set spec.kubeAPIServer.maxMutatingRequestsInflight=400")
115101
create_args+=("--set spec.kubeAPIServer.enableProfiling=true")
116102
create_args+=("--set spec.kubeAPIServer.enableContentionProfiling=true")
103+
create_args+=("--set spec.kubeAPIServer.logLevel=2")
117104
# this is required for Prometheus server to scrape metrics endpoint on APIServer
118105
create_args+=("--set spec.kubeAPIServer.anonymousAuth=true")
119106
# this is required for prometheus to scrape kube-proxy metrics endpoint
120107
create_args+=("--set spec.kubeProxy.metricsBindAddress=0.0.0.0:10249")
121108
create_args+=("--node-count=${KUBE_NODE_COUNT:-101}")
122109
# 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")
126111
create_args+=("--control-plane-count=${CONTROL_PLANE_COUNT:-1}")
127112
create_args+=("--master-size=${CONTROL_PLANE_SIZE:-c5.2xlarge}")
128-
create_args+=("--zones=us-east-2a,us-east-2b,us-east-2c")
129113

130114

131115
# AWS ONLY feature flags
@@ -141,10 +125,16 @@ KUBETEST2_ARGS=()
141125
KUBETEST2_ARGS+=("-v=2")
142126
KUBETEST2_ARGS+=("--cloud-provider=${CLOUD_PROVIDER}")
143127
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")
145129
KUBETEST2_ARGS+=("--admin-access=${ADMIN_ACCESS:-}")
146130
KUBETEST2_ARGS+=("--env=KOPS_FEATURE_FLAGS=${KOPS_FEATURE_FLAGS}")
147131

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+
148138
# More time for bigger clusters
149139
KUBETEST2_ARGS+=("--validation-wait=55m")
150140
KUBETEST2_ARGS+=("--validation-count=3")
@@ -155,24 +145,18 @@ if [[ -z "${DELETE_CLUSTER:-}" ]]; then
155145
DELETE_CLUSTER="true"
156146
fi
157147

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
167151

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"
170152
# this is used as a label to select kube-proxy pods on kops for kube-proxy service
171153
# used by CL2 Prometheus here https://github.com/kubernetes/perf-tests/blob/master/clusterloader2/pkg/prometheus/manifests/default/kube-proxy-service.yaml#L2
172154
export PROMETHEUS_KUBE_PROXY_SELECTOR_KEY="k8s-app"
173155
export PROMETHEUS_SCRAPE_APISERVER_ONLY="true"
174156
export CL2_PROMETHEUS_TOLERATE_MASTER="true"
175157
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"
176160
cat > "${GOPATH}"/src/k8s.io/perf-tests/clusterloader2/testing/load/overrides.yaml <<EOL
177161
# we are not testing statefulsets at this point
178162
SMALL_STATEFUL_SETS_PER_NAMESPACE: 0
@@ -182,29 +166,28 @@ if [[ "${CLOUD_PROVIDER}" == "aws" ]]; then
182166
ENABLE_RESTART_COUNT_CHECK: false
183167
EOL
184168
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}"
195169
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
204174
fi
205175

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

Comments
 (0)