forked from loft-sh/vcluster
-
Notifications
You must be signed in to change notification settings - Fork 0
/
devspace.yaml
211 lines (193 loc) · 5.59 KB
/
devspace.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
version: v2beta1
name: vcluster
# Variables used
vars:
# Make sure vcluster is the default namespace
DEVSPACE_FLAGS: "-n vcluster"
SYNCER_IMAGE: ghcr.io/loft-sh/loft-enterprise/dev-vcluster
COMMON_VALUES: ./test/commonValues.yaml
VALUES_FILE: ./test/e2e/values.yaml
# Images DevSpace will build for vcluster
images:
vcluster:
dockerfile: ./Dockerfile
image: ${SYNCER_IMAGE}
rebuildStrategy: ignoreContextChanges
target: builder
buildKit: {}
# Deployment used for vcluster
deployments:
vcluster-k8s:
helm:
releaseName: vcluster
chart:
name: ./charts/k8s
values: &values
job:
enabled: false
service:
type: NodePort
serviceCIDR: $([ $1 == "dev" ] && vcluster get service-cidr || echo "null")
tolerations:
- operator: "Exists"
serviceAccount:
create: false
name: default
rbac:
clusterRole:
create: true
role:
extended: true
syncer:
image: ${SYNCER_IMAGE}
multiNamespaceMode:
enabled: false
sync:
generic:
clusterRole:
extraRules:
- apiGroups: ["apiextensions.k8s.io"]
resources: ["customresourcedefinitions"]
verbs: ["get", "list", "watch"]
# Config for testing
- apiGroups: ["cert-manager.io"]
resources: ["issuers", "certificates", "certificaterequests"]
verbs: ["create", "delete", "patch", "update", "get", "list", "watch"]
vcluster-k3s:
helm:
releaseName: vcluster
chart:
name: ./charts/k3s
values: *values # reuses the same values defined under the &values anchor
vcluster-k0s:
helm:
releaseName: vcluster
chart:
name: ./charts/k0s
values: *values # reuses the same values defined under the &values anchor
# Dev Configuration for vcluster
dev:
vcluster:
imageSelector: ${SYNCER_IMAGE}
container: syncer
workingDir: /vcluster-dev
resources:
limits:
cpu: "0" # to prevent CPU throttling during compilation
memory: "0" # to prevent OOM kills which can happen during first compilation due to high number of deps
terminal:
command: "./devspace_start.sh"
ports:
- port: 2346:2345
sync:
- excludePaths:
- '**'
- '!/pkg'
- 'cmd/vclusterctl/cmd/charts'
- '!/cmd'
- '!/vendor'
- '!/hack'
- '!/go.mod'
- '!/go.sum'
- '!/devspace_start.sh'
- '!/manifests'
- '/manifests/coredns' # shouldn't sync to this path because it is mounted from a ConfigMap as ReadOnly
# Pipelines used for vcluster
pipelines:
dev:
flags:
- name: distro
description: "Virtual cluster distribution to use"
default: "k3s"
type: string
run: |-
# Deploy the vcluster
run_pipelines deploy --set-flag distro=$(get_flag distro)
# Start dev mode
start_dev --all
deploy:
flags:
- name: distro
description: "Virtual cluster distribution to use"
default: "k3s"
type: string
run: |-
# Make sure pull secrets are there
ensure_pull_secrets --all
# Build the vcluster image
build_images --all
# Deploy the vcluster
if is_equal $(get_flag distro) k8s; then
kubectl apply -f ./hack/vcluster-certs.yaml -n ${DEVSPACE_NAMESPACE}
create_deployments vcluster-k8s
elif is_equal $(get_flag distro) k0s; then
create_deployments vcluster-k0s
else
create_deployments vcluster-k3s
fi
purge:
run: |-
# Purge the vcluster
run_default_pipeline purge
# Make sure the pvcs are deleted as well
kubectl delete pvc --all -n ${DEVSPACE_NAMESPACE}
profiles:
- name: dev-hostpath-mapper
patches:
- op: remove
path: dev.vcluster.imageSelector
- op: remove
path: dev.vcluster.container
- op: add
path: dev.vcluster.labelSelector
value:
component: hostpath-mapper
merge:
deployments:
vcluster-k3s: &hostmapper_patch
helm:
values:
hostpathMapper:
image: ${SYNCER_IMAGE}
enabled: true
dev: true
syncer:
livenessProbe:
enabled: false
readinessProbe:
enabled: false
extraArgs:
- start
- --tls-san=vcluster
vcluster-k0s: *hostmapper_patch # reuses the same patch defined under the &hostmapper_patch anchor
vcluster-k8s: *hostmapper_patch # reuses the same patch defined under the &hostmapper_patch anchor
- name: test-k3s
patches:
- op: add
path: deployments.vcluster-k3s.helm
value:
valuesFiles:
- ${COMMON_VALUES}
- ${VALUES_FILE}
- name: test-k8s
patches:
- op: add
path: deployments.vcluster-k8s.helm
value:
valuesFiles:
- ${COMMON_VALUES}
- ${VALUES_FILE}
- name: test-k0s
patches:
- op: add
path: deployments.vcluster-k0s.helm
value:
valuesFiles:
- ${COMMON_VALUES}
- ${VALUES_FILE}
commands:
# e.g. devspace run test k3s
# e.g. devspace run test k3s --var VALUES_FILE=./test/e2e_node
test: |-
devspace purge -n ${DEVSPACE_NAMESPACE} --debug
devspace dev -n ${DEVSPACE_NAMESPACE} --profile test-$@