A. Ansible ??
-. IT 자동화 도구.
-. CD(지속 배포)나 down time 제로 업데이트와 같이 고급 IT 작업을 조정
-. Ansible은 에이전트 없이 시스템을 관리함.
B. [ 사용하기 전 개념 공부 ]
-
Control node
Ansible이 설치된 모든 시스템을 control node라고 함.
어떤 제어 노드에서든 /usr/bin/ansible 또는 /usr/bin/ansible-playbook 을 호출하여 command와 playbook을 실행할 수 있음.
* Python이 설치 돼 있다면 어떤 컴퓨터든control node로 사용 가능. -
Managed nodes
Ansible로 관리하는 네트워크 장치
관리되는 노드는 때로 host 라고도 한다. Managed nodes에 ansible이 설치 돼 있지는 않다. -
Inventory
관리되는 노드의 목록.
때로 host file이라고 함. 인벤토리에는 관리 될 노드에 대한 IP주소와 같은 정보를 지정할 수 있음. -
Modules
Ansible 코드 실행 단위.
Task로 단일 모듈을 호출하거나, playbook에서 여러 다른 모듈을 호출 할 수 있음. -
Tasks
Ansible의 작업 단위. -
Playbooks
반복해서 실행하고자 해당 작업을 실행 순서대로 저장해 놓은 정렬된 task list
Playbook에는 task뿐 아니라 변수도 포함할 수 있다.
YAML형식으로 작성 돼있음.
C. [설치]
-
Ansible은 보통 일년에 2번정도 새로운 releases를 내놓는다.
버전업을 진행할 시 고려해야할 부분도 있으니 꼭 읽어보고 수행할 것.
Control node 요구사항
-
Python 2(version 2.7) or Python 3(version 3.5 and higher)
* ansible-core 2.11 / Ansible 4.0.0 은 Python 3.8과 약간의 종속성이 있지만 위 요구사항으로 동작할 수 있다.
* ansible-core 2.12 / Ansible 5.0.0은 Python 3.8 or 최신버전을 요구한다.
* Starting with ansible-core 2.11, the project will only be packaged for Python 3.8 and newer
* Windows is not supported for the control node
Managed node 요구사항
-
Managed node에 daemon을 필요로 하지는 않는다. 그러면 통신은..?
managed node에 ansible은 SSH,SFTP 를 사용하여 연결과 전송을 한다.
SFTP는 SCP로 대체 가능. - Python을 실행할 수 있는 모든 컴퓨터/장치는 Python 2(2.6 이상) or Python 3(3.5 이상) 필요
Ansible 2.10 부터는 두가지 아티팩트가 배포된다.
요구사항에 맞추어 설치할 것.
- Community 패키지(ansible)
- Ansible-core(minimalist language and runtime)
=======================================================그럼 시작해봅시다..========================================================
-
https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#control-node-requirements
OS 별 설치 가이드 참고. -
Ubuntu Server (amazon프리티어) 생성
* amazon linux에서는 linux extra를 사용하여 설치해야 함. 부가 기능이 아닌 정확한 실습을 위해 ubuntu로 해보자. - 접속. Login as -> ubuntu
설치 후 아래와 같이 확인되면 정상.
ubuntu@ip-172-31-7-112:~$ ansible localhost -m ping
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
-
기본 인벤토리 정보 작성 및 계정 생성으로 테스트해보자!
-
관리 대상이 될 인스턴스는 ec2로 구성해 보자.
type – amazon linux 2 프리티어
private ip 주소 : 172.31.5.193 -
/etc/ansible/hosts 파일에 작성하면 된다.
IP 혹은 FQDN(www.example.com)등 원하는 방식으로 작성할 수 있다.- Alias도 만들 수 있고, 변수 또한 전달할 수 있으며, 이는 문서의 링크 참고.
-
Ansible이 설치된 서버에서
$ssh-keygen -t rsa
위 명령어를 실행하고
생기는 id_rsa.pub(default) 의 내용을 EC2의 ec2-user home/.ssh/authorized_keys에 붙여 넣어준다.-
그리고 ping test 재실시. 이때 옵션 추가.
ansible all -m ping -u ec2-user
-
그리고 ping test 재실시. 이때 옵션 추가.
-
계정 생성.
ansible의 user 모듈을 사용하여 계정을 생성해 보자.
명령 : ansible all -m user -a "name=ubuntu" -u ec2-user
//연결된 host(all 이지만 현재 1개 서버만 연결했다)
//이때 fail이 뜨는데 이건 ec2-user에 sudo 권한이 없기 때문이다.
(실제해보면 sudo는 있지만 명령어를 sudo로 수행하지 않는 것)-
/etc/ansible/ansible.cfg 은 ansible의 설정 파일이다.
이 파일에 아래 내용을 찾아서 become=True를 설정하자.
-> 이러면 명령어를 수행할 때 마다 sudo 로 수행한다
[privilege_escalation]
become=True
//OR! 명령어 뒤에 --become을 넣어준다.
-
/etc/ansible/ansible.cfg 은 ansible의 설정 파일이다.
-
관리 대상이 될 인스턴스는 ec2로 구성해 보자.
-
다시 계정을 생성하고, 이제 확인.
확인 명령 : ansible all -m shell -a "tail -n 1 /etc/passwd" -u ec2-user
결과 : -
이제 생성한 계정을 삭제해 보자.
명령 : ansible all -m user -a "name=ubuntu state=absent remove=yes" -u ec2-user
-
주의 !
명령어에 -u ec2-user를 주지 않으면 현재 실행 계정과 동일한 계정명으로 시도한다. (예제에서는 ubuntu로 실행을 시도한다) -
Playbook을 작성 해보자!
-
---
- name: My first taskhosts: alltasks:- name: Leaving a mark on ec2command: "touch /tmp/ansible_was_here"
-
실행방법 : ansible-playbook My_first_playbook.yml -u ec2-user
- EC2에 가서 확인해보자!
- Ansible은 playbook을 따로 관리해 주지 않는다.(디폴트 폴더나 설정이 없다는 이야기 같다.) 실제 환경에서 사용시에 별도로 경로를 설정하고 관리하면 좋겠다.