Skip to content

Commit 9ccc498

Browse files
Merge pull request #80 from AET-DevOps25/deploy-genai-service
Add genai deployment for kubernetes
2 parents 9277aac + 52a4ede commit 9ccc498

File tree

7 files changed

+194
-9
lines changed

7 files changed

+194
-9
lines changed

.github/workflows/deploy-to-k8s.yml

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,7 @@ jobs:
5959
BRANCH_SAFE=${BRANCH//\//-}
6060
echo "tag=$BRANCH_SAFE" >> $GITHUB_OUTPUT
6161
echo "api_url=https://$BRANCH_SAFE.api.whiteboard.student.k8s.aet.cit.tum.de" >> $GITHUB_OUTPUT
62-
echo "base_url=https://$BRANCH_SAFE.whiteboard.student.k8s.aet.cit.tum.de" >> $GITHUB_OUTPUT
63-
62+
echo "base_url=https://$BRANCH_SAFE.whiteboard.student.k8s.aet.cit.tum.de" >> $GITHUB_OUTPUT
6463
echo "genai_url=https://$BRANCH_SAFE.genai.whiteboard.student.k8s.aet.cit.tum.de" >> $GITHUB_OUTPUT
6564
fi
6665
@@ -141,15 +140,55 @@ jobs:
141140
build-args: API_URL=${{ needs.setup.outputs.api_url }}
142141
platforms: linux/amd64
143142

143+
build-genai:
144+
needs: setup
145+
runs-on: ubuntu-latest
146+
steps:
147+
- uses: actions/checkout@v3
148+
with:
149+
fetch-depth: 0
150+
ref: ${{ needs.setup.outputs.merge_commit || github.sha }}
151+
152+
- name: Set up Docker Buildx
153+
uses: docker/setup-buildx-action@v2
154+
155+
- name: Log in to GHCR
156+
uses: docker/login-action@v2
157+
with:
158+
registry: ghcr.io
159+
username: ${{ github.actor }}
160+
password: ${{ secrets.GITHUB_TOKEN }}
161+
162+
- name: Cache Docker layers
163+
uses: actions/cache@v3
164+
with:
165+
path: /tmp/.buildx-cache-genai
166+
key: ${{ runner.os }}-genai-${{ github.sha }}
167+
restore-keys: |
168+
${{ runner.os }}-genai-
169+
170+
- name: Build and push genai image
171+
uses: docker/build-push-action@v3
172+
with:
173+
context: ./genai
174+
file: ./genai/Dockerfile
175+
push: true
176+
tags: ghcr.io/${{ needs.setup.outputs.repo }}/genai:${{ needs.setup.outputs.tag }}
177+
build-args: API_URL=${{ needs.setup.outputs.api_url }}
178+
platforms: linux/amd64
179+
180+
144181
deploy:
145182
needs:
146183
- build-client
147184
- build-server
185+
- build-genai
148186
runs-on: ubuntu-latest
149187
outputs:
150188
client_url: ${{ steps.set-vars.outputs.CLIENT_URL }}
151189
server_url: ${{ steps.set-vars.outputs.SERVER_URL }}
152190
auth_url: ${{ steps.set-vars.outputs.AUTH_URL }}
191+
genai_url: ${{ steps.set-vars.outputs.GENAI_URL }}
153192
steps:
154193
- name: Checkout repository
155194
uses: actions/checkout@v3
@@ -165,13 +204,15 @@ jobs:
165204
CLIENT_URL=whiteboard.student.k8s.aet.cit.tum.de
166205
SERVER_URL=api.whiteboard.student.k8s.aet.cit.tum.de
167206
AUTH_URL=auth.whiteboard.student.k8s.aet.cit.tum.de
207+
GENAI_URL=genai.whiteboard.student.k8s.aet.cit.tum.de
168208
echo "NAMESPACE=production" >> $GITHUB_ENV
169209
echo "IMAGE_TAG=latest" >> $GITHUB_ENV
170210
echo "VALUES_FILE=./infrastructure/whiteboard-app/production.values.yaml" >> $GITHUB_ENV
171211
elif [[ "$BRANCH" == "develop" ]]; then
172212
CLIENT_URL=staging.whiteboard.student.k8s.aet.cit.tum.de
173213
SERVER_URL=staging.api.whiteboard.student.k8s.aet.cit.tum.de
174214
AUTH_URL=staging.auth.whiteboard.student.k8s.aet.cit.tum.de
215+
GENAI_URL=staging.genai.whiteboard.student.k8s.aet.cit.tum.de
175216
echo "NAMESPACE=staging" >> $GITHUB_ENV
176217
echo "IMAGE_TAG=develop" >> $GITHUB_ENV
177218
echo "VALUES_FILE=./infrastructure/whiteboard-app/staging.values.yaml" >> $GITHUB_ENV
@@ -180,6 +221,7 @@ jobs:
180221
CLIENT_URL=$BRANCH_SAFE.whiteboard.student.k8s.aet.cit.tum.de
181222
SERVER_URL=$BRANCH_SAFE.api.whiteboard.student.k8s.aet.cit.tum.de
182223
AUTH_URL=$BRANCH_SAFE.auth.whiteboard.student.k8s.aet.cit.tum.de
224+
GENAI_URL=$BRANCH_SAFE.genai.whiteboard.student.k8s.aet.cit.tum.de
183225
echo "NAMESPACE=$BRANCH_SAFE" >> $GITHUB_ENV
184226
echo "IMAGE_TAG=$BRANCH_SAFE" >> $GITHUB_ENV
185227
echo "VALUES_FILE=./infrastructure/whiteboard-app/pullrequest.values.yaml" >> $GITHUB_ENV
@@ -188,10 +230,13 @@ jobs:
188230
echo "CLIENT_URL=$CLIENT_URL" >> $GITHUB_ENV
189231
echo "SERVER_URL=$SERVER_URL" >> $GITHUB_ENV
190232
echo "AUTH_URL=$AUTH_URL" >> $GITHUB_ENV
233+
echo "GENAI_URL=$GENAI_URL" >> $GITHUB_ENV
234+
echo "OPEN_WEB_UI_API_KEY=${{ secrets.OPEN_WEB_UI_API_KEY }}" >> $GITHUB_ENV
191235
192236
echo "CLIENT_URL=$CLIENT_URL" >> $GITHUB_OUTPUT
193237
echo "SERVER_URL=$SERVER_URL" >> $GITHUB_OUTPUT
194238
echo "AUTH_URL=$AUTH_URL" >> $GITHUB_OUTPUT
239+
echo "GENAI_URL=$GENAI_URL" >> $GITHUB_OUTPUT
195240
196241
- name: Set up Kubeconfig
197242
run: |
@@ -230,9 +275,12 @@ jobs:
230275
--set namespace="${{ env.NAMESPACE }}" \
231276
--set server.image.tag="${{ env.IMAGE_TAG }}" \
232277
--set client.image.tag="${{ env.IMAGE_TAG }}" \
278+
--set genai.image.tag="${{ env.IMAGE_TAG }}" \
233279
--set client.url="${{ env.CLIENT_URL }}" \
234280
--set server.url="${{ env.SERVER_URL }}" \
235-
--set auth.url="${{ env.AUTH_URL }}"
281+
--set auth.url="${{ env.AUTH_URL }}" \
282+
--set genai.url="${{ env.GENAI_URL }}" \
283+
--set genai.apiKey="${{ env.OPEN_WEB_UI_API_KEY }}" \
236284
237285
comment-pr:
238286
needs: deploy
@@ -242,6 +290,7 @@ jobs:
242290
CLIENT_URL: ${{ needs.deploy.outputs.client_url }}
243291
SERVER_URL: ${{ needs.deploy.outputs.server_url }}
244292
AUTH_URL: ${{ needs.deploy.outputs.auth_url }}
293+
GENAI_URL: ${{ needs.deploy.outputs.genai_url }}
245294
steps:
246295
- name: Comment on Pull Request with URLs
247296
uses: actions/github-script@v6
@@ -252,6 +301,7 @@ jobs:
252301
const clientUrl = `https://${process.env.CLIENT_URL}`;
253302
const serverUrl = `https://${process.env.SERVER_URL}`;
254303
const authUrl = `https://${process.env.AUTH_URL}`;
304+
const genaiUrl = `https://${process.env.GENAI_URL}`;
255305
256306
// Check existing comments to avoid duplicates
257307
const { data: comments } = await github.rest.issues.listComments({
@@ -269,6 +319,7 @@ jobs:
269319
- **Client:** [${clientUrl}](${clientUrl})
270320
- **Server:** [${serverUrl}/swagger-ui/index.html](${serverUrl}/swagger-ui/index.html)
271321
- **Keycloak:** [${authUrl}](${authUrl})
322+
- **GenAI:** [${genaiUrl}/docs](${genaiUrl}/docs)
272323
`;
273324
274325
await github.rest.issues.createComment({

compose.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,6 @@ services:
117117
ports:
118118
- "8000:8000"
119119
environment:
120-
DB_HOST: ${DB_HOST:-weaviate}
121-
DB_PORT: ${DB_PORT:-9090}
122-
DB_GRPC_PORT: ${DB_GRPC_PORT:-50051}
123120
OPEN_WEB_UI_API_KEY: ${OPEN_WEB_UI_API_KEY}
124121
SERVER_URL: ${SERVER_URL:-http://localhost:9091}
125122
CLIENT_URL: ${CLIENT_URL:-http://localhost:3000}

infrastructure/whiteboard-app/production.values.yaml

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,28 @@ keycloak:
100100
- name: realm-export
101101
mountPath: /opt/bitnami/keycloak/data/import
102102

103+
genai:
104+
image:
105+
repository: ghcr.io/aet-devops25/team-server-down/genai
106+
tag: latest
107+
pullPolicy: Always
108+
service:
109+
type: ClusterIP
110+
port: 8000
111+
targetPort: 8000
112+
replicaCount: 1
113+
env:
114+
- name: OPEN_WEB_UI_API_KEY
115+
value: '{{ .Values.genai.apiKey }}'
116+
- name: API_URL
117+
value: https://gpu.aet.cit.tum.de/api/chat/completions
118+
- name: SERVER_URL
119+
value: https://api.whiteboard.student.k8s.aet.cit.tum.de
120+
- name: CLIENT_URL
121+
value: https://whiteboard.student.k8s.aet.cit.tum.de
122+
- name: GENAI_URL
123+
value: https://genai.whiteboard.student.k8s.aet.cit.tum
124+
103125
ingress:
104126
enabled: true
105127
className: "nginx"
@@ -113,6 +135,7 @@ ingress:
113135
- "whiteboard.student.k8s.aet.cit.tum.de"
114136
- "api.whiteboard.student.k8s.aet.cit.tum.de"
115137
- "auth.whiteboard.student.k8s.aet.cit.tum.de"
138+
- "genai.whiteboard.student.k8s.aet.cit.tum.de"
116139
secretName: "whiteboard-devops25-tls"
117140
rules:
118141
- host: "whiteboard.student.k8s.aet.cit.tum.de"
@@ -138,4 +161,12 @@ ingress:
138161
service:
139162
name: '{{ printf "%s-keycloak" .Release.Name }}'
140163
port:
141-
number: 80
164+
number: 80
165+
- host: "genai.whiteboard.student.k8s.aet.cit.tum.de"
166+
paths:
167+
- path: /
168+
pathType: Prefix
169+
service:
170+
name: '{{ printf "%s-genai" .Release.Name }}'
171+
port:
172+
number: 8000

infrastructure/whiteboard-app/pullrequest.values.yaml

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,27 @@ keycloak:
100100
- name: realm-export
101101
mountPath: /opt/bitnami/keycloak/data/import
102102

103+
genai:
104+
image:
105+
repository: ghcr.io/aet-devops25/team-server-down/genai
106+
tag: ""
107+
pullPolicy: Always
108+
service:
109+
type: ClusterIP
110+
port: 8000
111+
targetPort: 8000
112+
env:
113+
- name: OPEN_WEB_UI_API_KEY
114+
value: '{{ .Values.genai.apiKey }}'
115+
- name: SERVER_URL
116+
value: 'https://{{ .Values.server.url }}'
117+
- name: CLIENT_URL
118+
value: 'https://{{ .Values.client.url }}'
119+
- name: GENAI_URL
120+
value: 'https://{{ .Values.genai.url }}'
121+
- name: API_URL
122+
value: 'https://gpu.aet.cit.tum.de/api/chat/completions'
123+
103124
ingress:
104125
enabled: true
105126
className: "nginx"
@@ -113,6 +134,7 @@ ingress:
113134
- '{{ .Values.client.url }}'
114135
- '{{ .Values.server.url }}'
115136
- '{{ .Values.auth.url }}'
137+
- '{{ .Values.genai.url }}'
116138
secretName: '{{ .Values.namespace }}-whiteboard-devops25-tls'
117139
rules:
118140
- host: '{{ .Values.client.url }}'
@@ -138,4 +160,12 @@ ingress:
138160
service:
139161
name: '{{ printf "%s-keycloak" .Release.Name }}'
140162
port:
141-
number: 80
163+
number: 80
164+
- host: '{{ .Values.genai.url }}'
165+
paths:
166+
- path: /
167+
pathType: Prefix
168+
service:
169+
name: '{{ printf "%s-genai" .Release.Name }}'
170+
port:
171+
number: 8000

infrastructure/whiteboard-app/staging.values.yaml

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,29 @@ keycloak:
100100
- name: realm-export
101101
mountPath: /opt/bitnami/keycloak/data/import
102102

103+
genai:
104+
image:
105+
repository: ghcr.io/aet-devops25/team-server-down/genai
106+
tag: develop
107+
pullPolicy: Always
108+
service:
109+
type: ClusterIP
110+
port: 8000
111+
targetPort: 8000
112+
replicaCount: 1
113+
env:
114+
- name: OPEN_WEB_UI_API_KEY
115+
value: '{{ .Values.genai.apiKey }}'
116+
- name: API_URL
117+
value: https://gpu.aet.cit.tum.de/api/chat/completions
118+
- name: SERVER_URL
119+
value: https://staging.api.whiteboard.student.k8s.aet.cit.tum.de
120+
- name: CLIENT_URL
121+
value: https://staging.whiteboard.student.k8s.aet.cit.tum
122+
- name: GENAI_URL
123+
value: https://staging.genai.whiteboard.student.k8s.aet.cit
124+
125+
103126
ingress:
104127
enabled: true
105128
className: "nginx"
@@ -113,6 +136,7 @@ ingress:
113136
- "staging.whiteboard.student.k8s.aet.cit.tum.de"
114137
- "staging.api.whiteboard.student.k8s.aet.cit.tum.de"
115138
- "staging.auth.whiteboard.student.k8s.aet.cit.tum.de"
139+
- "staging.genai.whiteboard.student.k8s.aet.cit.tum.de"
116140
secretName: "staging-whiteboard-devops25-tls"
117141
rules:
118142
- host: "staging.whiteboard.student.k8s.aet.cit.tum.de"
@@ -138,4 +162,12 @@ ingress:
138162
service:
139163
name: '{{ printf "%s-keycloak" .Release.Name }}'
140164
port:
141-
number: 80
165+
number: 80
166+
- host: "staging.genai.whiteboard.student.k8s.aet.cit.tum.de"
167+
paths:
168+
- path: /
169+
pathType: Prefix
170+
service:
171+
name: '{{ printf "%s-genai" .Release.Name }}'
172+
port:
173+
number: 8000
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: whiteboard-genai
5+
spec:
6+
replicas: {{ .Values.genai.replicaCount }}
7+
selector:
8+
matchLabels:
9+
app: whiteboard-genai-selector
10+
template:
11+
metadata:
12+
labels:
13+
app: whiteboard-genai-selector
14+
spec:
15+
containers:
16+
- name: genai
17+
image: "{{ .Values.genai.image.repository }}:{{ .Values.genai.image.tag }}"
18+
imagePullPolicy: {{ .Values.genai.image.pullPolicy }}
19+
resources:
20+
limits:
21+
cpu: "500m"
22+
memory: "256Mi"
23+
requests:
24+
cpu: "50m"
25+
memory: "50Mi"
26+
ports:
27+
- containerPort: {{ .Values.genai.service.targetPort }}
28+
env:
29+
{{- range .Values.genai.env }}
30+
- name: {{ .name }}
31+
value: {{ tpl .value $ | quote }}
32+
{{- end }}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: {{ .Release.Name }}-genai
5+
spec:
6+
type: {{ .Values.genai.service.type }}
7+
selector:
8+
app: whiteboard-genai-selector
9+
ports:
10+
- port: {{ .Values.genai.service.port }}
11+
targetPort: {{ .Values.genai.service.targetPort }}
12+
protocol: TCP

0 commit comments

Comments
 (0)