DevOps/Ansible

Ansible serial 활용

xlwdn98767 2023. 7. 3. 01:40
728x90

Serial


기본적으로 ansible은 모든 호스트에서 각 태스크를 병렬로 실행하지만 serial을 통해 한 번에 몇 개의 호스트가 play를 수행할지 지정할 수 있는데 사용 예시는 다음과 같다.

한 번에 하나의 호스트에서만 실행


- name: serial-one
    hosts: all
    serial: 1
    tasks:
        - name: get info

        - name: remove host from elb group

        - name: update 

        - name: put host into elb group

위와 같은 playbook을 통해 한 번에 하나의 호스트에서만 실행하도록 전달할 수 있다.

또한 위와 같은 상황에선 특정 비율 이상의 실패 발생 시에 이후 작업들도 실패가 발생할 확률이 높기에 서비스가 중단될 수 있으므로 특정 비율 이상 태스크 실패 시 전체 플레이를 중단시킬 수 있다.

- name: fail-test
    hosts: all
    serial: 1
    max_fail_percentage: 25
    tasks:
            ...

위와 같이 작성 시 호스트가 4개라고 하였을 때 하나의 호스트에서 실패 시 25%이므로 초과하지 않아 계속해서 실행한다. 이후 두번 째 호스트에서 실패 시 50%이므로 전체 플레이가 중단된다. 만약 하나의 실패도 용납하지 않으려면 해당 값을 0으로 설정한다.

백분율로 한 번에 여러 호스트 실행


- name: serial-percent
    serial: 50%
    tasks:
        ...

serial은 단순히 serial: 1 뿐만이 아니라 백분율도 처리할 수 있다.

serial 리스트 사용


- name: serial-list
    serial: 
        - 1
        - 30%
    tasks:
        ...

만약 위에서 호스트 개수가 30일 경우 다음과 같이 실행된다.(1 → 10 → 10 → 9)