1. 개요

<Docker 가상 환경 구축 입문>의 <Chapter 9-8. Rolling Update>를 읽고 정리한 내용입니다.


2. Rolling Update

  • 롤링 업데이트란, 서비스의 각 태스크를 한 번에 업데이트하지 않고, 지연 시간을 설정하여 태스크를 순차적으로 업데이트할 수 있는 기능.
  • 이 기능을 통해, 실행중인 컨테이너는 사용자 요청을 처리하고, 나머지 컨테이너는 업데이트를 진행하는 것. 

3. Rolling Update의 옵션 

  • 서비스 생성 시에 롤링 업데이트 관련 옵션을 설정할 수 있음.
  • --update-delay
    • 태스크 간의 지연 시간을 설정하는 것으로, 단위는 초.
    • 한 태스크의 업데이트가 종료되면, 설정한 지연시간 만큼 기다린 후, 다음 태스크의 업데이트를 진행.
    • 별도로 지연 시간을 설정하지 않으면, 한 태스크의 업데이트와 기동이 완료된 후 지연 시간 없이 바로 다음 태스크의 업데이트를 진행. 
    • 컨테이너가 기동된 후, 초기화에 시간이 오래 소요되는 경우에 원활한 운영을 위해 지연 시간을 두고 순차적으로 업데이트할 수 있음.
  • --update-parallelism
    • 여러개의 태스크를 병렬로 업데이트하도록 설정하는 것.
    • 업데이트에 시간이 오래 걸리는 경우에는 여러개의 태스크에 대한 업데이트를 병렬로, 동시에 진행할 수 있음.

4. Rolling Update 예제

  • redis 3.0.6 이미지를 redis 3.0.7로 업데이트하는 예제
     
    $ docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6
    
    kw7xj2a7ikoi63k9h17xheelt
    overall progress: 3 out of 3 tasks 
    1/3: running   [==================================================>] 
    2/3: running   [==================================================>] 
    3/3: running   [==================================================>] 
    verify: Service converged 
    
    $ docker service inspect --pretty redis
    
    ID:     kw7xj2a7ikoi63k9h17xheelt
    Name:       redis
    Service Mode:   Replicated
     Replicas:  3
    Placement:
    UpdateConfig:
     Parallelism:   1
     Delay:     10s
     On failure:    pause
     Monitoring Period: 5s
     Max failure ratio: 0
     Update order:      stop-first
    RollbackConfig:
     Parallelism:   1
     On failure:    pause
     Monitoring Period: 5s
     Max failure ratio: 0
     Rollback order:    stop-first
    ContainerSpec:
     Image:     redis:3.0.6@sha256:6a692a76c2081888b589e26e6ec835743119fe453d67ecf03df7de5b73d69842
     Init:      false
    Resources:
    Endpoint Mode:  vip
    
    $ docker service update --image redis:3.0.7 --detach=false redis
    
    redis
    overall progress: 3 out of 3 tasks 
    1/3: running   [==================================================>] 
    2/3: running   [==================================================>] 
    3/3: running   [==================================================>] 
    verify: Service converged 
    
    • 서비스를 create할 때, --update-delay 옵션을 통해 지연 시간을 설정하면, inspect에서 Delay: 10s로 적용된 것을 확인할 수 있음.
    • docker service update 명령어를 실행하면 한 태스크의 업데이트가 끝나고 10초간 기다린 후, 다음 태스크의 업데이트가 진행됨.