Image Builder: 기능 강화 + 안정성 개선 + 인스톨러 #5

Merged
haedong merged 33 commits from development_c into main 2026-07-30 08:26:26 +09:00
Owner

Summary

  • 글로벌 작업 잠금 (빌드/롤아웃/스크립트 동시 실행 방지)
  • 실시간 빌드 로그 (step별 즉시 표시)
  • Auto rollout 수정 + rollout 5분 폴링 + 에러 즉시 감지
  • Git clone SSH/HTTP fallback
  • Script run bad request 수정 (빈 body 400 방지)
  • 토스트 UI 개선 (상단 가운데, 닫기 버튼)
  • 라이트모드 테마
  • 예외 처리 강화 (subprocess leak, Flask error handler, DOM null check)
  • 바닐라 설치 인스톨러 (.run 패키지)

Test Plan

  • Sources: Registry/Git Server 등록/수정/삭제
  • Builder: 빌드 → 푸시 → 롤아웃 전체 흐름
  • Scripts: 등록 스크립트 실행, Ad-hoc 실행
  • 다중 세션에서 글로벌 잠금 동작 확인
  • .run 인스톨러 설치/제거
## Summary - 글로벌 작업 잠금 (빌드/롤아웃/스크립트 동시 실행 방지) - 실시간 빌드 로그 (step별 즉시 표시) - Auto rollout 수정 + rollout 5분 폴링 + 에러 즉시 감지 - Git clone SSH/HTTP fallback - Script run bad request 수정 (빈 body 400 방지) - 토스트 UI 개선 (상단 가운데, 닫기 버튼) - 라이트모드 테마 - 예외 처리 강화 (subprocess leak, Flask error handler, DOM null check) - 바닐라 설치 인스톨러 (.run 패키지) ## Test Plan - [ ] Sources: Registry/Git Server 등록/수정/삭제 - [ ] Builder: 빌드 → 푸시 → 롤아웃 전체 흐름 - [ ] Scripts: 등록 스크립트 실행, Ad-hoc 실행 - [ ] 다중 세션에서 글로벌 잠금 동작 확인 - [ ] .run 인스톨러 설치/제거
- cashews + diskcache: disk:// backend for shared cache across workers
- /health datasource check cached (30s TTL)
- /health/detail datasource check cached (15s TTL)
- Prometheus metrics renamed: pseudo_ -> app_ (generic, reusable)
- Added cache metrics: app_cache_hits, misses, hit_ratio, keys
- Swagger UI enabled at /docs
- HPA metric renamed: app_workers_idle

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Full operation manual (_reports/pseudo_api_manual.md)
- 14 chapters: overview, architecture, config, endpoints, cache,
  exception handling, logging, secret injection, healthz sidecar,
  HPA, deployment, troubleshooting, verification results
- Wiki.js compatible: ASCII diagrams, {.dense} tables, section numbering
- Metrics renamed: pseudo_ -> app_ (generic prefix)
- Swagger /docs enabled

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
19개 exporter/collector 포함 통합 sidecar 이미지.
Rocky Linux 9 base, /opt/apps/NAME_VER → /opt/NAME 디렉터리 컨벤션.
각 컴포넌트별 독립 entrypoint.sh, sample config, template 제공.

Components: alloy, fluent-bit, node/mysqld/postgres/kafka/mongodb/
sql/oracledb/redis/rabbitmq/ceph/squid/blackbox/process/snmp/
elasticsearch/nginx exporters, jmx_exporter

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
snapshot/compare/restore 워크플로우로 16개 카테고리 자동 비교.
Helm release 백업, --include-secrets 옵션, 타임스탬프 디렉터리 지원.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- standalone_inspector: CLI single binary (Go), kubeconform + built-in type check
  auto-download schemas on first run, --online/--update-schemas flags
- inspector_web: web UI (Go HTTP + vanilla JS), paste/upload/drag-drop,
  inspect + auto-fix (indent, flow→block), copy/download, dark mode

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
bash→Python3 전환: jq 의존성 제거, argparse CLI, exit code 지원.
--snapshot/--compare/--restore/--status/--list 옵션 체계.
bash 스크립트(k8s-upgrade-check.sh)는 레거시로 유지.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- rows 미정의 NameError 수정 (PVC/PV 섹션)
- restore 성공/실패 판정 오류 수정 (run check=True)
- StorageClass 복원 결과 보고 추가
- 노드 conditions 안전 접근 (.get())
- --dry-run 시 kubectl --dry-run=server 사용 (서버 검증)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
standalone_k8s_upgrade_checker: 기존 CLI 도구 (Python/Bash)
web_k8s_upgrade_checker: Flask 기반 웹 서비스
- Dashboard: 노드/워크로드/스토리지/네트워크/Helm 현황
- Snapshot: 클러스터 상태 저장 (단일 보관, 덮어쓰기)
- Inspect: 스냅샷 vs 현재 상태 16개 카테고리 비교 리포트
- Restore: 매니페스트 기반 복원 (dry-run=server/live)
- Download: 스냅샷 tar.gz 다운로드

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Deployments: Structured view (NS→App→CM/SVC/Ingress/HPA/PVC/Pods)
- Deployments: Flat view (테이블)
- YAML Viewer: 리소스 클릭 시 YAML 보기 + 다운로드
- Rollout Restart: Deployment/StatefulSet 재시작 (확인 모달)
- Restore: 체크박스로 복원 대상 선택, 전체/개별 선택 지원

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- restore 실패 시 stderr/stdout/exitcode detail 토글 표시
- run_detail() 함수 추가 (stdout+stderr+returncode 캡처)
- Flat view에 체크박스 추가, 선택된 YAML 일괄 다운로드
- escapeHtml/toggleDetail 유틸리티

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- command injection 방지: _sanitize() 입력 검증 추가
- CSS: --cyan 변수 누락, NS 접기/펼치기, Inspect 리포트 접기
- replicas 기본값 0→1 (K8s 기본값 반영)
- URL 파라미터 encodeURIComponent 적용
- 미사용 변수/파라미터 정리

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- generate_report(): 스냅샷 vs 현재 상태 side-by-side 비교 Markdown
- Report 탭: 웹에서 렌더링 (간이 MD→HTML 변환)
- Download: .md 파일 다운로드
- 변경 항목 CHANGED/REMOVED/NEW/WARN bold 표시

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- renderMarkdown 첫 데이터 행 누락 수정 (isHeader 로직 제거)
- request.json None 방어 (malformed JSON body)
- structured view replicas 기본값 0→1
- dead code 모달 HTML 정리

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Manual Verification Commands 섹션: 23개 kubectl/helm 명령어와 기대 결과.
유지보수 담당자가 리포트 다운로드 후 수동으로 각 항목을 직접 확인 가능.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
kube-state-metrics 기반 20개 패널:
- Summary: 노드/Deploy/Pod/PVC 상태 stat 8개
- Nodes: info 테이블 + readiness 타임라인
- Deployments: desired vs ready 테이블 + unhealthy 그래프
- StatefulSets/DaemonSets: 레플리카 테이블
- Storage: PVC status + size bar gauge
- Pods: phase pie chart + restarts + waiting/terminated
- Endpoints not ready + HPA current vs desired
- Node resources: CPU/Memory allocatable vs requests

Grafana Import → Upload JSON으로 적용

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
요구사항, 아키텍처, 컴포넌트(웹/CLI/Grafana), 점검항목 16개,
Structured View 구조, Report 포맷, API 목록, 보안 정리.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
컨테이너 이미지 빌드 + K8s Deployment 롤아웃 웹 앱.
- Sources: Registry(Bearer token verify) + Git Server(SSH/HTTP) 등록/검증
- Builder: App 등록 → branch 선택 → Dockerfile 확인 → build → push → rollout
- Scripts: 등록 실행 + adhoc(경로/붙여넣기) 실행, SSH/local, sudo, 취소
- SQLite 단일 파일 저장, 비동기 빌드 + 폴링, 중복 빌드 방지
- Rocky 9 기반 Dockerfile, K8s manifests, docker-compose
- 글로벌 작업 잠금: 빌드/롤아웃/스크립트 동시 실행 방지, 세션 간 상태 공유
- 실시간 빌드 로그: 폴링 시 step별 로그 즉시 표시 (종료 후 일괄 아닌)
- Auto rollout 수정: 빌드 완료 후 자동 rollout 정상 동작
- Rollout 개선: 전/5초/15초 pod 상태 확인 순서로 변경
- Git clone fallback: SSH verified 기반 판단, 실패 시 HTTP 자동 전환
- 라이트모드 테마: CSS 전체 변경, 로그/에디터는 블랙터미널 유지
- Project 입력: fsel→일반 input+datalist로 변경 (값 유실 방지)
- 예외 처리 강화: subprocess leak 방지, Flask error handler, DOM null check
- .then() → async/await 변환 (unhandled promise rejection 방지)
- editApp에서 await loadFormProjects() (project 값 설정 전 데이터 로드 보장)
- showAppForm에서도 await 추가
- db.init()에서 DATA_DIR, builds/ 디렉토리 명시적 생성
- _db_path()에서 매 호출마다 mkdir 제거 (init 1회로 통합)
- 10초 간격 pod 상태 폴링, 전체 Running 시 조기 종료
- CrashLoopBackOff/ImagePullBackOff 등 명확한 에러 즉시 종료
- restartCount >= 5 에러 판단
- ready/desired 수치 매 체크마다 출력
- rollout_ok/rollout_failed/rollout_timeout 상태 구분
- script run: get_json(force=True) → get_json(silent=True) (빈 body 400 방지)
- 토스트: 상단 가운데, 크게, 닫기 버튼 추가
- footer 라이선스 문구 추가
- install.sh: 바닐라 설치 인스톨러 (온라인/폐쇄망 분기)
- make-release.sh: .run self-extracting 패키지 빌드 스크립트
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
haedong/cloudnative!5
No description provided.