
- 대량의 서버 인프라 관리를 자동화하는 IaC 도구
- 컨트롤 노드에서 앤서블 실행 시 스크립트에 작성된 내용에 따라 각 노드에 작업 자동화
Ansible 구조
ansible.cfg + inventory + playbook
ansible.cfg
ansible 기본 설정 파일
- inventory 경로 지정
remote_user: 각 서버에 ssh 접근 시 어떤 계정으로 접근할 지 지정- inventory에 각 서버마다 접근할 계정 지정할 수도 있지만 단일 계정으로 접근 권장
become = true: 리모트 노드에서 Ansible 동작 시 sudo 권한으로 동작하도록 설정- become 설정은 ansible.cfg에서 명시하지 않아도 각 playbook마다 개별 설정 가능
host_key_checking = False: 처음 SSH 접속하는 서버는 fingerprint를 남겨야 하지만 이 옵션으로 무시하고 접속remote_tmp = /tmp/.ansible-{USER}: Ansible은 명령어 실행 시 임시 파일을 접속 디렉토리에 작성하는데, 접속 서버에서 계정이 디렉토리에 대한 쓰기 권한이 없을때 경로를 임시 파일 작성 경로를 /tmp로 우회
| |
inventory
ansible 동작 시 대상 호스트 및 변수를 정의하는 파일
| |
- 이 설정에서는 각 리모트 노드들의 alias와 ip를 지정해서 동작
ansible_host는 ansible 내부적으로 ip로 인식하는 예약 변수- inventory에서 ansible_host을 명시하지 않는다면 /etc/hosts에서 도메인, IP 작성 ⇒ inventory에 도메인 명시하면 동일하게 동작 가능
ansible_user변수로 서버별 접속 계정을 다르게 설정 가능
- 각 그룹마다 변수를 다르게 설정 가능
all:vars를 사용해서 전체 호스트에 대한 변수 설정ansible_ssh_private_key_file변수로 키 파일 위치 지정 가능
playbook
어떤 서버, 어떤 명령어를 실행할지 정의하는 yaml 파일
모든 서버의 /home/ansible 경로에 0755의 권한을 가진 pkg 디렉토리 생성 yaml
| |
- host에 inventory에 정의한 alias, group 등등으로 대상 리모트 노드 지정
- 예시
- prod ⇒ prod1, prod2, prod3 총 3개 서버 대상
- prod1 ⇒ 개별 서버 지정 가능
- all ⇒ inventory에 기록된 모든 서버 대상
- all:!prod1 ⇒ prod1 서버를 제외한 모든 서버 대상
- 예시
- task에 어떤 모듈을 어떻게 동작시킬지 정의
- task에 여러 모듈 실행 가능
- 한 yaml에서 여러 task도 실행 가능
- 이 설정에서는
file모듈 실행