ORCHESTRATION_K8S_DEPLOYMENT - zero1ne-26/doc GitHub Wiki
orchestration-serverํ๋ก์ ํธ(docker-compose.yml๊ตฌ์ฑ)๋ฅผ ๋จ์ผ ์๋ฒ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ์ฌ๋ฆฌ๊ธฐ ์ํ ๋งค๋ํ์คํธ ์ธํธ์ ๋ฐฐํฌ ์ ์ฐจ. ๋ชจ๋ ์์กด ์๋น์ค(MQTT ๋ธ๋ก์ปค, S3 ๋ชฉ)๋ฅผ ๊ฐ์ ํด๋ฌ์คํฐ ์์ ๋์ฐ๊ณ , ์ธ๋ถ ์ง์ ์ NodePort๋ก ๋ ธ์ถํ๋ค.๋งค๋ํ์คํธ ์๋ณธ:
orchestration-server/deploy/k8s/
- ๋ฐฐํฌ์ฉ YAML ํ์ผ = ์ฟ ๋ฒ๋คํฐ์ค ๋งค๋ํ์คํธ(manifest)
- docker-compose โ ๋งค๋ํ์คํธ ์ ํ = "์ฟ ๋ฒ๋คํฐ์ค๋ก ๋ง์ด๊ทธ๋ ์ด์ "
- ๋งค๋ํ์คํธ๋ฅผ ๋ณ์ํํด ํจํค์งํ ๊ฒ = Helm ์ฐจํธ (์ ํ, 8์ ์ฐธ๊ณ )
ํธ๋ํฝ ํ๋ฆ:
์ธ๋ถ ๋ธ๋ผ์ฐ์
โ http://<์๋ฒIP>:30090
โผ
nginx (NodePort 30090) โ ์ ์ผํ ์ธ๋ถ ์ง์
์
โโโ /api, /health, /docs, /admin, /ws/ ... โ orchestration-server:8080
โโโ /mqtt-ws โ mosquitto:9001 (websocket)
โโโ /s3/ โ ministack:4566
โโโ / (๊ทธ ์ธ) โ backoffice:80
- ๋ชจ๋ ๋ฆฌ์์ค๋
orchestration๋ค์์คํ์ด์ค์ ์์ฑ. - ์๋น์ค ๊ฐ ํต์ ์ Service ์ด๋ฆ(DNS) ์ผ๋ก ์ฐ๊ฒฐ (
nginx.conf์ upstream ์ด๋ฆ๊ณผ ์ ํํ ์ผ์น).
orchestration-server/deploy/k8s/ โ ํ์ผ๋ช
์ ๋ฒํธ ์์๋๋ก ์ ์ฉ๋๋ค.
| ํ์ผ | ๋ฆฌ์์ค | ์ญํ |
|---|---|---|
00-namespace.yaml |
Namespace |
orchestration ๋ค์์คํ์ด์ค |
10-configmap.yaml |
ConfigMap | ์๋ฒ ์ผ๋ฐ ํ๊ฒฝ๋ณ์ |
11-secret.yaml |
Secret | API ํคยท๋น๋ฒ (์ค๊ฐ์ผ๋ก ์ฑ์์ผ ํจ) |
20-mosquitto.yaml |
ConfigMap/PVC/Deployment/Service | MQTT ๋ธ๋ก์ปค (1883, 9001) |
21-ministack.yaml |
PVC/Deployment/Service | S3 ๋ชฉ ์๋ฒ (4566) |
30-server.yaml |
PVC/Deployment/Service | Go API ์๋ฒ (8080, SQLite) |
40-backoffice.yaml |
Deployment/Service | ์ ์ ํ๋ก ํธ (80) |
50-nginx.yaml |
ConfigMap/Deployment/Service | ๋ฆฌ๋ฒ์ค ํ๋ก์ + ์ธ๋ถ ์ง์ ์ NodePort 30090 |
| docker-compose | ์ฟ ๋ฒ๋คํฐ์ค ๋งค๋ํ์คํธ | ๋น๊ณ |
|---|---|---|
services: ๊ฐ ์ปจํ
์ด๋ |
Deployment | ์คํ ๋จ์ |
ports / expose
|
Service | ๋ด๋ถ/์ธ๋ถ ์ ๊ทผ |
environment: (์ผ๋ฐ ๊ฐ) |
ConfigMap |
APP_PORT, S3_ENDPOINT ๋ฑ |
environment: (๋น๋ฐ ๊ฐ) |
Secret |
LLM_API_KEY, MQTT_PASSWORD, S3_SECRET_KEY, STT_API_KEY
|
volumes: (๋ฐ์ดํฐ ์์) |
PVC |
/data(SQLiteยท๋ก๊ทธ), mosquitto/ministack ๋ฐ์ดํฐ |
./nginx.conf:...:ro |
ConfigMap โ volumeMount | ์ค์ ํ์ผ ๋ง์ดํธ |
host.docker.internal:9001 |
mosquitto:9001 |
ํด๋ฌ์คํฐ ๋ด๋ถ Service ์ฐธ์กฐ๋ก ๊ต์ |
| ์ธ๋ถ ๋ ธ์ถ(nginx) | NodePort Service (30090) |
orchestration-server:local / orchestration-backoffice:local ์ ๋ก์ปฌ ๋น๋ ์ด๋ฏธ์ง๋ผ ๋
ธ๋๊ฐ ๋ ์ง์คํธ๋ฆฌ์์ ๋ฐ์์ฌ ์ ์๋ค. ๋
ธ๋์ ์ง์ ๋ฃ์ด์ผ ํ๋ค. ์ ํ๋ฉด ImagePullBackOff.
# ๋น๋
docker build -t orchestration-server:local .
docker build -t orchestration-backoffice:local ./backoffice
# ๋
ธ๋์ ๋ก๋ (ํด๋ฌ์คํฐ ์ข
๋ฅ์ ๋ฐ๋ผ ํ1)
# k3s (containerd)
docker save orchestration-server:local | sudo k3s ctr images import -
docker save orchestration-backoffice:local | sudo k3s ctr images import -
# kind
kind load docker-image orchestration-server:local orchestration-backoffice:local
# minikube
minikube image load orchestration-server:local orchestration-backoffice:local๋งค๋ํ์คํธ๋
imagePullPolicy: IfNotPresent๋ผ ๋ ธ๋์ ์ด๋ฏธ์ง๊ฐ ์์ผ๋ฉด pull์ ์๋ํ์ง ์๋๋ค.
11-secret.yaml ์ ๊ฐ๋ค์ ์ค์ ๊ฐ์ผ๋ก. git์ ์ค๊ฐ์ ๋จ๊ธฐ๊ธฐ ์ซ์ผ๋ฉด ๋ช
๋ น์ผ๋ก ์์ฑ:
kubectl create secret generic orchestration-secret -n orchestration \
--from-literal=LLM_API_KEY=... --from-literal=STT_API_KEY=... \
--from-literal=S3_ACCESS_KEY=minioadmin --from-literal=S3_SECRET_KEY=minioadmin \
--from-literal=MQTT_USERNAME= --from-literal=MQTT_PASSWORD=10-configmap.yaml ์ S3_PUBLIC_BASE_URL ์ <์๋ฒIP> ๋ฅผ ์ค์ ๋
ธ๋ IP๋ก.
(์: http://192.168.0.10:30090/s3/persona-images)
kubectl apply -f deploy/k8s/
kubectl get all -n orchestration
kubectl get pvc -n orchestration
kubectl logs -n orchestration deploy/orchestration-server -f์ ์: http://<์๋ฒIP>:30090
-
SQLite = ์ํ(state) ์์:
orchestration-server๋DATABASE_PATH=/data/orchestration.dbํ์ผ DB๋ฅผ ์ด๋ค.-
replicas: 1๊ณ ์ โ 2๊ฐ ์ด์ ๋๋ฆฌ๋ฉด ํ์ผ ๋ฝ ์ถฉ๋.strategy: Recreate์ฌ์ฉ. - PVC(ReadWriteOnce)๋ก ์์ํ โ ์์ผ๋ฉด ํ๋ ์ฌ์์ ์ ๋ฐ์ดํฐ ์์ค.
- ์ค์ผ์ผ์์์ด ํ์ํด์ง๋ฉด SQLite โ PostgreSQL ๋ฑ ์ธ๋ถ DB๋ก ์ ํํด์ผ ํ๋ค.
-
-
ministack(S3 ๋ชฉ) ์ ๊ฐ๋ฐ/PoC ์ฉ. ์ด์ ์ ํ ์ ์ค์ S3 ๋๋ MinIO๋ก ๊ต์ฒดํ๊ณ
S3_ENDPOINT/Secret ์ ๋ง๊ฒ ์์ . -
PVC: ํด๋ฌ์คํฐ์ ๊ธฐ๋ณธ StorageClass ํ์. ํ์ธ
kubectl get storageclass(k3s๋local-path๊ธฐ๋ณธ ์ ๊ณต). -
๋ฐฉํ๋ฒฝ: ๋
ธ๋์
30090์ธ๋ฐ์ด๋ ํ์ฉ ํ์.
์ฌ๋ฐฐํฌ๊ฐ ์ฆ๊ฑฐ๋ dev/prod ํ๊ฒฝ์ ๋๋ ๊ฑฐ๋ฉด Helm ์ฐจํธ๋ก ๊ฐ์ธ๋ ๊ฒ ์ด๋์ด๋ค.
| raw ๋งค๋ํ์คํธ | Helm ์ฐจํธ | |
|---|---|---|
| ๋ฐฐํฌ | kubectl apply -f deploy/k8s/ |
helm install orchestration ./chart |
| ๊ฐ ๋ณ๊ฒฝ | ๊ฐ yaml ์ง์ ํธ์ง |
values.yaml ํ ๊ณณ / --set
|
| ์ ๊ทธ๋ ์ด๋ยท๋กค๋ฐฑ | ์๋ |
helm upgrade / helm rollback
|
| ํ๊ฒฝ๋ณ ๊ฐ | ํ์ผ ๋ณต์ฌ | -f values-prod.yaml |
| ์ ์ฒด ์ญ์ | ๋ฆฌ์์ค ๊ฐ๋ณ | helm uninstall orchestration |
values.yaml๋ก ๋บ ๋งํ ๊ฐ: ๋
ธ๋ IPยทNodePort, ์ด๋ฏธ์ง ํ๊ทธ, replicaยท๋ฆฌ์์ค, Secret, ministack.enabled/mosquitto.enabled ํ ๊ธ(์ธ๋ถ S3ยท๋ธ๋ก์ปค ์ ํ ๋๋น).
ํ ๋ฒ ์ฌ๋ ค๋๊ณ ๊ฑฐ์ ์ ๊ฑด๋๋ฆด ๊ฑฐ๋ฉด raw ๋งค๋ํ์คํธ๋ก ์ถฉ๋ถํ๋ค.