NHN Cloud 에서 진행.
Ansible
Ansible이란 서버의 설정 및 관리 소프트웨어 배포, 다수의 서버 구성에 대해 자동화를 구성하여 관리할 수 있는 도구.
- Automation 언어
- Agent less
- SSH 접속이 가능한 Host라면 별도의 Agent를 설치할 필요 없이 Ansible 작업을 실행할 수 있음.
- 비교적 이해하기 쉬운 YAML 문법으로 작업을 실행 가능.
- Play book을 사용하여 여러 Host에 정의된 'Role'과 'Task'를 Mapping하여 실행.
사전 준비
1. Instance 설치 ( Host 1개, Client 3개 )
2. 접속 확인
+ 각 Instance 간에 SSH로 통실할 수 있도록 Security Group(보안 그룹) 설정해주어야 함.
Ansible 설치
1. Ansible을 운영할 Host(Controller) 서버에서 SSH-KEY를 생성
[centos@ansible ~]$ ssh-keygen
- Key는 /home/centos/.ssh/ 디렉토리 아래에 생성된다.
- Private Key: /home/centos/.ssh/id_rsa
- Public Key: /home/centos/.ssh/id_rsa.pub
2. 생성된 Public Key(~/.ssh/id_rsa.pub)의 내용를 Client Instance 들의 Authorized_keys 파일에 복사
- Client Host 3개에 대하여 모두 진행.
3. Host에 Ansible을 설치하기 위해 EPEL Repository를 추가.
$ sudo yum install -y epel-release
4. Host에 Ansible 설치.
$ sudo yum install -y ansible
5. "/etc/ansible/hosts" 파일(Ansible의 Inventory)에 Client IP를 등록.
- Client Instance 들의 IP를 입력.
- NHN Cloud 에서 centos 계정으로 Login 해서 진행하였기 때문에 ansible_user=centos 를 작성.
※ "ansible_user=" 를 생략할 경우, 아래와 같은 ERROR 발생할 수 있음.
6. Host에서 Client 3대와 통신 확인. ( ansible all -m ping )
[centos@ansible ansible]$ ansible all -m ping
※ 아래와 같은 ERROR가 발생한다면, Client Instance의 ~/.ssh/authorized_keys 파일에 Public Key 내용이 정상적으로 추가되었는 지 확인해봐야 함.
Ansible Playbook 을 통해 Nginx 설치 및 삭제
1. Nginx 설치 Yaml 파일 작성 및 테스트
(1) install_nginx.yml
[centos@ansible ansible]$ cat install_nginx.yml
---
- hosts: test # hosts 파일에 등록한 호스트명
remote_user: root
tasks:
- name: install nginx web server
become: true
become_method: sudo
yum: name=nginx state=latest
notify:
- start nginx
handlers:
- name: start nginx
become: true
become_method: sudo
service: name=nginx state=started
(2) playbook 실행.
$ ansible-playbook install_nginx.yml -f 10
※ 아래와 같은 명령어 실행 권한 ERROR가 발생한다면, yaml 파일에 "become= true 와 become_method=sudo"를 추가하여 확인.
(3) URL 접속 확인 & Client Instance의 Service status 확인.
2. Nginx 삭제 Yaml 파일 작성 및 테스트
(1) remove_nginx.yml
[centos@ansible ansible]$ cat remove_nginx.yml
---
- hosts: test
remote_user: root
tasks:
- name: stop nginx
become: true
become_method: sudo
service: name=nginx state=stopped
- name: remove nginx
become: true
become_method: sudo
yum: name=nginx state=removed
(2) playbook 실행.
$ ansible-playbook remove_nginx.yml -f 10
(3) URL 접속 확인 & Client Instance의 Service status 확인.