yakcloud dev up|deploy|status|clean|down. 로컬 kind 를 dev 구간으로 삼아 관리형과 동일한 바인딩 env 계약을 로컬에서 재현(pg/mysql/mariadb/mongodb/redis). dev 에선 CLI 가 곧 컨트롤플레인 이라 오프라인 반복. 같은 매니페스트·같은 이미지로 promote --to val/prod 직선. VERSION 0.14.0. 문서 동시 갱신(SKILL·/yakcloud 명령·yakcloud.yaml·README·DATA-SOURCES). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
45 lines
3.4 KiB
YAML
45 lines
3.4 KiB
YAML
# YakCloud 선언적 배포 매니페스트 (범용 템플릿)
|
|
# 태그(v*) push → Gitea Actions → 이 매니페스트로 배포:
|
|
# 1) requires 리컨실 — 논리 이름의 소스가 READY 면 스킵, 없으면 type/plan 대로 프로비저닝 후 Ready 대기
|
|
# 2) workloads 빌드/배포 — build 컨텍스트를 image 로 빌드·push, 각 워크로드가 소스를 alias 로 바인딩
|
|
# 3) 앱 탭 등록 + 데이터소스 연결(<ALIAS>_URL 등 env 자동 주입)
|
|
apiVersion: yakcloud/v1
|
|
project: my-app # 프로젝트 이름(이미지 경로/표시에 사용) — 소문자·숫자·하이픈
|
|
|
|
# 환경 — 개발 → 검증 → 운영 3단계. 각 환경 = 별도 클러스터. 검증계(val)가 필요 없으면 그 줄을 지워도 됩니다.
|
|
# 로컬 개발(kind) → yakcloud dev up (최초 1회) → yakcloud dev deploy — 콘솔/CI 불필요, 오프라인 반복.
|
|
# 로컬에서 requires 소스+workloads 가 관리형과 '동일한 바인딩 env'로 뜬다(직선 파리티).
|
|
# deploy → dev (태그 push → CI 빌드 → 개발 클러스터, 기본 도메인으로 확인)
|
|
# promote --to val→ 그 이미지를 재빌드 없이 검증 클러스터로
|
|
# promote --to prod→ 검증 통과분을 운영 클러스터로 + 운영 도메인(기본 도메인 c-xxxx.yakenator.io 은 자동)
|
|
environments:
|
|
dev: { cluster: my-dev-cluster } # deploy 대상(기본)
|
|
val: { cluster: my-val-cluster } # promote --to val
|
|
prod: { cluster: my-prod-cluster, domains: [] } # promote --to prod (domains 예: [app.example.com])
|
|
|
|
# 필요한 데이터 소스(논리 이름). 없으면 [] 로 둬도 됨.
|
|
# type ∈ postgresql·mysql·mariadb·mongodb·redis·minio·rabbitmq·solr·oracle, plan ∈ small·medium·large
|
|
# ⚠ 이름이 클러스터의 기존 READY 소스와 일치하면 스킵·바인딩.
|
|
# - 인클러스터(local) 소스: 배포 토큰에 생성 권한이 있으면 자동 프로비저닝(없으면 405 → 콘솔에서 먼저 만들고 이 name 사용).
|
|
# - 공유 외부(shared) 소스(소용량 S 클러스터용): 아래처럼 mode: shared 로 선언(또는 'yakcloud source add <name> mongodb --shared').
|
|
# 배포 시 백엔드가 클러스터별 격리 DB/계정을 민팅(인클러스터 StatefulSet 불필요). 콘솔/API 등록도 가능. 예:
|
|
# - { name: appdb, type: mongodb, mode: shared }
|
|
# ('yakcloud project check' 로 미리 확인·리스팅)
|
|
requires:
|
|
- { name: appdb, type: postgresql, plan: small }
|
|
|
|
# 워크로드(앱 컨테이너). CI 는 각 workload.build 를 도커 빌드해 image 로 push 한다(${TAG}=릴리스 태그).
|
|
workloads:
|
|
- name: web
|
|
build: ./ # 도커 빌드 컨텍스트(Dockerfile 위치). 예: ./ 또는 ./api
|
|
image: gitea.yakenator.io/CHANGE_ME_GITEA_USER/my-app-web:${TAG}
|
|
port: 8080
|
|
replicas: 2 # ≥2 → 무중단 롤링(readiness 게이트)
|
|
health: /healthz
|
|
resources: { cpu: 25m, mem: 96Mi }
|
|
# host 지정 시 등록 도메인으로 노출(미지정=클러스터 기본 도메인). 여러 개는 hosts: [a, b]
|
|
expose: { path: /, rewrite: false }
|
|
binds:
|
|
# source=위 requires 이름, alias=env 프리픽스(대문자화). 예 alias=db → DB_URL/DB_HOST/DB_PORT/…
|
|
- { alias: db, source: appdb }
|