7장. 작업 분할
분할된 작업은 분산 작업의 개념을 나타냅니다. 다수의 호스트에서 작업을 실행하려면 분산 작업을 사용합니다. 그런 다음 클러스터 전체에서 병렬로 예약할 수 있는 인벤토리의 하위 집합에서 많은 ansible-playbook을 실행할 수 있습니다.
기본적으로 Ansible은 단일 제어 인스턴스의 작업을 실행합니다. 호스트 간 오케스트레이션이 필요하지 않은 작업의 경우 작업 분할은 자동화 컨트롤러의 기능을 활용하여 클러스터의 여러 노드에 작업을 분산합니다.
작업 분할은 Ansible 실행을 분할할 작업 수를 지정하는 Job_slice_count
를 추가하여 작동합니다. 이 숫자가 1
보다 크면 자동화 컨트롤러에서 작업이 아니라 작업 템플릿에서 워크플로를 생성합니다. 인벤토리는 슬라이스 작업에 균등하게 배포됩니다. 그러면 워크플로우 작업이 시작되고 일반 워크플로우처럼 진행됩니다.
작업을 시작할 때 API는 작업 리소스(job_slice_count = 1) 또는 워크플로우 작업 리소스를 반환합니다. 해당 UI(사용자 인터페이스)는 실행 상태를 표시하기 위해 적절한 화면으로 리디렉션됩니다.
7.1. 작업 슬라이스 고려 사항
작업 슬라이스를 설정할 때 다음을 고려하십시오.
- 분할된 작업은 워크플로우 작업을 생성한 다음 작업을 생성합니다.
- 작업 슬라이스는 작업 템플릿, 인벤토리, 슬라이스 수로 구성됩니다.
실행하면 분할된 작업이 각 인벤토리를 여러 "슬라이스 크기" 청크로 분할합니다. 그런 다음 적절한 인벤토리의 각 청크에서 ansible-playbook 실행 작업을 대기열에 넣습니다. ansible-playbook에 제공된 인벤토리는 해당 특정 슬라이스의 호스트만 있는 원래 인벤토리의 단축된 버전입니다. 작업 목록에 표시되는 완료된 분할된 작업에는 실행된 분할된 작업 수로 적절하게 레이블이 지정됩니다.
이러한 분할된 작업은 일반 스케줄링 동작(포크 수, 용량으로 인한 대기, 인벤토리 매핑을 기반으로 인스턴스 그룹에 할당)을 따릅니다.
참고작업 분할은 작업 실행을 수평으로 스케일링하기 위한 것입니다. 작업 템플릿에 분할하면 시작 시 구성된 슬라이스 수에 따라 인벤토리가 분할된 다음 각 슬라이스에 대한 작업이 시작됩니다.
일반적으로 슬라이스 수는 자동화 컨트롤러 노드 수보다 크거나 같습니다. 매우 많은 작업 슬라이스를 설정할 수 있지만 성능이 저하될 수 있습니다. 작업 스케줄러는 분할된 작업이 되는 수천 개의 워크플로우 노드를 동시에 예약하도록 설계되지 않았습니다.
- 프롬프트 또는 추가 변수가 있는 분할된 작업 템플릿은 표준 작업 템플릿과 동일하게 작동하여 결과 워크플로우 작업의 전체 슬라이스 작업 세트에 모든 변수 및 제한을 적용합니다. 그러나 분할된 작업에 제한을 전달할 때 제한으로 인해 호스트가 할당되지 않으면 해당 슬라이스가 실패하고 전체 작업이 실패합니다.
- 분산 작업의 작업 슬라이스 작업 상태는 워크플로우 작업과 동일한 방식으로 계산됩니다. 처리되지 않은 오류가 하위 작업에 있으면 실패합니다.
- (개인 호스트에 변경 사항만 적용하는 대신) 호스트 간에 오케스트레이션하려는 모든 작업을 슬라이스 작업으로 구성해서는 안 됩니다.
- 이 모든 작업은 실패할 수 있으며 자동화 컨트롤러는 슬라이스 작업으로 실행할 때 실패하는 플레이북을 검색하거나 고려하지 않습니다.