- Blue-Green 배포와 Canary 배포의 차이점과 사용 사례를 설명해주세요
- Kubernetes에서 Pod가 무엇인지 설명하고, Pod의 라이프사이클을 설명해주세요
- 컨테이너 오케스트레이션 도구를 사용해본 경험이 있나요? 이를 통해 얻은 이점을 설명해주세요
- 로깅의 중요성과 서버 애플리케이션에서 로그를 효과적으로 관리하는 방법을 설명해주세요
- 애플리케이션 배포 시 발생할 수 있는 다운타임 최소화 방법을 설명해주세요
1. Blue-Green 배포와 Canary 배포
Blue-Green 배포
- 두 개의 거의 동일한 환경을 만들어서 새로운 버전의 애플리케이션을 Green 환경에 배포하고 문제가 없으면 트래픽을 Blue 환경에서 Green 환경으로 전환하는 방식
- Blue - 기존 프로덕션 환경, Green - 새로운 버전이 배포된 환경
- 배포 흐름
- Green 환경에 새로운 버전 배포
- Green 환경에서 새로운 버전이 정상적으로 작동하는지 검증
- 트래픽을 Green 환경으로 전환
- 사용 사례
- 운영중인 시스템에 영향을 주지 않으면서 새로운 버전을 배포하고자 할 때
- 배포 후 바로 롤백이 필요한 경우
- 배포 위험도가 높은 시스템
- 장점
- 빠른 롤백, 전체 시스템 교체
- 단점
- 두 환경을 동시에 유지 - 리소스 소모
- 환경 관리 복잡함
Canary 배포
- 일부 사용자/일부 서버에만 배포하여 점진적으로 배포하는 방식
- 사용사례
- 대규모 서비스에서 점진적으로 새로운 버전을 검증하고 싶을 때
- 새로운 기능이 사용자에게 미칠 영향을 최소화하고자 할 때
- 장점
- 문제가 발생해도 소수의 사용자에게만 영향
- 리스크 분산
- 단점
- 배포 속도 느림
- 점진적 배포 → 관리 복잡
Blue-Green 배포는 전체 시스템을 한번에 교체할 수 있는 전략으로 빠른 롤백이 필요할 때, Canary 배포는 점진적으로 새 버전을 배포하고 실사용 데이터를 기반으로 검증하고 위험을 최소화하고 싶을 때 적합
Kubernetes Pod
쿠버네티스
- 컨테이너화된 애플리케이션을 배포하고 관리하고 자동화하기위한 컨테이너 오케스트레이션 플랫폼
- Docker와 같은 컨테이너 기술을 활용하여 애플리케이션을 클러스터 환경에서 효율적으로 배포하고 관리할 수 있게 해줌
Pod
- 애플리케이션을 실행하는 가장 작은 배포 단위
- 하나의 Pod는 하나 이상의 컨테이너를 포함할 수 있으며 동일한 네트워크 네임스페이스를 공유합니다
- 주요 특징
- 동일한 네트워크 환경
- 볼륨 공유
Pod 라이프 사이클
- pending : Pod가 생성되었으나 실행되지 않고 있는 상태
- running : Pod가 노드에서 실행중인 상태
- Succeeded : Pod의 모든 컨테이너가 정상적으로 실행을 완료하고 종료된 상태
- Failed : 오류로 종료된 상태
상태 변화
- Pod 생성 : 사용자가 쿠버네티스 클러스터에 Pod를 생성하면 pending 상태로 시작, 스케줄러를 통해 적합한 노드를 선택하고 Pod 배치
- 실행 : 스케줄러가 pod를 배치하면 running으로 상태 전환, 노드에서 컨테이너 실행
- 성공 또는 실패 : 작업 후 성공/실패 상태로 전환
- 삭제 : 사용자가 pod를 삭제하면 해당 Pod 종료
컨테이너 오케스트레이션 도구
컨테이너 오케스트레이션 도구
- 컨테이너화된 애플리케이션을 배포, 관리, 확장, 모니터링, 자동화하는 도구
- 여러개의 컨테이너를 효율적으로 관리하기 위해 시스템 리소스를 조율하고, 장애 발생 시 자동으로 복구하는 기능 제공
- kubernetes
사용 이점
- 컨테이너를 자동으로 배포
- 트래픽 증가에 따라 컨테이너 수 확장/축소 가능
- 장애발생시 자동으로 복구하거나 다른 노드에서 재시작하여 고가용성 보장
- 여러 컨테이너를 효율적으로 배치하고 자원을 자동으로 할당하여 리소스 최적화
- 여러대의 서버나 클라우드 환경에서 관리할 수 있어 분산 시스템 관리 용이
장점
- 자동화된 관리
- 빠른 배포 및 업데이트 가능
- 리소스 관리 최적화
단점
- 복잡함
- 리소스 소모가 큼
- 복잡한 설정과 옵션때문에 오버헤드 발생할 수 있음
특징
- 수평적 확장 지원
- 장애 발생 시 자동으로 복구하거나 다른 컨테이너에서 재시작
- 서비스 디스커버리 : 서비스를 자동으로 탐지하고 연결
로깅
- 서버 애플리케이션에서 발생하는 이벤트와 동작을 기록하는 작업
- 애플리케이션의 상태를 추적하고 문제를 진단하며 운영환경에서 성능 모니터링
중요성
- 디버깅 : 로그를 통해 오류 원인과 흐름 파악
- 성능 모니터링 : 응답시간, 데이터베이스 쿼리 시간을 로그로 기록하고 성능 문제 식별
- 보안 : 로그를 통해 침입 시도나 의심스러운 활동 감지
- 모니터링 및 알림
로그를 효과적으로 관리하는 방법
- 로그레벨 설정 : 필요한 정보만 기록
- 로그 포맷 통일
- 중앙 집중 식 로그 관리 시스템 : ELK, Grafana+Lokki
- 알림 및 모니터링 : 중요 이벤트나 오류 발생 시 알림 시스템과 통합하여 실시간 알림
- 시각화 : Kibana
애플리케이션 배포 시 발생하는 다운타임 최소화
- 배포 전략과 도구를 선택하고 모니터링과 롤백 시스템을 잘 구성하는것이 중요
- 배포 중 시스템이 중단되지 않도록 안전한 방법을 선택, 사용자 경험을 해치지 않고 안정적인 서비스 제공