피드로 돌아가기
GeekNewsInfrastructure
원문 읽기
내가 원하던 배포 도구 만들기
1초 미만 배포와 밀리초 단위 자동 롤백을 구현한 정적 에이전트 기반 배포 구조
AI 요약
Context
유럽 디지털 주권 확보를 위해 Cloudflare 등 미국 기반 서비스 의존성을 제거하고 DNS 및 웹서버를 직접 운영하는 환경 구축 필요. 기존 Python 스크립트 방식은 관리 대상 유닛 증가에 따른 확장성 한계와 NixOS 전환 시의 운영 복잡도라는 제약 사항 존재.
Technical Solution
- 설정 생성과 배포의 완전 분리를 통해 로컬에서 클러스터 설정을 렌더링하고 Git으로 버전 관리하는 선언적 구조 설계
- /var/lib/deptool 내 commit별 디렉터리를 생성하고 current 심볼릭 링크를 통해 버전을 원자적으로 전환하는 Atomic Deployment 구현
- SSH를 단순 전송 계층으로 활용하고 stdin/stdout 기반의 정적 바이너리 에이전트를 통해 Shell Escaping 문제 및 의존성 제거
- 배포 전 대상 호스트의 락(Lock)을 획득하고 로컬 ref와 실제 상태를 비교하여 Stale한 계획 실행을 차단하는 낙관적 동시성 모델 적용
- systemd 유닛 재시작 실패 시 이전 known-good 버전으로 심볼릭 링크를 즉시 되돌리는 밀리초 단위 자동 롤백 메커니즘 구축
- Flatcar Linux와 같은 최소 OS 환경에서도 coreutils만으로 에이전트 자동 설치가 가능한 부트스트랩 프로세스 설계
실천 포인트
1. 배포 대상의 상태를 Atomic하게 변경하기 위해 심볼릭 링크 기반의 버전 관리 도입 검토
2. SSH 기반 배포 시 셸 명령 실행 대신 표준 입출력을 이용한 정적 바이너리 에이전트 통신 방식 고려
3. 배포 전 Plan 단계에서 현재 호스트 상태와 로컬의 기대 상태를 비교하는 락 메커니즘 적용
4. 서비스 재시작 실패 시 즉시 이전 버전으로 복구하는 자동 롤백 로직을 배포 파이프라인에 통합
태그