[Ansible] Ansible 설치 및 기본 사용법 (Rocky Linux 8)
대다수가 사용하는 프로비저닝 도구인 Ansible 을 Rocky Linux 에 직접 설치하고 간단하게 사용 해보도록 하겠음
1. Ansible
오픈소스로 만들어진 프로비저닝 도구이다.
IT 인프라를 코드로 구축하고 관리하는 Infrastructure as code(IaC) 라는 개념이 등장하면서 관련 도구가 생기기 시작했다. Puppet, Chef 와 같은 자동화 도구들이 있지만 에이전트방식으로 동작하기 때문에 도입 전부터 불편함이 생긴다.
Ansible은 관리노드에 에이전트를 설치할 필요가 없이 동작하기 때문에 초기 도입이 편하다는 장점이 있다.
2. Ansible 시작
2.1 실습환경
2.2 Ansible 설치
ansible은 기본 레포지토리에 없기 때문에 extra package를 먼저 설치 해야한다.
# dnf install epel-release -y
ansible 패키지 설치
# dnf install ansible -y
ansible 버전 확인
[root@rocky ~]# ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.6.8 (default, May 19 2021, 03:00:47) [GCC 8.4.1 20200928 (Red Hat 8.4.1-1)]
hosts 파일 수정
# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.80.159 node1
192.168.80.160 node2
ssh 키 생성
# ssh-keygen
원격지에 ssh 공개키 배포
# ssh-copy-id root@node1
# ssh-copy-id root@node2
ssh 패스워드 없이 정상 동작 확인
[root@rocky ~]# ssh root@node1 hostname
node1
[root@rocky ~]#
[root@rocky ~]# ssh root@node2 hostname
node2
[root@rocky ~]#
▶ 기초 용어들 ◀
1. 인벤토리(inventory)
Ansible이 설치 된 서버에서 명령을 전달 할 대상 서버들을 모아 놓은 목록파일을 인벤토리라고 함.
명령을 내릴 때 inventory 파일을 지정하지 않으면 기본경로로 /etc/ansible/hosts 파일을 사용한다.
작성 예시가 기본경로 파일안에 있으니 참고 하면 좋을 것 같다.
2. 플레이북(playbook)
Ansible 이 실행하는 명령을 play 라 하고 실행 할 명령들을 모아 놓은 파일을 playbook 이라고 함.
yaml 파일로 작성되어 읽고 쓰기가 쉬움
2.3 Ansible 기본 사용법
우선 명령을 내릴 대상을 모아놓은 인벤토리파일이 필요하다.
명령에 인벤토리파일을 따로 지정하지 않으면 /etc/ansible/hosts 파일을 기본파일로 사용한다.
본 포스팅에서는 따로 만들어서 사용하도록 하겠다. vi편집기로 hosts.ini 파일을 만들어 아래처럼 서버를 등록한다.
# cat hosts.ini
node1
node2
/etc/hosts 파일에 이름으로 등록 했기때문에 위 처럼 IP를 입력하지 않아도 상관없다.
기본사용법으로
# ansible [호스트] -i [인벤토리파일] -m [모듈]
처럼 사용한다. 호스트 위치는 맨 뒤에 입력해도 상관없다.
ping 모듈을 사용하여 Ansible 명령을 실행
# ansible all -i ./hosts.ini -m ping
-i 옵션으로 인벤토리파일을 지정하고 -m 옵션으로 사용 할 모듈을 지정하였다.
호스트를 all 로 지정하면 인벤토리에 등록 된 모든 노드로 명령을 보내게 된다.
실행 결과
인벤토리 파일에 호스트를 그룹으로 묶어서 지정할 수도 있다.
예를들어
# cat hosts.ini
[webserver]
node1
[wasserver]
node2
[dbserver]
node3
[rockylinux]
node1
node3
[centos]
node2
위 처럼 작성해서 호스트를 webserver 로 지정하면 node1 로만 명령이 실행된다.
실행결과
명령을 내리기 전 대상 호스트 목록을 보고싶다면
위 처럼 --list-host 옵션으로 목록을 확인할 수 있다.
Ansible 자주 사용되는 모듈