feat(deploy): 환경별 오버레이(requires/workloads override) — 0.24.0

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-30 22:21:45 +09:00
parent f3a70227ba
commit 311bbd8951
4 changed files with 99 additions and 6 deletions

View File

@ -11,10 +11,21 @@ project: my-app # 프로젝트 이름(이미지 경로/표
# 로컬에서 requires 소스+workloads 가 관리형과 '동일한 바인딩 env'로 뜬다(직선 파리티). cluster=로컬 이름, port=인그레스 포트.
# val/prod = **관리형**. yakcloud project promote --to val|prod → 이미지 build+push(이미 있으면 재빌드 없이) 후 리컨실 + 도메인.
# (기본 도메인 c-xxxx.yakenator.io 은 자동. 운영 커스텀 도메인은 prod.domains 에.)
#
# ★ 환경별 오버라이드(오버레이 병합): 아래 base 의 requires/workloads 를 environments.<env> 에서 '이름 매칭'으로
# 덮어쓰거나 추가할 수 있다 → dev↔prod 소스/리소스가 달라도 promote 때 매니페스트 수정 불필요(앱 binds 는 논리이름 고정).
# 예) prod 는 관리형 공유 mongo + 큰 리소스:
# prod:
# cluster: my-prod-cluster
# domains: [app.example.com]
# requires: # 이름(appdb) 매칭 → base 의 정체를 덮어씀
# - { name: appdb, type: mongodb, mode: shared, plan: medium }
# workloads: # 워크로드명(web) 키로 필드 패치(resources·replicas·env 는 병합, 그 외 교체)
# web: { replicas: 3, resources: { cpu: 500m, mem: 512Mi } }
environments:
dev: { cluster: dev, port: 80, workers: 1 } # 로컬 kind (project deploy). cluster=로컬 이름, port=인그레스 포트(이름!=dev면 비80), workers=워커 노드 수(0=CP만)
val: { cluster: my-val-cluster } # 관리형 (promote --to val)
prod: { cluster: my-prod-cluster, domains: [] } # 관리형 (promote --to prod, domains 예: [app.example.com])
prod: { cluster: my-prod-cluster, domains: [] } # 관리형 (promote --to prod, domains 예: [app.example.com]) — 필요 시 위 예처럼 requires/workloads 오버라이드
# 필요한 데이터 소스(논리 이름). 없으면 [] 로. 기본 = **공유(shared)** — 이미 있는 공유 소스에 연결 + 격리 DB 민팅.
# type ∈ postgresql·mysql·mariadb·mongodb·redis·minio·rabbitmq·solr·oracle