์ด ๊ธ์์ ๋ค๋ฃจ๋ ๊ฒ
ArgoCD AppProject์ ApplicationSet์ ์ฌ์ฉํด dev/prod ํ๊ฒฝ๊ณผ Core/Baseline/Optional ๋ ์ด์ด ๊ฒฝ๊ณ๋ฅผ ๊ตฌ์กฐ์ ์ผ๋ก ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ
์ ์์ง์
ArgoCD AppProject / ApplicationSet
- dev/prod์ ๋ ์ด์ด ๊ฒฝ๊ณ๋ฅผ ๊ฐ์ ํ๊ธฐ
๋ค์ด๊ฐ๋ฉฐ
GitOps๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ณดํต ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ๋ฉ๋๋ค.
- Git์ด Single Source of Truth๋ค
- ๋ฐฐํฌ๊ฐ ์๋ํ๋๋ค
- ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ถ์ ํ ์ ์๋ค
์ด ์ค๋ช ์ ๋ง์ง๋ง, ์ด์ ๊ด์ ์์ GitOps์ ๊ฐ์ฅ ์ค์ํ ์ญํ ์ ๋ฐ๋ก ์์ต๋๋ค.
๋ฐ๋ก
๋ฐฐํฌ ๊ฒฝ๊ณ๋ฅผ ๊ตฌ์กฐ๋ก ๊ฐ์ ํ๋ ๊ฒ
์ ๋๋ค.
์๋ฅผ ๋ค์ด dev์ prod ํ๊ฒฝ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
๋ง์ฝ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ผ๋ฉด ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
- ๊ฐ์ Git repository
- ๊ฐ์ Kubernetes cluster
- ๋จ์ง namespace ์ด๋ฆ๋ง ๋ค๋ฅธ ํ๊ฒฝ
์ด ๊ฒฝ์ฐ ์์ ์ค์ ํ๋๋ก๋ ๋ค์๊ณผ ๊ฐ์ ์ผ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
- dev ๋ฆฌ์์ค๊ฐ prod์ ๋ฐฐํฌ๋๋ ๊ฒฝ์ฐ
- ํ ์คํธ์ฉ ์ค์ ์ด ์ด์ ํ๊ฒฝ์ ์ ์ฉ๋๋ ๊ฒฝ์ฐ
- ํน์ ์์คํ ์ด ์๋ชป๋ namespace๋ก ๋ฐฐํฌ๋๋ ๊ฒฝ์ฐ
์ด ํ๋ก์ ํธ์์๋ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ์ค์ด๊ธฐ ์ํด
ArgoCD ๊ตฌ์กฐ ์์ฒด๋ฅผ ํ๊ฒฝ ๊ฒฝ๊ณ์ ๋ ์ด์ด ๊ตฌ์กฐ์ ๋ง๊ฒ ์ค๊ณํ์ต๋๋ค.
GitOps ๊ตฌ์กฐ ๊ฐ์
์ด ํ๋ซํผ์ GitOps ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ ๊ณ์ธต์ ๊ฐ์ง๋๋ค.
Root Application
โ
AppProject
โ
ApplicationSet
โ
Application
๊ฐ ๊ณ์ธต์ ์๋ก ๋ค๋ฅธ ์ญํ ์ ๋ด๋นํฉ๋๋ค.
| ๊ณ์ธต | ์ญํ |
|---|---|
| Root Application | GitOps ๊ตฌ์กฐ์ ์ต์์ ๊ด๋ฆฌ |
| AppProject | ๋ฐฐํฌ ๊ฒฝ๊ณ ์ ์ |
| ApplicationSet | ํ๊ฒฝ๋ณ ์ฑ ์์ฑ |
| Application | ์ค์ ์๋น์ค ๋ฐฐํฌ |
์ด ๊ตฌ์กฐ ๋๋ถ์ GitOps๊ฐ ๋จ์ํ ๋ฐฐํฌ ์๋ํ๊ฐ ์๋๋ผ
์ด์ ๊ฒฝ๊ณ๋ฅผ ๊ฐ์ ํ๋ ์์คํ ์ด ๋ฉ๋๋ค.
AppProject: ๋ฐฐํฌ ๊ฒฝ๊ณ๋ฅผ ์ ์ํ๋ ๋ ์ด์ด
ArgoCD์์ AppProject๋ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
AppProject๋ ๋ค์์ ์ ์ํฉ๋๋ค.
- ์ด๋ค repository๋ฅผ ์ฌ์ฉํ ์ ์๋์ง
- ์ด๋ค cluster / namespace์ ๋ฐฐํฌํ ์ ์๋์ง
- ์ด๋ค ๋ฆฌ์์ค๋ฅผ ์์ฑํ ์ ์๋์ง
์ฆ,
Application์ด ์ด๋์ ๋ฐฐํฌ๋ ์ ์๋์ง ์ ์ํ๋ ๊ฒฝ๊ณ์ ๋๋ค.
์ด ํ๋ก์ ํธ์์๋ ๋ค์๊ณผ ๊ฐ์ AppProject ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Proof:
docs/proof/latest/projects.txt
์ค์ ์ผ๋ถ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
baseline Baseline stack project (minio / loki / alloy)
bootstrap Root/Bootstrap project
dev Dev environment project
optional Optional project (feature-store / feast)
prod Prod environment project
์ด ๊ตฌ์กฐ๋ ๋จ์ํ ์ด๋ฆ๋ง ๋ค๋ฅธ ๊ฒ์ด ์๋๋๋ค.
๊ฐ ํ๋ก์ ํธ๋ ์๋ก ๋ค๋ฅธ ๋ฐฐํฌ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
dev / prod ํ๊ฒฝ ๋ถ๋ฆฌ
dev์ prod๋ ๋จ์ํ namespace๋ง ๋ค๋ฅธ ๊ฒ์ด ์๋๋ผ
ArgoCD ํ๋ก์ ํธ ์์ค์์ ๋ถ๋ฆฌ๋์ด ์์ต๋๋ค.
์๋ฅผ ๋ค์ด dev ํ๋ก์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ ๋ชฉ์ ์ ๊ฐ์ง๋๋ค.
dev environment project
destination: *-dev namespaces
๋ฐ๋ฉด prod ํ๋ก์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
prod environment project
destination: *-prod namespaces
์ด ๊ตฌ์กฐ ๋๋ถ์ ๋ค์๊ณผ ๊ฐ์ ์ผ์ด ๊ฐ๋ฅํด์ง๋๋ค.
- dev ์ ํ๋ฆฌ์ผ์ด์ ์ prod namespace์ ๋ฐฐํฌ๋ ์ ์์
- prod ์ ํ๋ฆฌ์ผ์ด์ ์ dev namespace์ ๋ฐฐํฌ๋ ์ ์์
์ฆ,
์๋ชป๋ ํ๊ฒฝ ๋ฐ์์ ์ฌ๋์ ์ฃผ์๊ฐ ์๋๋ผ ๊ตฌ์กฐ๋ก ๋ฐฉ์งํฉ๋๋ค.
Baseline ํ๋ก์ ํธ
Baseline์ ์ด์ ๊ธฐ๋ฐ ์์คํ ์ ๋ด๋นํฉ๋๋ค.
๋ํ์ ์ผ๋ก ๋ค์ ์์คํ ๋ค์ด ์ฌ๊ธฐ์ ํฌํจ๋ฉ๋๋ค.
- Monitoring
- Logging
- Object Storage
์ค์ ๋ฐฐํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ์ด ์กด์ฌํฉ๋๋ค.
Proof:
docs/proof/latest/apps.txt
์์ ์ผ๋ถ:
monitoring-dev
monitoring-prod
loki-dev
loki-prod
minio-dev
minio-prod
alloy-dev
alloy-prod
์ด ์์คํ ๋ค์ ML ํ์ดํ๋ผ์ธ๊ณผ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ง ์์ง๋ง
ํ๋ซํผ ์ด์์ ๋ฐ๋์ ํ์ํ ์์คํ ์ ๋๋ค.
๊ทธ๋์ Baseline ํ๋ก์ ํธ๋
Core ์์คํ ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.
Optional ํ๋ก์ ํธ
Optional ํ๋ก์ ํธ๋ ํ์ฅ ๊ธฐ๋ฅ์ ์ํ ๋ ์ด์ด์ ๋๋ค.
์ด ํ๋ก์ ํธ์์๋ Feature Store๊ฐ ์ฌ๊ธฐ์ ํฌํจ๋ฉ๋๋ค.
Proof:
docs/proof/latest/apps.txt
์์:
feast-dev
feast-prod
optional-envs-dev
optional-envs-prod
Optional ํ๋ก์ ํธ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Core ์์คํ ๊ณผ ๋ถ๋ฆฌ
- ํ์ํ ๋๋ง ํ์ฑํ
- ์ ๊ฑฐํด๋ ํ๋ซํผ์ด ์ ์ ๋์
์ด ๊ตฌ์กฐ ๋๋ถ์ Feature Store ๊ฐ์ ์์คํ ์
์ฝ์ด ๊ตฌ์กฐ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์ถ๊ฐํ ์ ์์ต๋๋ค.
Root Application: GitOps ๊ตฌ์กฐ์ ์์์
GitOps ๊ตฌ์กฐ์ ์์์ ์ Root Application์ ๋๋ค.
Proof:
docs/proof/latest/root-apps.txt
Root Application์ ๋ค์์ ๊ด๋ฆฌํฉ๋๋ค.
root-apps
root-baseline
root-optional
์ด ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค.
Root Application
โโ root-apps
โโ root-baseline
โโ root-optional
์ฆ, ๋ฃจํธ ์ฑ์ด ์ ์ฒด ํ๋ซํผ ๊ตฌ์กฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
์ด ๋ฐฉ์์ ํํ App-of-Apps ํจํด์ด๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค.
ApplicationSet: ํ๊ฒฝ๋ณ ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ
ApplicationSet์ GitOps ํ๊ฒฝ์์ ์ ์ฉํ ๊ธฐ๋ฅ์ ๋๋ค.
ApplicationSet์ ์ฌ์ฉํ๋ฉด
์ฌ๋ฌ ํ๊ฒฝ์ ๋์ผํ ๊ตฌ์กฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
ApplicationSet
โโ airflow-dev
โโ airflow-prod
โโ mlflow-dev
โโ mlflow-prod
โโ triton-dev
โโ triton-prod
์ค์ ๋ก ์ด ํ๋ก์ ํธ์์๋ ApplicationSet์ด ์ฌ์ฉ๋ฉ๋๋ค.
Proof:
mlops-core ApplicationSet
ApplicationSet ๋๋ถ์ ๋ค์์ด ๊ฐ๋ฅํด์ง๋๋ค.
- dev / prod ํ๊ฒฝ์ ๋์ผํ ๊ตฌ์กฐ๋ก ์ ์ง
- ํ๊ฒฝ ์ถ๊ฐ ์ ์๋ ํ์ฅ
- Git ๋ณ๊ฒฝ์ผ๋ก ์ ์ฒด ๊ตฌ์กฐ ์ ๋ฐ์ดํธ
์ค์ ๋ฐฐํฌ๋ Core ์์คํ
Application ๋ชฉ๋ก์ ๋ณด๋ฉด Core ์์คํ ์ด
dev์ prod ํ๊ฒฝ์ ๊ฐ๊ฐ ๋ฐฐํฌ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
Proof:
docs/proof/latest/apps.txt
์์:
airflow-dev
airflow-prod
mlflow-dev
mlflow-prod
fastapi-dev
fastapi-prod
triton-dev
triton-prod
์ด ๊ตฌ์กฐ ๋๋ถ์ ๋ค์์ด ๊ฐ๋ฅํด์ง๋๋ค.
- dev ํ๊ฒฝ์์ ๋ชจ๋ธ ๊ฒ์ฆ
- prod ํ๊ฒฝ์์ ์์ ์ ์ธ ์๋น
- ๋ ํ๊ฒฝ์ ๋์ผํ ๊ตฌ์กฐ๋ก ์ ์ง
์ ์ด ๊ตฌ์กฐ๊ฐ ์ค์ํ๊ฐ
์ด ๊ตฌ์กฐ๋ ๋จ์ํ GitOps๋ฅผ ์ฌ์ฉํ๋ค๋ ์๋ฏธ๊ฐ ์๋๋๋ค.
์คํ๋ ค ์ค์ํ ์ ์ ๋ค์์ ๋๋ค.
GitOps๋ฅผ ์ฌ์ฉํด ์ด์ ๊ฒฝ๊ณ๋ฅผ ๊ณ ์ ํ๋ค๋ ๊ฒ์ ๋๋ค.
์ด ๊ตฌ์กฐ ๋๋ถ์ ๋ค์ ๋ฌธ์ ๊ฐ ์ค์ด๋ญ๋๋ค.
- dev โ prod ์๋ชป๋ ๋ฐฐํฌ
- Optional ๊ธฐ๋ฅ์ด Core ์์คํ ์ ๋ณ๊ฒฝ
- ์ด์ ์์คํ ๊ณผ ML ์์คํ ์ด ๋ค์์ด๋ ๋ฌธ์
์ฆ,
GitOps๊ฐ ๋จ์ํ ๋ฐฐํฌ ์๋ํ ๋๊ตฌ๊ฐ ์๋๋ผ
์ด์ ์์ ์ฑ์ ํ๋ณดํ๋ ๊ตฌ์กฐ๊ฐ ๋ฉ๋๋ค.
๋ค์ ๊ธ
์ด๋ฒ ๊ธ์์๋ GitOps ๊ตฌ์กฐ๋ฅผ ํตํด
- dev / prod ํ๊ฒฝ
- Core / Baseline / Optional ๋ ์ด์ด
์ ๊ฒฝ๊ณ๋ฅผ ์ด๋ป๊ฒ ๊ฐ์ ํ๋์ง๋ฅผ ์ดํด๋ณด์์ต๋๋ค.
ํ์ง๋ง ์ด ๊ตฌ์กฐ๊ฐ ์ค์ ๋ก ์ ์ฉํ์ง ํ์ธํ๋ ค๋ฉด
๋ค์ ์ง๋ฌธ์ ๋ตํ ์ ์์ด์ผ ํฉ๋๋ค.
Optional ๊ธฐ๋ฅ์ ์ค์ ๋ก ์ ๊ฑฐํด๋ ํ๋ซํผ์ด ์ ์ ๋์ํ ๊น?
๋ค์ ๊ธ์์๋
Optional ๊ธฐ๋ฅ์ ์ค์ ๋ก ON/OFFํ๋ฉด์ Core ์์คํ ์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๋์ง ๊ฒ์ฆํ๋ ๊ณผ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Proof์์ ํ์ธํ ์๋ฃ:
docs/proof/latest/core_only/*
docs/proof/latest/optional_on/*
์ด๋ฅผ ํตํด Optional ๋ ์ด์ด๊ฐ ๋จ์ํ ๊ฐ๋ ์ด ์๋๋ผ
์ค์ ๋ก Attach / Detach ๊ฐ๋ฅํ ๊ตฌ์กฐ์ธ์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
์ค๊ณ ํ๋จ (Why This Way?)
AppProject๋ก namespace ๋ฐฐํฌ ๊ฒฝ๊ณ๋ฅผ ๊ฐ์ ํ์ฌ dev ๋ฆฌ์์ค๊ฐ prod์ ๋ฐฐํฌ๋๋ ๊ฒ์ GitOps ๊ตฌ์กฐ ์์ฒด๊ฐ ์ฐจ๋จํ๊ณ , App-of-Apps ํจํด์ผ๋ก ์ ์ฒด ํ๋ซํผ์ ๋จ์ผ Git ์ปค๋ฐ์ผ๋ก ์ ์ธ์ ๊ด๋ฆฌํฉ๋๋ค. ApplicationSet์ผ๋ก ํ๊ฒฝ๋ณ Application์ ์๋ ์์ฑํ์ฌ ํ๊ฒฝ ์ถ๊ฐ ์ ์๋ ์์ ์์ด ๋์ผ ๊ตฌ์กฐ๊ฐ ํ์ฅ๋ฉ๋๋ค.
๋ค์์ ์ฝ์ ๊ธ
โ GitOps ๊ธฐ๋ฐ E2E ML Platform - ํ ๊ธ ๊ตฌ์กฐ โ Optional ON/OFF ์ค์ ๊ฒ์ฆ