Ansible: 작업 실행 속도 향상

4517 단어 devopsansible
Ansible 작업 실행은 완료하는 데 시간이 걸립니다. SSH 다중화 및 파이프라이닝을 사용하고 사실 수집 단계를 중지하거나 캐싱하면 이 시간을 크게 줄일 수 있습니다. 이러한 최적화에 대해 자세히 논의해 보겠습니다.

이 기사는 원래 my blog 에 게재되었습니다.

SSH 개선



플레이북이 실행되면 Ansible은 세 개의 SSH 연결을 열고 닫습니다.
  • 사실을 수집
  • 압축된 플레이북 코드를 노드에 복사
  • 플레이북 코드 실행

  • 하나의 SSH 연결로 이 모든 단계를 수행하려면sible.cfg에 다음 코드를 입력합니다.

    [ssh_config]
    pipelining = true
    

    두 번째 옵션은 SSH 다중화를 사용하는 것입니다. 다른 노드에 대한 다른 SSH 연결이 형성되는 하나의 나가는 TCP 연결을 엽니다. Ansible은 default SSH 멀티플렉싱을 사용하지만 SSH 구성을 변경해야 할 수도 있습니다multiplexing cookbook.

    더 많은 작업을 병렬로 실행



    가능한 플레이북이 작동하는 동시 노드 수를 늘릴 수 있습니다. 다음을 사용하여 노드 임계값을 늘리십시오.

    [defaults]
    forks = 20
    

    작업을 비동기식으로 실행할 수도 있습니다. 즉, Ansible은 다음 작업 전에 작업이 완료될 때까지 기다리지 않습니다. 이것은 일정 시간 동안 지속되는 작업이 있는 경우에 유용할 수 있지만 후속 작업에는 필요하지 않습니다. 비동기 작업의 설정 및 사용에는 약간의 생각이 필요합니다(official documentation 참조).

    "무료" 전략 사용



    Ansible이 여러 호스트에서 작업을 실행할 때 다음 작업을 실행하기 전에 모든 호스트에서 각 작업이 완료될 때까지 대기합니다. 다음 설정을 사용하면 호스트가 현재 작업을 완료하는 즉시 호스트에서 작업이 실행됩니다.

    [defaults]
    strategy = free
    

    팩트 수집 비활성화 또는 캐시



    각 노드에 대한 팩트 수집은 작업이 실행되기 전에 매번 발생하는 시간 소모적인 작업입니다. 사실이 전혀 필요하지 않은 경우 다음과 같이 플레이북에서 사실 수집을 비활성화할 수 있습니다.

    - name: playbook
      gather_facts: false
    

    전역적으로 비활성화하려면 다음을 작성하십시오.

    [defaults]
    gathering = explicit
    

    팩트가 필요하지만 팩트가 너무 자주 변경되지 않는다고 확신하는 경우 캐싱할 수 있습니다. 로컬 JSON 파일에 24시간 동안 팩트를 캐시하려면 ansible.cfg에 이것을 작성하십시오.

    [defaults]
    gathering = smart
    fact_caching_timeout = 86400
    fact_caching = jsonfile
    fact_caching_connection = ./ansible_fact_cache
    

    MongoDb, Redis 또는 Memched와 같은 other caching plugins을 사용할 수도 있습니다.

    결론



    이 기사에서는 호스트에서 작업을 실행하는 데 필요한 SSH 연결 수를 줄이고, 더 많은 호스트에서 작업 실행을 시작하고, 작업 실행을 간소화하는 네 가지 옵션을 사용하여 Ansible 작업 실행을 개선하는 방법을 배웠습니다. 이것을 당신의sible.cfg에 추가하면 됩니다.

    [defaults]
    strategy = free
    forks = 20
    
    [ssh_config]
    pipelining = true
    

    그리고 시간이 많이 걸리는 사실 수집 단계를 건너뛰려면 스마트 수집을 켜십시오.

    [defaults]
    gathering = smart
    fact_caching_timeout = 86400
    fact_caching = jsonfile
    fact_caching_connection = ./ansible_fact_cache
    

    이러한 개선 사항을 즐기십시오.

    좋은 웹페이지 즐겨찾기