Documentation

21. 작업 분할

:term:`sliced job`은 분산 작업의 개념을 나타냅니다. 분산 작업은 매우 많은 호스트에서 작업을 실행하는 데 사용되며, 이 작업을 사용하면 클러스터 전체에서 병렬로 스케줄링할 수 있는 여러 개의 ansible-playbook을 인벤토리 하위 집합에서 각각 실행할 수 있습니다.

기본적으로 Ansible은 단일 제어 인스턴스의 작업을 실행합니다. 호스트 간 오케스트레이션이 필요하지 않은 작업의 경우 작업 분할은 |at|의 기능을 활용하여 클러스터의 여러 노드에 작업을 분산합니다. 작업 분할은 Ansible 실행을 분할할 작업 수를 지정하는 작업 템플릿 필드 ``job_slice_count``를 추가하여 작동합니다. 이 숫자가 1보다 크면 |at|는 작업이 아닌 작업 템플릿에서 워크플로우를 생성합니다. 인벤토리는 슬라이스 작업에 균등하게 배포됩니다. 그러면 워크플로우 작업이 시작되고 일반 워크플로우처럼 진행됩니다. 작업을 시작하면 API에서 작업 리소스(``job_slice_count = 1``인 경우) 또는 워크플로우 작업 리소스를 반환합니다. 해당 사용자 인터페이스는 실행 상태를 표시하기 위해 적절한 화면으로 리디렉션됩니다.

21.1. 작업 슬라이스 고려 사항

작업 슬라이스를 설정할 때는 다음을 고려해야 합니다.

  • 분할된 작업은 워크플로우 작업을 생성한 후 작업을 생성합니다.

  • 작업 슬라이스는 작업 템플릿, 인벤토리, 슬라이스 수로 구성됩니다.

  • 실행하면 분할된 작업에서 각 인벤토리를 여러 개의 《슬라이스 크기》 청크로 분할합니다. 그런 다음 적절한 인벤토리의 각 청크에서 ansible-playbook 실행 작업을 대기열에 넣습니다. ansible-playbook에 제공된 인벤토리는 해당 특정 슬라이스의 호스트만 포함하는 원래 인벤토리의 축소된 버전입니다. 작업 목록에 표시되는 완료된 분할된 작업에는 실행된 분할 작업 수로 적절하게 레이블이 지정됩니다.

_images/sliced-job-shown-jobs-list-view.png
  • 이러한 분할된 작업은 일반 스케줄링 동작(포크 수, 용량으로 인한 대기, 인벤토리 매핑을 기반으로 인스턴스 그룹에 할당)을 따릅니다.

참고

작업 분할은 작업 실행을 수평으로 스케일링하기 위한 것입니다. 작업 템플릿에 분할하면 시작 시 구성된 슬라이스 수에 따라 인벤토리가 분할된 다음 각 슬라이스에 대한 작업이 시작됩니다.

슬라이스 수가 컨트롤러 노드 수보다 크거나 같을 것으로 예상됩니다. 작업 스케줄러가 수천 개의 워크플로우 노드를 동시에 예약하도록 설계되지 않으므로 작업 슬라이스 수가 매우 많은 작업 슬라이스(예: 수천)를 설정하면 분할된 작업이 생성되는 작업 스케줄러를 동시에 예약하도록 설계되지 않으므로 성능이 저하될 수 있습니다.

  • 프롬프트 및/또는 추가 변수가 있는 분할된 작업 템플릿은 표준 작업 템플릿과 동일하게 동작하여 모든 변수 및 제한을 결과 워크플로우 작업의 전체 슬라이스 작업 세트에 적용합니다. 그러나 분할된 작업에 제한을 전달할 때 이 제한으로 인해 호스트가 할당되지 않으면 해당 슬라이스가 실패하고 전체 작업이 실패합니다.

  • 분산된 작업의 작업 슬라이스 작업 상태는 워크플로우 작업과 동일한 방식으로 계산됩니다. 하위 작업에 처리되지 않은 오류가 있는 경우 실패합니다.

경고

(개별 호스트에 변경 사항만 적용하는 대신) 호스트 간 오케스트레이션을 수행하려는 작업은 분할된 작업으로 구성되어서는 안 됩니다. 이 경우 작업이 실패할 수 있으며 |at|에서 슬라이스 작업으로 실행 시 실패하는 플레이북을 검색하거나 고려하지 않습니다.

21.2. 작업 슬라이스 실행 동작

분할된 작업은 모든 노드에서 실행할 수 있고 일부는 동시에 실행되지 않을 수 있습니다(예: 시스템의 용량 부족). 슬라이스 작업이 실행 중인 경우 작업 세부 정보에 현재 실행 중인 워크플로우 및 작업 슬라이스와 세부 정보를 개별적으로 볼 수 있는 링크가 표시됩니다.

_images/sliced-job-shown-jobs-output-view.png

기본적으로 작업 템플릿은 일반적으로 동시에 실행되도록 구성되어 있지 않습니다(API에서 allow_simultaneous 또는 UI에서 **동시 작업 활성화**를 선택해야 함). 분할 작업은 이 동작을 덮어쓰고 해당 설정이 선택되지 않은 경우에도 ``allow_simultaneous``를 의미합니다. :ref:`ug_JobTemplates`에서 이 동작을 지정하는 방법에 대한 자세한 내용과 작업 템플릿 구성의 작업 슬라이스 수를 참조하십시오.

작업 템플릿 섹션에는 사용자 인터페이스에서 다음 작업을 수행하는 방법에 대한 추가 세부 정보가 있습니다.

  • 슬라이스 번호가 1보다 큰 작업 템플릿을 사용하여 워크플로우 작업 시작

  • 슬라이스 작업 템플릿을 시작한 후 전체 워크플로우 또는 개별 작업 취소

  • 슬라이스 작업의 실행을 완료한 후 전체 워크플로우 또는 개별 작업 다시 시작

  • 작업 템플릿을 시작한 후 워크플로우 및 슬라이스 작업의 세부 정보 보기

  • 슬라이스 작업을 생성한 후 구체적으로 검색(다음 섹션인 작업 슬라이스 검색 참조)

21.3. 작업 슬라이스 검색

슬라이스 작업을 더 쉽게 찾으려면 검색 기능을 사용하여 다음 목록에 검색 필터를 적용합니다.

  • 슬라이스 작업만 표시하는 작업 목록

  • 작업 슬라이스의 상위 워크플로우 작업만 표시하는 작업 목록

  • 슬라이스 작업을 생성하는 작업 템플릿만 표시하는 작업 템플릿 목록

대부분의 경우처럼 작업 목록에 슬라이스 작업만 표시하려면 해당 유형(여기 있는 작업) 또는 ``unified_jobs``에서 필터링할 수 있습니다.

/api/v2/jobs/?job_slice_count__gt=1

작업 슬라이스의 상위 워크플로우 작업만 표시하려면 다음을 실행합니다.

/api/v2/workflow_jobs/?job_template__isnull=false

슬라이스 작업을 생성하는 작업 템플릿만 표시하려면 다음을 실행합니다.

/api/v2/job_templates/?job_slice_count__gt=1