[Dev] Ansible

Ansible 이란

많은 서버들에 동시에, 동일한 환경을 배포하기 위해 사용 인프라의 상태를 코드로 정의(IaaC)하고 이를 타겟 서버들에 배포하여 특정 환경을 동일하게 세팅할 수 있음 가장 큰 장점은 클라이언트 에이전트가 필요없다는 것 타겟 서버에는 추가적인 설치없이 SSH 접근만 가능하면 됨

설치 및 사용법

  1. pip로 설치
pip install ansible
  1. 타겟 서버에서 비밀번호없이 sudo 사용하도록 visudo 수정
$ visudo
...
userid ALL=(ALL) NOPASSWD:ALL
  1. 실행 서버에서 타겟 서버에 비밀번호없이 ssh 접속이 가능하도록 설정
$ ssh-copy-id {user-id}@{target-server-ip-address}

Ansible의 3요소

세 가지 구성 요소가 존재 인벤토리(어디서) 플레이북(무엇을) 모듈(어떻게)

인벤토리

Ansible 스크립트가 수행될 타겟 서버 목록들을 정의함

# file: "hosts.ini"
server01 ansible_host=10.123.123.123 ansible_user=root ansible_port=22
server02 ansible_host=10.123.123.456 ansible_user=root ansible_port=22
server03 ansible_host=10.123.123.789 ansible_user=root ansible_port=22

[ubuntu-servers]
server01

[centos-servers]
server02
server03

특정 서버들을 그룹화해서 사용할 수도 있음

# ping 예제
$ ansible -m ping -i hosts.ini ubuntu-servers

플레이북

yaml 포맷 파일로, 타겟 서버들에서 무엇을 해야할 지를 정의

# file: "sample.yaml"
- name: nginx install
  hosts: all
  become: true
  tasks:
    -name: nginx package install
      yum:
        name: nginx
        state: installed

become: true 는 sudo 권한으로 수행함을 의미 task 에서 실제 작업들을 정의. 여기서는 yum 모듈 사용

아래와 같이 플레이북과 조합으로 사용

$ ansible-playbook -i hosts.ini ubuntu-servers sample.yaml

모듈

플레이북에서 각 task 가 어떻게 수행될지에 대한 정의 위에 예제에서는 yum 모듈이 사용됨 다양한 모듈이 존재하기 때문에 공식 문서를 보는 것이 좋음

멱등성

Ansible 스크립트는 idempotent 한 특성이 있기 때문에 반복 수행에도 같은 결과를 보장함 예를 들어, 패키지를 설치하는 task 가 있다면 이미 설치되어 있을 시 해당 task 를 success 로 처리하고 pass 함

참고


© 2021. All rights reserved.

Powered by Hydejack v9.1.4