DevOps, Infra

[ArgoCD] 롤링 배포 (Rolling Deployment)

seulseul 2022. 12. 30. 00:14

 

    1. GitOps

    1.1. deployment

     

    1. minReadySeconds 설정

    spec.minReadySeconds은 pod의 status가 ready가 될 때까지의 최소 대기시간이다.

    pod가 실행되고나서 .spec.minReadySeconds에 설정된 시간동안은 트래픽을 받지 않는다.

    2. Pod Anti-affinity 설정

    이 설정은 pod가 여러 node 에 균일하게 배포되는것을 보장한다.

    만약 replicas를 3으로 설정하였는데 모두 하나의 node에 배포되고 해당 node가 장애로 다운된다면 해당 서비스 또한 당분간 아예 서비스가 되지 않는다.

    하지만 Pod Anti-affinity 설정으로 최대한 동일한 pod가 같은 node에 배포되는것을 방지하여 장애에 강한 서비스를 만들 수 있다.

     

    여기서 preferredDuringSchedulingIgnoredDuringExecution 대신 requiredDuringSchedulingIgnoredDuringExecution 를 사용하면 node에는 해당 pod가 하나밖에 생성 될수 없고,

    추가로 scheduling 되어야 하는 pod는 pending 상태가 되어 node가 cluster 에 추가되면 그제서야 배치될 수 있다.

    weight 필드는 1부터 100까지의 값을 설정할 수 있다.

    key는 노드의 레이블 키 중 하나를 설정하고 operator 는 key 가 만족할 조건이다.

     

    3. maxSurge, maxUnavailable 설정

    maxSurge

    • deployment에 설정되어 있는 기본 pod 개수보다 여분의 pod가 최대 몇개가 더 추가될 수 있는지를 설정한다.
    • 기본값 25% 이며, 개수로도 설정이 가능하다.
    • replicas 4개인 경우 25% 이면 1개가 설정된다.


    maxUnavailable

    • 업데이트하는 동안 몇 개의 pod가 이용 불가능하게 되어도 되는지 설정한다.
    • 기본값 25%, 개수로도 설정이 가능하다.
    • replicas 4개인 경우 25% 이면 1개가 설정된다.

    maxSurge 와 maxUnavailable 가 둘다 0 일경우 RollingUpdate 중 트래픽을 받는 Pod 가 0개가 될수도 있으므로,둘다 0으로 설정할 수는 없다.