카나리 테스트와 함께하는 안전한 서버 배포
(engineering.vcnc.co.kr)- 타다를 운영하는 VCNC의 김태호님이 작성한 쿠버네티스 환경에서의 카나리 배포 경험담.
- 카나리 배포는 탄광에서 광부들이 가수 누출을 검출하기 위해 새장에 카나리를 넣어 가져가던 일에서 유래한 이름.
- Spring Boot의 메이저 버전을 올릴 때 의존하는 라이브러리의 버전도 강제로 바뀌게 되므로, 이로 일어나는 성능 문제나 테스트하지 못한 장애를 최소화 하기 위해 카나리 배포를 시도.
- 쿠버네티스에 Helm 패키지 매니저를 사용해서 배포하는데, Helm의 패키지 단위를 '차트'라 부르며, 차트를 쿠버네티스 클러스터에 설치하면 릴리스가 생성됨.
- 카나리에 대한 차트/릴리스를 작성하고 , Ingress 컨트롤러에 어노테이션을 추가하여 지정한 비율의 요청만 카나리 Ingress로 가도록 설정하였음.
향후 과제
- 카나리 릴리스에 문제가 발생했을 때, 원인이 카나리의 변경사항 때문인지, 원래 발생하던 문제인지 파악하는 것이 어려우므로, 동일 비율로 대조군을 띄워놓고 메트릭을 비교하는 방법이 필요.
- 사용자와 무관하게 요청의 일부를 카나리로 보내므로, 카나리에 문제가 있더라도 요청을 재시도하다 보면 기존 버전이 처리해서 성공하기도 하지만, 전체적으로 봤을 때 카나리의 문제점을 경험하는 사용자의 비율이 늘어날 수 있으므로, (LB에서 스티키 처리를 하듯) 사용자 그룹에 따라 카나리로 라우팅하면 통제가 가능해질 듯.