인프라/Ansible

[정리] 앤서블 철저 입문

seungdols 2018. 2. 8. 23:27
플레이북 실행 속도를 높이기 위한 tip
파이프라이닝으로 SSH 처리 수 줄이기
일반적으로 앤서블은 task 실행마다 SSH명령을 여러번 실행(임시 디렉토리 생성, 모듈 스크립트 전송, 모듈에 실행 권한 부여, 모듈 실행 + 삭제)하지만, 파이프라이닝 설정을 활성화화면, 모듈 스크립트의 전송을 처리할 필요가 없어진다. 곧, SSH처리 수가 감소하여 (모듈 실행만으로 완료) 성능 개선으로 연결될 수 있다. 즉, 이 설정을 SSH를 통해 모듈을 실행하는 모든 경우에 유효하여 항상 활성화 해두는 것이 좋다.
 
  [ssh_connection]
  pipelining = True
파이프라이닝이 기본적으로 비활성화 된 이유는 sudo를 이용해 관리자 권한으로 실행할 때, sudoers 설정 파일에서 requiretty를 비활성화해야 한다는 제약이 있어서 그렇다. 그리고 앤서블 자체가 모든 시스템에 기본 설정만으로 문제 없이 동작해야 한다는 철학을 가지고 있어서 기본 설정에 파이프라이닝 설정 하는 것을 권장 하지는 않는다.
requiretty가 활성 상태인 호스트를 작업 할 때도 playbook을 이용해 파이프라이닝 대응 처리 자체를 ansible에서 처리가 가능하다.
 
  - name: pipleining 대응
    hosts: all
    become: yes
    vars:
      ansible_ssh_pipelining: no
    tasks:
      - name: ansible_user에 대한 requiretty 설정을 비활성화
        lineinfile:
          dest: /etc/sudoers
          regexp: '^Defauls:{{ ansible_user }}\srequiretty'
          line: 'Defaults:{{ ansible_user}} requiretty'
          validate: 'visudo -cf %s'
          backup: yes
forks로 동시 병렬 배포 수 제어
여러 대에 동시에 배포시 먼저 조정 해야 하는 것이 호스트에 최대 동시 접속 수를 표시하는 forks입니다. 기본 설정은 ansible 방침에 따라 5개로 설정 되어 있어, 이 값을 늘려주면 됩니다.
단, MacOS 에서는 20으로 줘도 에러가 발생하는데, 이를 위해서는 파일 오픈 갯수를 늘려주어야 합니다.
암호화 관련
  • ansible-vault라는 명령으로 키 파일등을 암호화 할 수 있음.
  • https://www.vaultproject.io/
    • vault 프로젝트또한 모듈로써 완벽하게 지원해줌.

앤서블 동작 순서

  • Variable loading
  • Fact gathering
  • The pre_tasks execution
  • Handlers notified from the pre_tasks execution
  • Roles execution
  • Tasks execution
  • Handlers notified from roles or tasks execution
  • The post_tasks execution
  • Handlers notified from post_tasks execution


반응형