스택 설치¶
/stack/install admin devops
템플릿에서 가져온 구성을 다듬고 클러스터에 배포하는 화면입니다. 사이드바에는 없고, 스택 템플릿에서 이 템플릿 사용 을 누르면 들어옵니다.
순서가 정해진 단계가 아니라 탭 10개입니다. 진행 표시(스테퍼)가 없고, 아무 탭에서나 배포를 누를 수 있습니다.

탭이 아니라 먼저 채우는 것 — 머리 카드¶
탭 위에 항상 붙어 있는 카드입니다. 여기가 실제 필수 입력입니다.
| 항목 | 규칙 |
|---|---|
| 스택 이름 | 필수. 2~50자, 영문·숫자·하이픈(^[a-zA-Z0-9-]+$). 같은 클러스터에 같은 이름이 있으면 거부합니다 |
| 접근 도메인 | 기본값 {스택이름}.internal. 각 도구는 {도구}.{스택}.internal 로 접근합니다 |
| Access Domain TLS 적용 (cert-manager) | 체크하면 TLS Secret 이름·네임스페이스·Issuer 이름 세 개가 필수가 됩니다 |
| 대상 클러스터 | 필수. 연결 상태가 함께 표시됩니다 |
| 네임스페이스 | 기본 (nullus) · 기존 네임스페이스 · 새 네임스페이스 생성... |
오른쪽에는 Configuration Summary 패널이 고정돼 선택한 값을 계속 보여 줍니다. 위쪽 버튼은 임시 저장 과 배포 둘입니다.
탭 10개¶
| # | 탭 | 고르는 것 |
|---|---|---|
| 1 | Authentication | 없음 또는 OpenBao |
| 2 | Artifacts | 소스 저장소 · 컨테이너 레지스트리 · 패키지 레지스트리. GitHub 을 고르면 Organization·API 주소·Personal Access Token 입력란이 열립니다 |
| 3 | CI/CD | CI/CD 플랫폼 · CD 도구 |
| 4 | Observability | 시각화(복수) · 메트릭 · 로그 · 트레이스 · Exporter/Agent |
| 5 | Security | 이미지 스캐너 · 정적 분석(SAST) · 의존성 취약점(SCA) |
| 6 | Storage | Storage Plan(미선택 / 기존 연결 / 통합 생성) · StorageClass · Database · Object Storage |
| 7 | Resources | Sizing Profile(Local·Startup·Standard·Enterprise + 조직 프로파일) · 도구별 CPU·메모리·스토리지 적용값 |
| 8 | YAML View | Gateway 와 도구별 매니페스트를 Monaco 편집기에서 직접 수정 |
| 9 | Preview Deploy Script | 생성될 <스택>-deploy.sh 를 읽기 전용으로 확인 |
| 10 | Dry Run | 검사 10개를 돌려 PASS/WARN/FAIL 을 봅니다 |
로그 설정은 Observability 탭 안에 있습니다 — 별도 Logging 탭은 없습니다.
탭 7개는 아무 때나, 3개는 조건부¶
YAML View · Preview Deploy Script · Dry Run 으로 넘어가려면 스택 이름(중복 아님) · 대상 클러스터 · (새 네임스페이스 모드일 때) 네임스페이스가 채워져 있어야 합니다. 아니면 Artifacts 탭으로 되돌립니다.
Dry Run 이 보는 10가지¶
스택 이름 형식 · 클러스터 선택 · 네임스페이스 유효성 · 접근 도메인 규칙 · Gateway TLS · 설치 파일 생성 상태 · YAML/values 검증 · 리소스 하한 · 번들 OSS 버전 충돌 · 스토리지 플랜.
Run Dry Run 버튼은 "마지막 실행 시각"만 찍습니다 — 검사 자체는 값이 바뀔 때마다
다시 계산됩니다.
오브젝트 스토리지는 구현체를 고릅니다¶
Storage 탭의 Object Storage → Storage Provider 에서 스택 안에 세울 S3 호환 스토리지를 고릅니다. 새로 만드는 스토리지(통합 생성)는 아래 둘 중 하나입니다.
| 구현체 | 라이선스 | 설치되는 것 | 웹 콘솔 |
|---|---|---|---|
| MinIO (SILO) | AGPL-3.0 — 이미지는 커뮤니티 포크 SILO(pgsty/silo) — 화면도 이 이름과 SILO 마크로 적습니다 |
릴리스 nullus-minio(standalone) |
minio.<도메인>(Keycloak 로그인) |
| SeaweedFS | Apache-2.0 | 릴리스 nullus-seaweedfs(all-in-one — master·volume·filer·S3 게이트웨이가 파드 하나) |
없음 — S3 API 뿐 |
GitLab(아티팩트 · LFS · 업로드 · 패키지 · Pages · Container Registry)은 S3 계약만
봅니다 — 엔드포인트 · 액세스 키 · 시크릿 키 · 리전 · path-style. 그래서 구현체를 바꿔도
템플릿은 그대로 서고, 호환성 매트릭스도 이 칸으로 조합을 가르지 않습니다. 버킷도 벤더
CLI 없이 S3 CreateBucket 을 HTTP 로 직접 만듭니다. 자격은 다른 비밀값처럼 스택 금고
(OpenBao)에서 생성되고, 연결 정보 화면이 고른 구현체의 엔드포인트와 Secret 을 안내합니다.
- 템플릿이 SeaweedFS 를 고르면 Storage 탭에도 그대로 실립니다.
- SeaweedFS 데이터 볼륨 크기는 Storage 탭의 사이즈(small 50Gi · medium 100Gi · large 300Gi)를 따릅니다.
- 이름 없이 저장된 기존 스택과 알아보지 못하는 이름은 예전처럼 MinIO 로 섭니다.
설치한 뒤에는 구현체를 바꿀 수 없습니다
데이터를 옮기는 기능이 없습니다. 바꾸면 새 스토리지는 비어 있고 GitLab 은 기존 아티팩트 · 업로드 · 이미지를 찾지 못하므로, 다른 구현체가 이미 선 스택에서는 설치가 시크릿 프로비저닝 단계에서 이유를 남기고 멈춥니다. 구현체를 되돌리거나 스택을 새로 만드십시오.
배포¶
배포 버튼은 아래 중 하나라도 걸리면 눌리지 않습니다.
- 스택 이름이 비었거나 2자 미만, 또는 중복
- 클러스터 미선택
- 새 네임스페이스 모드인데 네임스페이스가 빔
- 매니페스트 검증 오류
- 클라이언트 호환성 검사가
fail, 또는warn인데 확인하지 않음
누르면 POST /api/v1/stacks 로 스택을 만들고(같은 클러스터·이름의 진행 중이거나
pending 행이 있으면 재사용), POST /api/v1/stacks/{id}/deploy 로 배포를 시작한
뒤 /stack/deploy/{id} 로 이동합니다.
임시 저장 은 POST /api/v1/stacks/draft 입니다.
배포 진행 화면¶
/stack/deploy/:id · /stack/logs/:deploymentId
두 경로가 같은 화면입니다. 단계 타임라인과 진행 바, 실패 시 마지막 오류, 경고·오류 목록, Raw Logs 접이식 패널, Continue 버튼, 그리고 네임스페이스의 파드를 실시간으로 보여 주는 패널이 있습니다.
로그와 파드는 WebSocket(/ws/deployments/{id}/logs, /ws/deployments/{id}/pods)으로
들어옵니다.
WebSocket 은 oidc 모드에서만 인증됩니다
auth.mode 가 oidc 가 아니면 소켓에 인증 미들웨어가 붙지 않습니다.
브라우저 WebSocket 에는 X-User-* 헤더를 붙일 수 없어서입니다.
알아 두면 좋은 것¶
서버 Pre-Deploy Gate 는 동작하지 않습니다
화면에 "서버 Pre-Deploy Gate" 패널과 서버 경고 확인 체크박스가 있지만, 배포 핸들러가 호환성 검증 없이 조립돼 있어 서버 검사가 바로 통과(빠져나감) 합니다. 실제로 도는 것은 클라이언트 쪽 매트릭스·아키텍처 검사뿐입니다.
리소스 예상량은 서버에서 계산하지 않습니다
POST /api/v1/stacks/estimate 엔드포인트가 있지만 아무도 부르지
않습니다. Resources 탭의 숫자는 resource-defaults 를 받아 브라우저에서
계산한 값입니다.
내보내기·가져오기 관련 주의는 스택 목록에 적어 두었습니다.