Ansible
구성 요소
-
제어 노드 - control node
- Ansible을 실행하는 node
- Ansible 제공 프로그램을 이용하여 매니지드 노드 관리
- Ansible이 설치된 computer가 제어 노드가 된다
- 제어 노드와 매니지드 노드 사이는 SSH를 통해 통신한다.
-
매니지드 노드 - managed node
- Ansible로 관리하는 서버를 매니지드 노드 또는 호스트(host), 타겟(target) 이라 한다.
- 매니지드 노드에는 Ansible이 설치되지 않는다.
-
인벤토리 - Inventory
- 매니지드 노드 목록
- 인벤토리 파일은 호스트 파일 이라고도 한다.
- 인벤토리 파일은 각 매니지드 노드에 대한 IP Address, 호스트 정보, 변수 와 같은 정보를 저장
-
모듈 - module
- Ansible이 실행하는 코드 단위
- 미리 만들어진 동작 관련 코드 집합
- 각 모듈은 데이터베이스 처리, 사용자 관리, 네트워크 장치 관리 등 다양한 용도로 사용
- 단위 모듈을 호출하거나 playbook에서 여러 모듈을 호출 할 수 있다.
-
태스크 - Task
- Ansible 작업 단위
- Ad-hoc 명령을 사용하여 단일 작업을 한 번 실행할 수 있다.
-
플레이북 - Playbook
- 순서가 지정된 태스크 목록
- 지정된 작업을 해당 순서로 반복적으로 실행할 수 있다.
- 플레이 북에는 변수와 작업이 포함 될 수 있다.
- YAML로 작성
Ansible 동작 과정
- Ansible은 인벤토리 파일 내용을 참조하여, 관리에 대한 매니지드 노드 파악
- Ansible을 통한 매니지드 노드 관리 방법
- 모듈을 통한 매니지드 노드 관리
- Ad-hoc 명령을 통한 매니지드 노드 관리
- 태스크 단위로 매니지드 노드 관리
- 플레이 북을 이용한 매니지드 노드 관리
Ansible 환경 구축
- 실습 환경 구성
Ansible 제어노드 구축
-
Ansible 제어 노드와 Managed node 연결
- 제어 노드는 Managed Node와 연결 시 SSH를 통해서 연결한다.
- 따라서 제어 노드의 SSH key를 Managed node에 전송해야 한다.
- 하지만 AWS EC2 instance 환경에서는 keypair를 이용하여 연결하므로, Control node에는 Managed node의 keypair를 모두 가지고 있어야 한다.
-
Control Node 구성
- Ansible 환경은 Control Node에 구성하고, Managed node에는 특별한 환경 구성이 없다.
- Ansible 설치
- Ansible은 Linux 환경에 설치 가능
sudo amazon-linux-extras install ansible2
-
Ansible 설치 확인
ansible --version
- ansible 버전 확인
Ansible 환경 설정 파일
/etc/ansible/ansible.cfg
- Ansible 환경 설정 파일- Ansible이 동작할 때 마다 참조하는 파일
- Ansible 호스트 키 검사 속성을 비활성화 설정
- 처음 설치시에는
ansible.cfg
파일에 주석 처리 되어 있다.- host_key_checking = False
- Control node에서 Managed node에 접속 시, 별도의 key 확인 과정 없이 명령 수행을 위하여 비활성화 속성을 정의함.
/etc/ansible/hosts
- 인벤토리 파일
Ansible 환경 설정 적용 순서
- ANSIBLE_CONFIG 환경 변수에 지정된 파일
- 현재 디렉토리에 있는
ansible.cfg
파일 - 사용자 홈 디렉토리에 있는
ansible.cfg
파일- 지역설정(현재 사용자 - 리눅스 일반 사용자)
/etc/ansible/ansible.cfg
파일(글로벌 전역 파일)- 전역 설정(모든 사용자 - 리눅스 관리자/일반 사용자)
Managed Node와 연결 확인
- Control Node에서 Managed node와 연결을 하려면 Managed Node에 대한 정보를 알고 있어야 한다.
/etc/ansible/hosts
파일은 인벤토리 라고 하며, 이 파일에 Managed Node에 대한 정보를 기술한다./etc/ansible/hosts
파일은 전역으로 사용하는 인벤토리이며, 현재 사용자에 대한 인벤토리를 구성하려면 현재 사용자의 작업 디렉토리에 별도의 인벤토리를 작성하여 사용할 수 있다.
hosts 파일 변경 정보
Ad-hoc 명령
-
Ansible은 일반적으로 playbook을 사용하도록 설계되어있다. 하지만 한 번만 수행하거나, 간단한 명령을 통한 상태 확인 등은 별도의 playbook을 사용하지 않고 간단한 명령 구문으로 수행할 수 있는데, 이 방식을 Ad-hoc 명령이라고 한다.
-
형식
- ansible <호스트명 패턴( Managed node )> [옵션]
all
: 호스트명 패턴으로 사용하면 모든 managed node 대상으로 Ad-hoc 명령 실행-m
: 모듈명-a <인수목록>
: 모듈 인수-i <인벤토리 파일명>
: 인벤토리 (별도의 인벤토리를 지정하지 않으면 /etc/ansible/hosts 파일을 사용한다.)--become
: 관리자 권한으로 실행-k
: ansible 실행 시 암호 확인-K
: ansible 실행 시 root 권한으로 실행
- ansible <호스트명 패턴( Managed node )> [옵션]
-
예시
ansible all -m ping -i ./hosts
-> 호스트 패턴 all 은 인벤토리의 모든 호스트에 대하여 Ad-hoc 명령 적용 시 사용하는 호스트 패턴ansible managed -m ping -i ./hosts
-> managed 호스트 패턴에 대하여 ping 모듈 적용, 인벤토리는 현재 디렉토리의 hosts 사용- ping 모듈 - Ansible Control Node와 Managed node 사이의 통신 연결 상태 확인
Inventory 이해
-
Control Node에서 Managed node에 연결하기 위한 정보를 가지고 있는 파일
-
기본 위치
/etc/ansible/hosts
-
기본 위치의 파일은 default로 적용되는 인벤토리이고, 관리자 권한으로만 수정 가능
-
사용자가 원하는 디렉토리에 복사한 후 편집하여 사용
sudo cp /etc/ansible/hosts .
sudo chown <사용자ID>:<사용자그룹> <인벤토리 파일>
-
Ansible 설치 후 기본 인벤토리의 내용은 사용법에 대한 주석으로 구성되어 있다.
- 인벤토리 내용
- 그룹을 지정하지 않는 방식
- <hostname( managed node )> [속성]
- 10.0.1.97 ansible_connection=ssh ansible_port=22 ansible_user=ec2-user ansible_ssh_private_key_file=/home/ec2-user/work-ansible/gurum-aicore0942-20220906.pem
- 그룹을 지정하는 방식
- [그룹명]
- <hostname( managed node )> [속성]
- 그룹을 지정하지 않는 방식
- 공통 정보를 변수에 저장하여 공유하는 방식
- [그룹명:vars ]
- 여러 그룹을 하나의 그룹으로 묶어서 변수를 공유하는 방법