Skip to content
This repository was archived by the owner on Feb 14, 2022. It is now read-only.

Commit

Permalink
Use kind for benchmark
Browse files Browse the repository at this point in the history
Signed-off-by: Jean-Christophe Sirot <[email protected]>
  • Loading branch information
Jean-Christophe Sirot committed Feb 25, 2019
1 parent da34f1f commit 01544c0
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 208 deletions.
187 changes: 56 additions & 131 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,67 +13,43 @@ aliases:
public-golang: &public-golang
- image: circleci/golang:1.11
user: root
cluster-setup-steps: &cluster-setup-steps
- attach_workspace:
at: /root
- run:
name: Deploy testkit cluster
command: ./scripts/e2e-cluster.sh create
- persist_to_workspace:
root: /root/
paths:
- '.kube'
- run:
name: Tear down testkit cluster (on failure)
command: |
./scripts/e2e-cluster.sh delete
when: on_fail

deploy-images-steps: &deploy-images-steps
- attach_workspace:
at: /root
- run:
name: Deploy images
command: |
for image in controller-coverage api-server-coverage controller api-server; do
./scripts/e2e-cluster.sh docker load -i /root/kube-compose-$image.tar
done
- run:
name: Tear down testkit cluster (on failure)
command: |
./scripts/e2e-cluster.sh delete
when: on_fail

test-e2e-steps: &test-e2e-steps
e2e-kind-steps: &e2e-kind-steps
- attach_workspace:
at: /root
- setup_remote_docker:
version: 18.06.0-ce
- run:
name: Run e2e tests
name: "Prepare Kind and run e2e tests"
command: |
git clone https://github.com/kubernetes-sigs/kind.git /root/src/sigs.k8s.io/kind
cd /root/src/sigs.k8s.io/kind
git reset --hard 302bb7dbb611236aeadd6d1741c9f237d1ec28d2
go install
cd -
export PATH="$PATH:/root/bin"
export IMAGE_REPOSITORY=${CIRCLE_TAG:+docker}
export IMAGE_REPOSITORY=${IMAGE_REPOSITORY:-dockereng}
export IMAGE_PREFIX=kube-compose-
export IMAGE_REPO_PREFIX=${IMAGE_REPOSITORY}/${IMAGE_PREFIX}
KUBECONFIG=$HOME/.kube/${KUBE_VERSION}/config.testkit kubectl create namespace e2emigration
KUBECONFIG=$HOME/.kube/${KUBE_VERSION}/config.testkit kubectl -n e2emigration create secret docker-registry migration-pull-secret --docker-server=https://index.docker.io/v1/ --docker-username=${DOCKER_USER} --docker-password=${DOCKER_PASS} [email protected]
PATH="$PATH:$GOPATH/bin" make KUBECONFIG=$HOME/.kube/${KUBE_VERSION}/config.testkit TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}} e2e
export IMAGE_REPO_PREFIX=${IMAGE_REPOSITORY:-dockereng}/${IMAGE_PREFIX}
mkdir -p ./pre-loaded-images
cp /root/kube-compose-api-server-coverage.tar /root/kube-compose-controller-coverage.tar ./pre-loaded-images/
make -f docker.Makefile KUBERNETES_VERSION=${KUBERNETES_VERSION} TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}} create-kind-cluster
docker load -i /root/kube-compose-e2e-tests.tar
make TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}} e2e-kind-circleci
no_output_timeout: 15m
- persist_to_workspace:
root: /root/
paths:
- 'src/github.com/docker/compose-on-kubernetes/e2e/e2e/compose-*/coverage.txt'
- run:
name: Tear down testkit cluster
command: |
./scripts/e2e-cluster.sh delete
when: always
- 'src/github.com/docker/compose-on-kubernetes/e2e-coverage/compose-*/coverage.txt'

e2e-kind-steps: &e2e-kind-steps
e2e-benchmark-kind-steps: &e2e-benchmark-kind-steps
- attach_workspace:
at: /root
- setup_remote_docker:
version: 18.06.0-ce
- run:
name: "Prepare Kind and run E2E tests"
name: "Prepare Kind and run e2e benchmark"
command: |
git clone https://github.com/kubernetes-sigs/kind.git /root/src/sigs.k8s.io/kind
cd /root/src/sigs.k8s.io/kind
Expand All @@ -85,15 +61,21 @@ aliases:
export IMAGE_REPOSITORY=${IMAGE_REPOSITORY:-dockereng}
export IMAGE_PREFIX=kube-compose-
export IMAGE_REPO_PREFIX=${IMAGE_REPOSITORY:-dockereng}/${IMAGE_PREFIX}
mkdir -p ./coverage-enabled-images
cp /root/kube-compose-api-server-coverage.tar /root/kube-compose-controller-coverage.tar ./coverage-enabled-images/
mkdir -p ./pre-loaded-images
cp /root/kube-compose-api-server.tar /root/kube-compose-controller.tar ./pre-loaded-images/
make -f docker.Makefile KUBERNETES_VERSION=${KUBERNETES_VERSION} TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}} create-kind-cluster
docker load -i /root/kube-compose-e2e-tests.tar
make TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}} e2e-kind-circleci
- persist_to_workspace:
root: /root/
paths:
- 'src/github.com/docker/compose-on-kubernetes/e2e-coverage/compose-*/coverage.txt'
docker load -i /root/kube-compose-e2e-benchmark.tar
make TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}} e2e-benchmark-kind-circleci
no_output_timeout: 15m
- run:
name: Get cluster info (on failure)
command: |
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x ./kubectl
mv kubectl /root/bin
export PATH="$PATH:/root/bin"
make e2e-kind-pods-info
when: on_fail

jobs:
checkout:
Expand All @@ -106,17 +88,11 @@ jobs:
- run:
name: Login to docker hub
command: echo "$DOCKER_PASS" | docker login -u "$DOCKER_USER" --password-stdin
- run:
name: Setup testkit
command: ./scripts/e2e-cluster.sh auth
- persist_to_workspace:
root: /root/
paths:
- 'src'
- '.docker'
- '.testkit'
- '.aws'
- '.kube'

checkout-pr:
docker: *public-golang
Expand Down Expand Up @@ -178,16 +154,9 @@ jobs:
export IMAGE_REPO_PREFIX=${IMAGE_REPOSITORY:-dockereng}/${IMAGE_PREFIX}
echo "building images with TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}} and IMAGE_REPO_PREFIX=${IMAGE_REPO_PREFIX}"
make -f docker.Makefile TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}} images
for image in controller controller-coverage api-server api-server-coverage installer e2e-tests; do
for image in controller controller-coverage api-server api-server-coverage installer e2e-tests e2e-benchmark; do
docker save "${IMAGE_REPO_PREFIX}$image:${CIRCLE_TAG:-${CIRCLE_SHA1}}" -o "/root/${IMAGE_PREFIX}$image.tar"
done
- run:
name: Tear down testkit cluster (on failure)
command: |
KUBE_VERSION=1.10.11 ./scripts/e2e-cluster.sh delete
KUBE_VERSION=1.11.5 ./scripts/e2e-cluster.sh delete
KUBE_VERSION=1.13.3 ./scripts/e2e-cluster.sh delete
when: on_fail
- persist_to_workspace:
root: /root/
paths:
Expand All @@ -197,6 +166,7 @@ jobs:
- kube-compose-controller-coverage.tar
- kube-compose-installer.tar
- kube-compose-e2e-tests.tar
- kube-compose-e2e-benchmark.tar
e2e-kind:
docker: *public-golang
working_directory: /root/src/github.com/docker/compose-on-kubernetes
Expand All @@ -208,7 +178,7 @@ jobs:
working_directory: /root/src/github.com/docker/compose-on-kubernetes
environment:
GOPATH: "/root"
KUBERNETES_VERSION: "1.11.3" # FIXME 1.11.7
KUBERNETES_VERSION: "1.11.7"
steps: *e2e-kind-steps
e2e-kind-1_13:
docker: *public-golang
Expand All @@ -217,6 +187,13 @@ jobs:
GOPATH: "/root"
KUBERNETES_VERSION: "1.13.3"
steps: *e2e-kind-steps
e2e-benchmark-kind:
docker: *public-golang
working_directory: /root/src/github.com/docker/compose-on-kubernetes
environment:
GOPATH: "/root"
KUBERNETES_VERSION: "1.13.3"
steps: *e2e-benchmark-kind-steps
test-unit:
docker: *public-golang
working_directory: /root/src/github.com/docker/compose-on-kubernetes
Expand All @@ -234,20 +211,6 @@ jobs:
root: /root/
paths:
- 'src/github.com/docker/compose-on-kubernetes/coverage.txt'
cluster-setup-benchmark:
docker: *compose-ci-docker
working_directory: /root/src/github.com/docker/compose-on-kubernetes
environment:
- KUBE_VERSION: 1.11.5
- KUBE_ENV_NAME: benchmark
steps: *cluster-setup-steps
deploy-images-benchmark:
docker: *compose-ci-docker
working_directory: /root/src/github.com/docker/compose-on-kubernetes
environment:
- KUBE_VERSION: 1.11.5
- KUBE_ENV_NAME: benchmark
steps: *deploy-images-steps
coverage-upload:
docker: *public-golang
working_directory: /root/src/github.com/docker/compose-on-kubernetes
Expand Down Expand Up @@ -320,31 +283,7 @@ jobs:
go install
cd /root/src/github.com/docker/compose-on-kubernetes
ghr -t ${GITHUB_RELEASE_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete ${TAG} ./bin/
run-benchmark:
docker: *compose-ci-golang
working_directory: /root/src/github.com/docker/compose-on-kubernetes
environment:
- KUBE_VERSION: 1.11.5
- KUBE_ENV_NAME: benchmark
steps:
- attach_workspace:
at: /root
- setup_remote_docker:
version: 17.07.0-ce
- run:
name: benchmark
command: |
export IMAGE_REPOSITORY=${CIRCLE_TAG:+docker}
export IMAGE_REPOSITORY=${IMAGE_REPOSITORY:-dockereng}
export IMAGE_PREFIX=kube-compose-
export IMAGE_REPO_PREFIX=${IMAGE_REPOSITORY:-dockereng}/${IMAGE_PREFIX}
make bin/e2e_benchmark
TAG=${CIRCLE_TAG:-${CIRCLE_SHA1}} ./bin/e2e_benchmark --kubeconfig=$HOME/.kube/benchmark/config.testkit --logs-namespace=benchmark -f report --max-duration 7m
- run:
name: Tear down testkit cluster
command: |
./scripts/e2e-cluster.sh delete
when: always
workflows:
version: 2
pr:
Expand Down Expand Up @@ -468,45 +407,30 @@ workflows:
only: /v.*/
branches:
only: /^(?!pull\/).*$/
# - e2e-benchmark-kind:
# requires:
# - images
# filters:
# tags:
# only: /v.*/
# branches:
# only: /^(?!pull\/).*$/
- coverage-upload:
requires:
- test-unit
- e2e-kind-1_11
- e2e-kind-1_13
# - e2e-benchmark-kind
filters:
tags:
only: /v.*/
branches:
only: /^(?!pull\/).*$/
# - cluster-setup-benchmark:
# requires:
# - checkout
# filters:
# tags:
# only: /v.*/
# branches:
# only: /^(?!pull\/).*$/
# - deploy-images-benchmark:
# requires:
# - cluster-setup-benchmark
# - images
# filters:
# tags:
# only: /v.*/
# branches:
# only: /^(?!pull\/).*$/
# - run-benchmark:
# requires:
# - deploy-images-benchmark
# filters:
# tags:
# only: /v.*/
# branches:
# only: /^(?!pull\/).*$/
- push-to-hub:
requires:
- e2e-kind-1_11
- e2e-kind-1_13
# - e2e-benchmark-kind
filters:
branches:
only: master
Expand All @@ -516,6 +440,7 @@ workflows:
requires:
- e2e-kind-1_11
- e2e-kind-1_13
# - e2e-benchmark-kind
filters:
branches:
only: master
Expand Down
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
.idea/*
!./idea/runConfigurations/
bin
coverage-enabled-images/
pre-loaded-images/
apiserver.local.config/
kubeconfig
default.etcd
./config/
.pull-secret
.vscode
testkit
junit*.xml
*coverage.txt
8 changes: 7 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ ARG VERSION
ARG IMAGE_REPO_PREFIX
ENV GITCOMMIT=$GITCOMMIT VERSION=$VERSION BUILDTIME=$BUILDTIME IMAGE_REPO_PREFIX=$IMAGE_REPO_PREFIX
ENV CGO_ENABLED=0
RUN make bin/compose-controller bin/compose-controller.test e2e-binary bin/installer bin/api-server bin/api-server.test
RUN make bin/compose-controller bin/compose-controller.test e2e-binary bin/installer bin/api-server bin/api-server.test bin/e2e_benchmark
RUN go get github.com/onsi/ginkgo/ginkgo
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.12.4/bin/linux/amd64/kubectl && \
chmod +x ./kubectl && \
Expand All @@ -36,6 +36,12 @@ COPY --from=build /go/src/github.com/docker/compose-on-kubernetes/e2e/e2e.test /
COPY --from=build /go/src/github.com/docker/compose-on-kubernetes/e2e/retrieve-coverage /retrieve-coverage
COPY --from=build /bin/kubectl /bin/kubectl

# e2e-benchmark
FROM runbase AS compose-e2e-benchmark
ENTRYPOINT ["/e2e_benchmark", "--kubeconfig=/kind-config", "--"]
COPY --from=build /go/src/github.com/docker/compose-on-kubernetes/bin/e2e_benchmark /e2e_benchmark
COPY --from=build /bin/kubectl /bin/kubectl

# compose-installer (retrieved with --target=compose-installer)
FROM runbase AS compose-installer
ENTRYPOINT ["/installer"]
Expand Down
4 changes: 2 additions & 2 deletions Dockerfile.kind
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
ARG BASE_IMAGE=kindest/node:v1.12.3
ARG BASE_IMAGE=dockertesteng/kind-node:v1.13.3
FROM ${BASE_IMAGE}
COPY coverage-enabled-images/*.tar kind/images/
COPY pre-loaded-images/*.tar kind/images/
9 changes: 9 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,15 @@ e2e-kind-circleci:
docker start -a -i compose-on-kube-e2e
docker cp compose-on-kube-e2e:/e2e ./e2e-coverage

e2e-benchmark-kind-circleci:
docker rm compose-on-kube-e2e-benchmark || echo "no existing compose-on-kube e2e benchmark container"
docker create --name compose-on-kube-e2e-benchmark -e IMAGE_REPO_PREFIX=$(IMAGE_REPO_PREFIX) -e TAG=$(TAG) -e KUBECONFIG=/kind-config --network=host ${IMAGE_REPO_PREFIX}e2e-benchmark:${TAG} --logs-namespace=benchmark -f report --total-stacks 50 --max-duration 7m
docker cp $(shell kind get kubeconfig-path --name="compose-on-kube") compose-on-kube-e2e-benchmark:/kind-config
docker start -a -i compose-on-kube-e2e-benchmark

e2e-kind-pods-info:
kubectl --kubeconfig=$(shell kind get kubeconfig-path --name="compose-on-kube") get pods --all-namespaces

e2e-no-provisioning: e2e-binary ## run the e2e tests on an already provisionned cluster
ginkgo -v -p e2e/e2e.test -- --skip-provisioning $(TEST_ARGS) 2>&1 | tee e2e-test-output.txt
grep SUCCESS e2e-test-output.txt | grep -q "$(E2E_EXPECTED_SKIP) Skipped"
Expand Down
12 changes: 8 additions & 4 deletions docker.Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ TEST_BASE_IMAGE = golang:1.11.1
RUN_BASE_IMAGE = alpine:3.8
KUBERNETES_VERSION ?= 1.13.3
KIND_TAG = v$(KUBERNETES_VERSION)-$(TAG)
IMAGES = ${IMAGE_REPO_PREFIX}controller ${IMAGE_REPO_PREFIX}controller-coverage ${IMAGE_REPO_PREFIX}e2e-tests ${IMAGE_REPO_PREFIX}api-server ${IMAGE_REPO_PREFIX}api-server-coverage ${IMAGE_REPO_PREFIX}installer
IMAGES = ${IMAGE_REPO_PREFIX}controller ${IMAGE_REPO_PREFIX}controller-coverage ${IMAGE_REPO_PREFIX}e2e-tests ${IMAGE_REPO_PREFIX}e2e-benchmark ${IMAGE_REPO_PREFIX}api-server ${IMAGE_REPO_PREFIX}api-server-coverage ${IMAGE_REPO_PREFIX}installer
PUSH_IMAGES = push/${IMAGE_REPO_PREFIX}controller push/${IMAGE_REPO_PREFIX}api-server push/${IMAGE_REPO_PREFIX}installer
DOCKERFILE = Dockerfile
ifneq ($(DOCKER_BUILDKIT),)
Expand Down Expand Up @@ -35,6 +35,10 @@ ${IMAGE_REPO_PREFIX}e2e-tests:
@echo "🌟 build ${IMAGE_REPO_PREFIX}e2e-tests:${TAG}"
@tar cf - ${DOCKERFILE} doc.go Makefile common.mk cmd install api internal vendor e2e | docker build ${BUILD_ARGS} -t ${IMAGE_REPO_PREFIX}e2e-tests:$(TAG) --target compose-e2e-tests -f ${DOCKERFILE} -

${IMAGE_REPO_PREFIX}e2e-benchmark:
@echo "🌟 build ${IMAGE_REPO_PREFIX}e2e-benchmark:${TAG}"
@tar cf - ${DOCKERFILE} doc.go Makefile common.mk cmd install api internal vendor e2e | docker build ${BUILD_ARGS} -t ${IMAGE_REPO_PREFIX}e2e-benchmark:$(TAG) --target compose-e2e-benchmark -f ${DOCKERFILE} -

${IMAGE_REPO_PREFIX}api-server:
@echo "🌟 build ${IMAGE_REPO_PREFIX}api-server:${TAG}"
@tar cf - ${DOCKERFILE} doc.go Makefile common.mk cmd install api internal vendor e2e | docker build ${BUILD_ARGS} -t ${IMAGE_REPO_PREFIX}api-server:$(TAG) --target compose-api-server -f ${DOCKERFILE} -
Expand All @@ -60,12 +64,12 @@ images: $(IMAGES) ## build images

save-coverage-images:
@echo "🌟 save ${IMAGE_REPO_PREFIX}api-server-coverage:$(TAG) ${IMAGE_REPO_PREFIX}controller-coverage:$(TAG)"
@mkdir -p coverage-enabled-images
@docker save -o coverage-enabled-images/coverage-enabled-images.tar ${IMAGE_REPO_PREFIX}api-server-coverage:$(TAG) ${IMAGE_REPO_PREFIX}controller-coverage:$(TAG)
@mkdir -p pre-loaded-images
@docker save -o pre-loaded-images/coverage-enabled-images.tar ${IMAGE_REPO_PREFIX}api-server-coverage:$(TAG) ${IMAGE_REPO_PREFIX}controller-coverage:$(TAG)

build-kind-image:
@echo "🌟 build ${IMAGE_REPO_PREFIX}e2e-kind-node:$(KIND_TAG)"
@tar cf - Dockerfile.kind coverage-enabled-images | docker build -t ${IMAGE_REPO_PREFIX}e2e-kind-node:$(KIND_TAG) --build-arg BASE_IMAGE=kindest/node:v$(KUBERNETES_VERSION) -f Dockerfile.kind -
@tar cf - Dockerfile.kind pre-loaded-images | docker build -t ${IMAGE_REPO_PREFIX}e2e-kind-node:$(KIND_TAG) --build-arg BASE_IMAGE=dockertesteng/kind-node:v$(KUBERNETES_VERSION) -f Dockerfile.kind -

create-kind-cluster: build-kind-image
@echo "🌟 Create kind cluster"
Expand Down
Loading

0 comments on commit 01544c0

Please sign in to comment.