본문 바로가기
IaC/Ansible

[Ansible] Install on CentOS7(Cloud), nginx Install/Remove

by Haengsin 2022. 3. 16.

NHN Cloud 에서 진행.

 

Ansible

Ansible이란 서버의 설정 및 관리 소프트웨어 배포, 다수의 서버 구성에 대해 자동화를 구성하여 관리할 수 있는 도구.

  • Automation 언어
  • Agent less 
    • SSH 접속이 가능한 Host라면 별도의 Agent를 설치할 필요 없이 Ansible 작업을 실행할 수 있음.
  • 비교적 이해하기 쉬운 YAML 문법으로 작업을 실행 가능.
  • Play book을 사용하여 여러 Host에 정의된 'Role'과 'Task'를 Mapping하여 실행.

 

사전 준비

1. Instance 설치 ( Host 1개, Client 3개 )

Instance List

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 확인.

URL 접속 확인
Service Status 확인
nginx process 확인

 

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 확인.

URL 접속 확인
Service Status 확인.