
배포를 하였는데 잠시 순단 현상이 생기는 현상이 발생하였다.

아무래도 롤링 배포를 하면서 컨테이너를 업데이트하는 과정에서 문제가 발생한것 같다.
docker service inspect 서비스명 --pretty
로 찾아보니 현재 배포전략이 stop-first전략으로 컨테이너를 교체시, 기존 컨테이너를 종료하고 새로운 컨테이너를 구동하는 방식으로 이때 기존 종료된 컨테이너에 라우팅이 되어 에러가 발생한다.

docker service update \
--update-order start-first \
--rollback-order start-first \
--update-parallelism 1 \
--update-delay 10s \
--update-monitor 5s \
--update-failure-action pause \
--rollback-parallelism 1 \
--rollback-monitor 5s \
--rollback-failure-action pause \
서비스명
으로 업데이트하여 배포와 롤백시, 새로운 컨테이너가 실행된 후, 기존컨테이너를 종료하는 방식으로 해결을 하였다.
추가로 도커스웜에서는 컨테이너의 health-check를 하고 있지만 어플리케이션단에서의 health-check는 하지 못하기 때문에,
docker service update \
--health-cmd="curl -s http://localhost:8080/actuator/health | grep '\"status\":\"UP\"' || exit 1" \
--health-interval=30s \
--health-timeout=10s \
--health-retries=5 \
--health-start-period=60s \
서비스명

위와같이 Spring Actuator를 활용하여 어플리케이션단에서 health-check를 꾸준히 하여 더욱 무중단 서비스를 진행할 수 있게 되었다.
Docker Swarm에 대해서 공부를 많이 했다고 생각했지만 아직 더 최적화할게 많이 있어야 한다고 생각했고, K8s의 Readiness Probe, Liveness Probe등의 스크립트가 없어 지속적으로 짜야 한다는 것에서 k8s의 편의성 또한 느낄수 있었다.