Ansible이란?
Python 기반으로 작성된 도구이며 오픈소스 프로젝트이다. (현재는 Red Hat이 인수)
Shell Script와는 다르게 Playbook 이라는 스크립트와 같은 파일내용에 각종 Python모듈 및 yaml언어 사용을 통해 Tasks을 만들며, 해당 Tasks를 여러대의 서버에 동시에 수행할 수 있는 자동화 엔진이라고 할 수 있다.
특징
1. 보편적인 솔루션들과는 다르게 Agent가 따로 필요하지 않음. (Agentless 라고 표현함)
2. ssh기반으로 동작 (Key인증 및 계정Password) >> SSH 프로토콜의 포트 사용
일반 계정으로 작업을 수행할때 관리자 권한(root)이 필요한 경우 일반계정의 sudoers 등록이나, su를 사용할 수 있게 설정해두면 일반계정으로도 문제 없이 자동화 할 수 있다.
3. 멱등성 (작업하고자 하는 내용이 해당 서버에 이미 적용되어있다면 중복으로 적용하지 않는다는걸 의미)
=> 여러번 실행했을때 Shell Script로 실행하면 결과 값이 달라 질 수 있지만, Ansible을 통해 작업을 하면 상태변경에 의미를 두기때문에 결과가 변하지 않음
4. 다양한 모듈사용
모듈은 커뮤니티 버전을 통해 다양한 기능을 사용할 수 있으나 상용서버에 커뮤니티 버전의 모듈을 사용하기엔 보안적인 측면으로 문제가 될 수있음. RedHat에서 Ansible프로젝트를 인수 한 이후 여러 Vendor사 들과 협업을 통해 검증된 모듈을 제공하고있고, 기술지원도 지원하고 있음. (( 별도 프로젝트나 심화적인 로직이 아닌 이상 기본으로 설치되는 모듈로도 충분히 커버가 가능하다.))
5. 다양한 플렛폼 지원
Bare-Metal, Virtualization, Public/Private Cloud 환경을 모두 지원하고 네트워크 장비, Windows까지 지원한다
(Windows에서 사용하는 모듈은 같은 동작이라도 Linux와 종류가 다름, 네트워크 장비에 경우 Vendor사별, 장비별로 제공하는 모듈이 다름)
동작 과정 예시
Inventory : 자동화 대상(Managed Node)들의 목록을 IP기반으로 등록해둔다. (원하는대로 그룹화도 할 수 있다.)
ㄴ 지정한 그룹의 대한 그룹별 변수(vars) 도 설정 가능하다.
Module : Python을 기반으로 작성 되어있으며, Shell Command와 비슷하게 특정 동작같이 하나의 작업이라고 보면된다.
Playbook: Module을 이용해 자동화 동작에 대한 내용을 yaml 형식으로 작성해둔 하나의 스크립트.
ㄴ 작성한 Playbook 내에 별도 변수(vars)도 설정 가능하다.
>> /etc/ansible/ansible.cfg파일과 Inventory파일, Playbook파일에 모두 동일한 변수에 내용이 있다면
하기처럼 우선순위가 정해져 적용되는점 참고!
(우선순위 낮음) /etc/ansible/ansible.cfg < inventory < playbook (우선순위 높음)
사용자가 Playbook을 작성할때 특정 동작을 위한 모듈과 모듈옵션에 대해 yaml파일에 내용을 작성 한 후,
Ansible Engine을 통해(# ansible-playbook -i [Inventory file] [playbook file]) 각 Inventory 그룹(Host)에 해당 동작을 수행시킨다.
요구사항
Controll Node (Ansible 명령을 수행할 Server)
1. ssh 통신 가능
2. password 혹은 key 필요
3. Tasks에 따라 사용 계정에 root권한 필요(su, sudo 가능여부)
4. Ansible 2.11 이상 설치 시 python3.8 버전 이상 패키지 설치 필요
(ansible-2.11 패키지 이상부터 ansible-core 라는 명칭으로 변경됨 / 이전 버전은 ansible-2.9, ansible-2.10 으로 표기)
(해당 포스트 작성일 22.06.09 기준 최신버전 ansible-core-2.12.6-2 >> from Red hat)
Managed Node (자동화 대상 Server)
1. 별도의 Service Daemon은 필요하지 않으나 Controll Node에서의 ssh접속이 가능해야함
2. 접속 가능한 계정필요 (일반계정 or root계정)
3. Controll Node에서 사용한 Playbook의 Module에 따라 요구사항이 충족해야함
(해당 요구사항은 Module의 doc 페이지나 사용설명서에 나열되어있음)
4. python 패키지 설치 python 2.6이상 or 3.5이상 (웬만하면 Controll Node의 python 버전과 일치시키는게 좋을것 같다.)
설치방법
글쓴이는 Test설치 시 자체 서버와 외부망 연결로 RedHat subscription인증을 통해 설치하였으므로 해당 포스트에선 다루지 않았습니다.
OS종류 별 설치 방법과 더 자세한 manual에 대해서는 하기 링크를 참조부탁드립니다.
https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
(Ansible 공식 doc)
Ansible을 ad-hoc(에드혹) 방식인 모듈지정을 통해 명령 한줄(# ansible -m [Module 이름])로 간단하게 사용할 수도 있지만,
Playbook을 통한 자동화 방식으로 사용하는것이 보편적이므로 사용방법에 대해서는 별도의 포스트에서 다루겠습니다.
추가적으로 궁금한 내용은 댓글 남겨주시면 아는선에서 답변드리겠습니다.
댓글