Skip to content

Commit a1337fd

Browse files
committed
Use k3d to replace kind for faster CI and less disk usage
Signed-off-by: Tao He <[email protected]>
1 parent 8d1215b commit a1337fd

31 files changed

+136
-237
lines changed

.github/workflows/vineyard-operator.yaml

+16-2
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ jobs:
100100
exit -1
101101
fi
102102
103+
# prepare golangci-lint for faster installation
104+
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.49.0
105+
103106
function ec() { [[ "$1" == "-h" ]] && { shift && eval $* > /dev/null 2>&1; ec=$?; echo $ec; } || eval $*; ec=$?; }
104107
105108
ec make -C k8s golint
@@ -122,7 +125,7 @@ jobs:
122125
registry: ghcr.io
123126
username: ${{ github.actor }}
124127
password: ${{ secrets.GITHUB_TOKEN }}
125-
128+
126129
- name: Build docker image
127130
run: |
128131
make -C k8s docker-build
@@ -144,6 +147,12 @@ jobs:
144147
docker tag ${IMG} ${LATEST_IMG}
145148
docker push ${LATEST_IMG}
146149
150+
- name: Install k3d
151+
if: ${{ matrix.job != 'release' }}
152+
run: |
153+
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
154+
k3d cluster create -c k8s/hack/k3d.yaml
155+
147156
- name: Generate the python image for tests
148157
if: ${{ matrix.job != 'release' }}
149158
run: |
@@ -202,4 +211,9 @@ jobs:
202211
- name: e2e-tests-workflow
203212
if: ${{ matrix.job == 'e2e-tests-workflow' }}
204213
run: |
205-
make -C k8s e2e-tests-workflow
214+
make -C k8s e2e-tests-workflow
215+
216+
- name: Uninstall k3d
217+
if: ${{ always() }}
218+
run: |
219+
k3d cluster delete -c k8s/hack/k3d.yaml || true

k8s/Makefile

+17-45
Original file line numberDiff line numberDiff line change
@@ -54,20 +54,6 @@ all: manager
5454
check: lint e2e-test
5555
.PHONY: check
5656

57-
# Build a 4-nodes(1 master and 3 workers) kind cluster with local registry
58-
build-local-cluster:
59-
@touch /tmp/e2e-k8s.config
60-
@echo "the kubeconfig path is /tmp/e2e-k8s.config"
61-
@echo "Creating the kind cluster with local registry"
62-
@bash test/hack/build-kind-cluster-with-local-registry.sh
63-
.PHONY: build-local-cluster
64-
65-
delete-local-cluster:
66-
@rm /tmp/e2e-k8s.config
67-
@echo "Deleting the kind cluster with local registry"
68-
@bash test/hack/delete-kind-cluster-with-local-registry.sh
69-
.PHONY: delete-local-cluster
70-
7157
prepare-e2e-test: e2e
7258
@echo "Install e2e test dependencies..."
7359
@sudo bash test/hack/prepare-e2e.sh
@@ -78,118 +64,104 @@ prepare-e2e-test: e2e
7864
# install the cert-manager and wait for ready
7965
install-cert-manager:
8066
@echo "Installing cert-manager..."
81-
@kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml --kubeconfig=/tmp/e2e-k8s.config
82-
@kubectl wait pods -n cert-manager --all --for condition=Ready --timeout=300s --kubeconfig=/tmp/e2e-k8s.config
67+
@kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
68+
@kubectl wait pods -n cert-manager --all --for condition=Ready --timeout=300s
8369
@echo "Cert-Manager ready."
8470

8571
# install the vineyard-operator and wait for ready
8672
install-vineyard-operator:
8773
@echo "Installing vineyard-operator..."
88-
@docker tag vineyardcloudnative/vineyard-operator:latest localhost:5001/vineyard-operator:latest
89-
@docker push localhost:5001/vineyard-operator:latest
90-
@export IMG=localhost:5001/vineyard-operator:latest KUBECONFIG=/tmp/e2e-k8s.config && make deploy
91-
@kubectl wait deployment/vineyard-controller-manager --for condition=Available -n vineyard-system --timeout=300s --kubeconfig=/tmp/e2e-k8s.config
74+
@make deploy
75+
@kubectl wait deployment/vineyard-controller-manager --for condition=Available -n vineyard-system --timeout=300s
9276
@echo "Vineyard-Operator Ready"
9377

9478
# install the vineyard cluster and wait for ready
9579
install-vineyard-cluster:
9680
@echo "Installing vineyard cluster..."
97-
@docker tag vineyardcloudnative/vineyardd:alpine-latest localhost:5001/vineyardd:alpine-latest
98-
@docker push localhost:5001/vineyardd:alpine-latest
99-
@kubectl apply -f test/e2e/vineyardd.yaml --kubeconfig=/tmp/e2e-k8s.config
100-
@kubectl wait vineyardd/vineyardd-sample --for condition=Available -n vineyard-system --timeout=300s --kubeconfig=/tmp/e2e-k8s.config
81+
@kubectl apply -f test/e2e/vineyardd.yaml
82+
@kubectl wait vineyardd/vineyardd-sample --for condition=Available -n vineyard-system --timeout=300s
10183
@echo "Vineyard cluster Ready"
10284

103-
install-vineyard: build-local-cluster install-cert-manager install-vineyard-operator install-vineyard-cluster
85+
install-vineyard: install-cert-manager install-vineyard-operator install-vineyard-cluster
10486
sleep 6000
105-
e2e-tests-assembly-local: kustomize prepare-e2e-test build-local-cluster install-cert-manager install-vineyard-operator install-vineyard-cluster
87+
e2e-tests-assembly-local: kustomize prepare-e2e-test install-cert-manager install-vineyard-operator install-vineyard-cluster
10688
@echo "Running local assembly e2e test..."
10789
@cd .. && ${GOBIN}/e2e run --config=k8s/test/e2e/assembly/local-assembly-e2e.yaml
10890
@echo "local assembly e2e test passed."
10991
@# the next step is recover the default vineyard operator image(vineyardcloudnative/vineyard-operator)
11092
@cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
111-
@make delete-local-cluster
11293
.PHONY: e2e-tests-assembly-local
11394

114-
e2e-tests-assembly-distributed: prepare-e2e-test build-local-cluster install-cert-manager install-vineyard-operator install-vineyard-cluster
95+
e2e-tests-assembly-distributed: prepare-e2e-test install-cert-manager install-vineyard-operator install-vineyard-cluster
11596
@echo "Running distributed assembly e2e test..."
11697
@cd .. && ${GOBIN}/e2e run --config=k8s/test/e2e/assembly/distributed-assembly-e2e.yaml
11798
@echo "distributed assembly e2e test passed."
11899
@# the next step is recover the default vineyard operator image(vineyardcloudnative/vineyard-operator)
119100
@cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
120-
@make delete-local-cluster
121101
.PHONY: e2e-tests-assembly-distributed
122102

123-
e2e-tests-autogenerated-helm-chart: prepare-e2e-test build-local-cluster install-cert-manager
103+
e2e-tests-autogenerated-helm-chart: prepare-e2e-test install-cert-manager
124104
@echo "Running autogenerated helm chart e2e test..."
125105
@cd .. && ${GOBIN}/e2e run --config=k8s/test/e2e/autogenerated-helm-chart/e2e.yaml
126106
@echo "autogenerated helm chart e2e test passed."
127107
@# the next step is recover the default vineyard operator image(vineyardcloudnative/vineyard-operator)
128108
@cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
129-
@make delete-local-cluster
130109
.PHONY: e2e-tests-autogenerated-helm-chart
131110

132-
e2e-tests-failover: prepare-e2e-test build-local-cluster install-cert-manager install-vineyard-operator install-vineyard-cluster
111+
e2e-tests-failover: prepare-e2e-test install-cert-manager install-vineyard-operator install-vineyard-cluster
133112
@echo "Running failover e2e test..."
134113
@cd .. && ${GOBIN}/e2e run --config=k8s/test/e2e/failover/e2e.yaml
135114
@echo "failover e2e test passed."
136115
@# the next step is recover the default vineyard operator image(vineyardcloudnative/vineyard-operator)
137116
@cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
138-
@make delete-local-cluster
139117
.PHONY: e2e-tests-failover
140118

141-
e2e-tests-repartition-dask: prepare-e2e-test build-local-cluster install-cert-manager install-vineyard-operator install-vineyard-cluster
119+
e2e-tests-repartition-dask: prepare-e2e-test install-cert-manager install-vineyard-operator install-vineyard-cluster
142120
@echo "Running repartition dask e2e test..."
143121
@cd .. && ${GOBIN}/e2e run --config=k8s/test/e2e/repartition/dask-repartition-e2e.yaml
144122
@echo "repartition dask e2e test passed."
145123
@# the next step is recover the default vineyard operator image(vineyardcloudnative/vineyard-operator)
146124
@cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
147-
@make delete-local-cluster
148125
.PHONY: e2e-tests-repartition-dask
149126

150-
e2e-tests-scheduler-outside-cluster: prepare-e2e-test build-local-cluster install-cert-manager install-vineyard-operator install-vineyard-cluster
127+
e2e-tests-scheduler-outside-cluster: prepare-e2e-test install-cert-manager install-vineyard-operator install-vineyard-cluster
151128
@echo "Running scheduler outside cluster e2e test..."
152129
@cd .. && ${GOBIN}/e2e run --config=k8s/test/e2e/scheduling-outside-cluster/e2e.yaml
153130
@echo "scheduler outside cluster e2e test passed."
154131
@# the next step is recover the default vineyard operator image(vineyardcloudnative/vineyard-operator)
155132
@cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
156-
@make delete-local-cluster
157133
.PHONY: e2e-tests-scheduler-outside-cluster
158134

159-
e2e-tests-serialize: prepare-e2e-test build-local-cluster install-cert-manager install-vineyard-operator install-vineyard-cluster
135+
e2e-tests-serialize: prepare-e2e-test install-cert-manager install-vineyard-operator install-vineyard-cluster
160136
@echo "Running serialize e2e test..."
161137
@cd .. && ${GOBIN}/e2e run --config=k8s/test/e2e/serialize/e2e.yaml
162138
@echo "serialize e2e test passed."
163139
@# the next step is recover the default vineyard operator image(vineyardcloudnative/vineyard-operator)
164140
@cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
165-
@make delete-local-cluster
166141
.PHONY: e2e-tests-serialize
167142

168-
e2e-tests-sidecar: prepare-e2e-test build-local-cluster install-cert-manager install-vineyard-operator
143+
e2e-tests-sidecar: prepare-e2e-test install-cert-manager install-vineyard-operator
169144
@echo "Running sidecar e2e test..."
170145
@cd .. && ${GOBIN}/e2e run --config=k8s/test/e2e/sidecar/e2e.yaml
171146
@echo "sidecar e2e test passed."
172147
@# the next step is recover the default vineyard operator image(vineyardcloudnative/vineyard-operator)
173148
@cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
174-
@make delete-local-cluster
175149
.PHONY: e2e-tests-sidecar
176150

177-
e2e-tests-spill: prepare-e2e-test build-local-cluster install-cert-manager install-vineyard-operator
151+
e2e-tests-spill: prepare-e2e-test install-cert-manager install-vineyard-operator
178152
@echo "Running spill e2e test..."
179153
@cd .. && ${GOBIN}/e2e run --config=k8s/test/e2e/spill/e2e.yaml
180154
@echo "spill e2e test passed."
181155
@# the next step is recover the default vineyard operator image(vineyardcloudnative/vineyard-operator)
182156
@cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
183-
@make delete-local-cluster
184157
.PHONY: e2e-tests-spill
185158

186-
e2e-tests-workflow: prepare-e2e-test build-local-cluster install-cert-manager install-vineyard-operator install-vineyard-cluster
159+
e2e-tests-workflow: prepare-e2e-test install-cert-manager install-vineyard-operator install-vineyard-cluster
187160
@echo "Running workflow e2e test..."
188161
@cd .. && ${GOBIN}/e2e run --config=k8s/test/e2e/workflow/e2e.yaml
189162
@echo "workflow e2e test passed."
190163
@# the next step is recover the default vineyard operator image(vineyardcloudnative/vineyard-operator)
191164
@cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
192-
@make delete-local-cluster
193165
.PHONY: e2e-tests-workflow
194166

195167
# Build manager binary

k8s/apis/k8s/v1alpha1/zz_generated.deepcopy.go

+16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

k8s/hack/k3d.yaml

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
apiVersion: k3d.io/v1alpha3
2+
kind: Simple
3+
name: cluster
4+
servers: 1
5+
agents: 3
6+
image: rancher/k3s:latest
7+
volumes: # repeatable flags are represented as YAML lists
8+
- volume: /var/run/docker.sock:/var/run/docker.sock
9+
nodeFilters:
10+
- server:*
11+
- agent:*
12+
options:
13+
k3d:
14+
wait: true
15+
timeout: "600s"
16+
disableLoadbalancer: false
17+
disableImageVolume: false
18+
disableRollback: false
19+
loadbalancer:
20+
configOverrides:
21+
- settings.workerConnections=2048
22+
k3s:
23+
extraArgs:
24+
- arg: --docker
25+
nodeFilters:
26+
- server:*
27+
- agent:*
28+
kubeconfig:
29+
updateDefaultKubeconfig: true
30+
switchCurrentContext: true

k8s/test/e2e/Makefile

+10-19
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ push-%: %
1515

1616
local-assembly-images: local-assembly assembly-job1 assembly-job2
1717
publish-local-assembly-images: push-local-assembly push-assembly-job1 push-assembly-job2
18-
e2e-test-assembly: push-local-assembly push-assembly-job1 push-assembly-job2
1918

2019
local-assembly:
2120
docker build assembly-demo/ -f Dockerfile \
@@ -39,7 +38,6 @@ assembly-job2:
3938

4039
distributed-assembly-images: distributed-assembly distributed-assembly-job1 distributed-assembly-job2 distributed-assembly-job3
4140
publish-distributed-assembly-images: push-distributed-assembly push-distributed-assembly-job1 push-distributed-assembly-job2 push-distributed-assembly-job3
42-
e2e-test-distributed-assembly: push-local-assembly push-distributed-assembly push-distributed-assembly-job1 push-distributed-assembly-job2 push-distributed-assembly-job3
4341

4442
distributed-assembly:
4543
docker build assembly-demo/ -f Dockerfile \
@@ -71,7 +69,6 @@ distributed-assembly-job3:
7169

7270
serialize-images: serialize-job
7371
publish-serialize-images: push-serialize-job
74-
e2e-test-serialize: push-serialize-job
7572

7673
serialize-job:
7774
docker build . -f Dockerfile \
@@ -83,7 +80,6 @@ serialize-job:
8380

8481
failover-images: backup-job recover-job build-local-object build-distributed-object-step1 build-distributed-object-step2 get-local-object get-distributed-object
8582
publish-failover-images: push-backup-job push-recover-job push-build-local-object push-build-distributed-object-step1 push-build-distributed-object-step2 push-get-local-object push-get-distributed-object
86-
e2e-test-failover: push-backup-job push-recover-job push-build-local-object push-build-distributed-object-step1 push-build-distributed-object-step2 push-get-local-object push-get-distributed-object
8783

8884
backup-job:
8985
docker build failover-demo/ -f Dockerfile \
@@ -131,7 +127,6 @@ get-distributed-object:
131127

132128
repartition-images: dask-repartition dask-repartition-job1 dask-repartition-job2 dask-worker-with-vineyard
133129
publish-repartition-images: push-dask-repartition push-dask-repartition-job1 push-dask-repartition-job2 push-dask-worker-with-vineyard
134-
e2e-test-repartition: push-dask-repartition push-dask-repartition-job1 push-dask-repartition-job2 push-dask-worker-with-vineyard
135130

136131
dask-repartition:
137132
docker build repartition-demo/ -f Dockerfile \
@@ -163,7 +158,6 @@ dask-worker-with-vineyard:
163158

164159
sidecar-images: sidecar-job
165160
publish-sidecar-images: push-sidecar-job
166-
e2e-test-sidecar: push-sidecar-job
167161

168162
sidecar-job:
169163
docker build sidecar-demo/ -f Dockerfile \
@@ -175,7 +169,6 @@ sidecar-job:
175169

176170
workflow-images: workflow-job1 workflow-job2
177171
publish-workflow-images: push-workflow-job1 push-workflow-job2
178-
e2e-test-workflow: push-workflow-job1 push-workflow-job2
179172

180173
workflow-job1:
181174
docker build workflow-demo/ -f Dockerfile \
@@ -189,15 +182,13 @@ workflow-job2:
189182
-t $(REGISTRY)/workflow-job2:$(TAG)
190183
.PHONY: workflow-job2
191184

192-
# publish all images to ghcr registry
193-
ALL-IMAGES ?= \
194-
publish-local-assembly-images \
195-
publish-distributed-assembly-images \
196-
publish-serialize-images \
197-
publish-failover-images \
198-
publish-repartition-images \
199-
publish-sidecar-images \
200-
publish-workflow-images
201-
202-
publish-all-images: $(ALL-IMAGES)
203-
.PHONY: publish-all-images
185+
############# publish all images to ghcr registry #############################
186+
187+
publish-all-images: publish-local-assembly-images \
188+
publish-distributed-assembly-images \
189+
publish-serialize-images \
190+
publish-failover-images \
191+
publish-repartition-images \
192+
publish-sidecar-images \
193+
publish-workflow-images
194+
.PHONY: publish-all-images

k8s/test/e2e/assembly-demo/assembly-job-config.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ distributedJob1:
4444
jobName: none
4545
dataName: ""
4646
schedulerName: ""
47-
nodeName: kind-worker
47+
nodeName: k3d-cluster-agent-0
4848

4949

5050
distributedJob2:
@@ -56,7 +56,7 @@ distributedJob2:
5656
jobName: none
5757
dataName: ""
5858
schedulerName: ""
59-
nodeName: kind-worker2
59+
nodeName: k3d-cluster-agent-1
6060

6161
distributedJob3:
6262
jobName: distributed-assembly-job3

k8s/test/e2e/assembly-demo/assembly-job.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ spec:
4949
{{- end }}
5050
containers:
5151
- name: {{ (datasource "config").$job.jobName }}
52-
image: localhost:5001/{{ (datasource "config").$job.jobName }}
52+
image: ghcr.io/v6d-io/v6d/{{ (datasource "config").$job.jobName }}
5353
env:
5454
- name: JOB_NAME
5555
value: {{ (datasource "config").$job.jobName }}

k8s/test/e2e/assembly/distributed-assembly-e2e.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
# Test assembly operation in different node
1717
setup:
1818
env: kind
19-
kubeconfig: /tmp/e2e-k8s.config
19+
kubeconfig: ~/.kube/config
2020
steps:
2121
- name: download all distributed assembly images into kind cluster
2222
command: |
23-
make -C k8s/test/e2e e2e-test-distributed-assembly REGISTRY=localhost:5001
23+
make -C k8s/test/e2e distributed-assembly-images
2424
- name: install job1 and job2
2525
command: |
2626
kubectl create namespace vineyard-job

k8s/test/e2e/assembly/local-assembly-e2e.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
# Test assembly operation in the same node
1717
setup:
1818
env: kind
19-
kubeconfig: /tmp/e2e-k8s.config
19+
kubeconfig: ~/.kube/config
2020
steps:
2121
- name: download all local assembly images into kind cluster
2222
command: |
23-
make -C k8s/test/e2e e2e-test-assembly REGISTRY=localhost:5001
23+
make -C k8s/test/e2e local-assembly-images
2424
- name: install job1
2525
command: |
2626
kubectl create namespace vineyard-job

0 commit comments

Comments
 (0)