어플리케이션 배포 전략
배포된 Deployment의 새로운버전의 팟이나 구성내용의 변경이 필요할때 배포방식에 대해 알아보자
아래의 2개 옵션은 쿠버네티스가 지원하는 배포 전략이다.
Recreate
구버전의 팟을 전부 삭제하고 새로운버전의 팟을 생성한뒤 배포하는 방식이다.
서비스 중단이 발생한다.
Rolling Updates(default)
배포되어있는 팟들을 동시에 업데이트 하는게 아닌 1개, 2개 등 퍼센테이지를 정해 교체해 나가는 방식이다.
서비스의 중단이 발생 하지않으나 서비스가 받는 부하가 커지며 구버전과 신버전이 공존하는 시기가 존재한다.
1
아래의 배포들은 쿠버네티스에서 직접적으로 지원하지 않는 배포들이다
Blue/Green 배포
무중단배포의 대표적인 Blue/Green 배포이다. 블루/그린 배포를 하기 위해선 필요사항이 있다.
기존 서비스를 운영하는데 필요하는 자원의 2배와 공통 엔드포인트이다.(위 그림의 경우 LoadBalancer)
블루와 그린은 서비스가 배포될 수 있는 환경을 나타내며 블루와 그린 중 1개만 있어도 서비스가 된다. 즉 기존의 서비스를 Blue나 Green으로 지정하고 그 서비스의 복제본을 반대의 색으로 지정하면된다.
- 현재 서버 클러스터(=Green)에서 현재 서비스 중
- 업데이트 요청 시, Green과 비슷한 대체 서버 클러스터(=Blue)를 생성 후, Blue에서 업데이트 패치
- Blue가 업데이트 중에도 Green은 서비스 중
- Blue의 업데이트가 끝나면 트래픽을 Blue로 보냄
- Blue가 서비스, Green은 대기 상태
- 추후 업데이트 시, Blue와 Green이 번갈아 가며, 위의 과정을 반복 업데이트용 대체 서버 클러스터 운용으로무중단 서비스 시행.
블루/그린 배포의 장단점은 아래와 같다.
장점은 무중단 배포를 쉽게 할 수 있다는 것과 쉽고 빠른 롤백이다.
단점은 필요사항처럼 엔드포인트와(쿠버네티스에는 서비스로 가능, 클라우드 환경에서는 로드밸런서 필요) 자원 2배인 점이다.
롤백에 대한 예시는 아래와 같다.
- Green 서비스중 배포를 위해 Blue에 신 버전 배포
- Service의 labelselector를 Blue로 변경
- Blue 버전에서 문제 발견
- Service의 labelselector를 Green으로 변경
1~2는 배포과정이며 3에서 문제점 발견 4에서 롤백이 진행되었다.
카나리 배포
카나리 배포는 지정한 서버 또는 특정 사용자 그룹에만 서비스를 적용시켜 서비스의 이상유뮤나 이전버전과의 만족도 차이등을 파악 할 수 있는배포이다. 일부 유저들에게 테스트 후 배포를 적용 시키는 전략이다.
Init Containers
초기화 컨테이너는 팟의 앱 컨테이너들이 실행되기전에 1번만 실행되는 컨테이너이다.
만약에 초기화 컨테이너들이 여러개 있다면 순차적으로 실행하게되며 모두다 성공한 경우에 앱 컨테이너가 시작된다.
쿠버네티스 공식문서에 따르면 대표적인 사용 예는 아래와 같다.
- 서비스가 생성될때까지 기다리기
1
for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1
- 다운워드 API(Downward API)를 통한 원격 서버에 해당 파드를 등록하기.
1
curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d 'instance=$(<POD_NAME>)&ip=$(<POD_IP>)'
- 다음과 같은 커맨드로 앱 컨테이너가 시작되기 전에 일정 시간 기다리기.
1
sleep 60
- git 저장소에서 클론하기
1
sh -c git clone <some-repository-that-will-be-used-by-application> ; done;