Ansible

Ansible Playbook 정의 및 작성하기

Joon0464 2021. 7. 12. 15:19

[무료] [기초] 처음부터 설치하며 배우는 앤서블(Ansible) - 인프런 | 강의 (inflearn.com)

 

[무료] [기초] 처음부터 설치하며 배우는 앤서블(Ansible) - 인프런 | 강의

엔서블과 같은 툴을 접해 보지 못한 엔지니어/관리자 그리고 개발자를 대상으로 주로 실습을 통해 앤서블을 통해 얼마나 효과적으로 시스템이 관리될 수 있는지 체험하고, 이해하게 됩니다, 📣

www.inflearn.com

Playbook이란?

- 각본, 작전, 계획

- Playbook은 오케스트레이터 언어로 호스트 서버에서 시행할 정책, 시스템 프로세스 단계의 설정 자동화를 위해 사용된다.

- Ansible playbook은 반복, 재사용, 간단한 구성 관리 및 다중 시스템 배포, 복잡한 애플리케이션 배포 사용에 적합하다.

 

사용 예시)

대량의 서버에 웹 서비스를 설치 및 가동해야 할 때 서버 패키지 설치, 파일 전송, 서비스 재시작을 ansible playbook에 작성하여 한 번에 모든 과정을 진행할 수 있다.

 

멱등성이란?

연산을 여러번 적용해도 결과가 달라지지 않는 성질이다.

이와 같이 echo 명령어를 이용하여 내용을 추가하게 되면 똑같은 결과값이 3번 중복되어 입력된다.

따라서 멱등성을 위해 아래와 같이 Ansible Playbook을 작성하여 사용하게 된다.

R vi joon.yml

---
- name: Ansible_vim
  hosts: localhost

  tasks:
    - name: Add ansible hosts
      blockinfile:
          path: /etc/ansible/hosts
          block: |
             [joon]
             172.16.0.200

ansible playbook 명령어를 사용하여 yml 파일을 실행한다. 'changed =1'을 통해 내용이 수정되었음을 알 수 있다.

 

ansible playbook을 사용하면 /etc/ansible/hosts파일에 위와 같이 내용이 추가된다.

다시 joon.yml을 ansible-playbook 명령어로 실행하면 changed=0으로 출력된다.

/etc/ansible/hosts를 다시 한 번 확인하여도 내용이 바뀌지 않은 것을 볼 수 있다.

Playbook을 사용한 3대의 노드에 웹서비스 설치 및 기동

1. nginx 설치 및 데몬 실행

# vi nginx.yml

---
- hosts: nginx
  remote_user: root
  tasks:
    - name: install epel-release
      yum: name=epel-release state=latest
    - name: install web server
      yum: name=nginx state=present
    - name: Start nginx web server
      service: name=nginx state=started

nginx 설치 및 데몬 실행 yml을 작성하여 playbook을 실행하면 nginx가 설치된다.

# ansible nginx -m shell -a "systemctl status nginx

ansible 명령어로 nginx 데몬이 정상적으로 동작중인지 확인한다.

 

2. nginx를 서비스하기 위한 방화벽 포트 개방

 

# vi firewall.yml

---
  - name: firewall
    hosts: nginx
    tasks:
      - name: firewall register
        shell: firewall-cmd --permanent --add-port=80/tcp
      - name: firewall reload
        shell: firewall-cmd --reload

방화벽 포트를 열어주기 위한 playbook을 작성하여 실행시켜준다.

다음과 같이 접속이 가능해진다.

 

3. 메인 페이지 교체하기

# curl -o index.html https://www.nginx.com

www.nginx.com의 주소에서 html 파일을 내려받아 index.html파일로 저장한다.

# vi nginx.yml

---
- hosts: nginx
  remote_user: root
  tasks:
    - name: install epel-release
      yum: name=epel-release state=latest
    - name: install web server
      yum: name=nginx state=present
    - name: copy index.html
      copy: src=index.html dest=/usr/share/nginx/html/ mode=0644
    - name: Start nginx web server
      service: name=nginx state=started

수정한 nginx.yml 플레이북을 실행시켜준다.

위와 같이 세 개의 서버의 메인페이지가 변경되어 출력된 것을 볼 수 있다.

 

4. nginx.yml 코드 분석하기

# vi nginx.yml

---
- hosts: nginx				# /etc/ansible/hosts에 설정된 nginx 그룹에게 적용
  remote_user: root			# root 사용자가 아닐 때 root 권한이 필요하면 사용한다.
  tasks:					
    - name: install epel-release			
      yum: name=epel-release state=latest	# nginx 설치를 위한 확장 패키지 설치
    - name: install web server
      yum: name=nginx state=present			# nginx 패키지 설치
    - name: copy index.html					
      copy: src=index.html dest=/usr/share/nginx/html/ mode=0644		# index.html 복사
    - name: Start nginx web server
      service: name=nginx state=started		# nginx 설치