DockerSwarm_RollingUpdate

장준영·2024년 5월 25일

개요


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

아무래도 롤링 배포를 하면서 컨테이너를 업데이트하는 과정에서 문제가 발생한것 같다.

원인파악

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의 편의성 또한 느낄수 있었다.

0개의 댓글