RedPlug's Tory

책에서는 Virtual Box로 진행하였으나, 기존 Hyper-V 테스트 환경이 있어서 Hyper-V에서 진행하며,

기존 가지고 있던 CentOS7 VM파일을 내보내기 하여 구성 진행

각 호스트 네임 및 아이피 설정 작업 진행

Hostname IP
ansible-server 192.168.0.170
ansible-node01 192.168.0.171
ansible-node02 192.168.0.172
ansible-node03 192.168.0.173

설정 후 인터넷이 한대밖에 안되는 증상이 있어서 확인 결과 MAC주소를 정적으로 설정 해둔 부분이 문제여서 해당 부분 동적으로 변경 후 정상 통신 확인

yum install ansible -y를 실행하였으나 No package ansible available 노출

 

구글링 해보니 No package가 뜰경우

yum install epel-release

명령어 진행 후에 진행 하는 것으로 확인하였고 설치완료

yum install ansible -y

 

앤서블 사용 가능한 명령어 확인

ls /usr/bin/ansible*

 

노드 호스트 추가

echo "192.168.0.171" >> /etc/ansible/hosts
echo "192.168.0.172" >> /etc/ansible/hosts
echo "192.168.0.173" >> /etc/ansible/hosts
# check host
cat /etc/ansible/hosts | grep -v "^#"

known_hosts_key값 입력 -> 노드 숫자만큼 yes입력

ansible all -m ping

 

앤서블 명령이 정상적으로 입력되는지 확인

ansible all -m ping -k

앤서블 설정파일

cat /etc/ansible/ansible.cfg

 

/etc/ansible/hosts 파일에서 노드 설정 시 alias 설정이 가능

all 입력시 모드 노드들 지정

앤서블 실행 시 사용할 수 있는 옵션 값

옵션 풀 네임 네용
-i --inventory-file 적용될 노드들을 선택
-m --odule-name 사용하는 모듈
-k --ask-pass 암호를 물어보는 설정
  --list-hosts 적용되는 노드들을 확인

특정 노드에만 ping 명령

echo "192.168.0.171" >> customized_inven.lst
echo "192.168.0.172" >> customized_inven.lst
cat customized_inven.lst 
ansible -i customized_inven.lst all -m pink -k

특정 노드에 실행

ansible -i customized_inven.lst 192.168.0.171 -m ping -k

적용노드 파악(실제로 실행되지 않음

ansible all -m ping -k --list-hosts
ansible all -m ping --list-hosts

-m 을 사용하는 모듈, shell 명령 사용시 bash쉘에서 사용하는것과 동일하게 사용 가능, -a를 넣어서 인자값을 넣을 수 있음

-m shell 명령이 기본이기 때문에 생략할 수 있으나 명시성을 높이기 위해 기입하는 것을 추천

ansible all -m shell -a "uptime" -k
ansible all -a "uptime" -k

ansible all -m shell -a "df -h" -k
ansible all -m shell -a "free -h" -k

user 모듈

사용자 추가

ansible all -m user -a "name=bjpublic" -k

 

추가 확인

ansible all -m shell -a "tail -n 1 /etc/passwd" -k

삭제

ansible all -m user -a "name=bjpublic state=absent"

yum : 패키지 설치

"name=<패키지이름> state=<상태>" present 설치, absent 삭제

ansible all -m yum -a "name=httpd state=present" -k

copy : 파일을 원격지로 복사

"src=<보낼파일의 위치와 이름> dest=<받을 파일의 위치와 이름>"

 

 

기본페이지 다운로드

curl https://httpd.apache.org -o index.html

index.html 노드로 이동

 ansible all -m copy -a "src=index.html dest=/var/www/html/index.html" -k

service  : 서비스 관리, 방화벽 OFF

ansible all -m service -a "name=httpd state=started" -k
ansible all -m shell -a "systemctl stop firewalld" -k

웹서버 작동 확인

웹서버 삭제 진행

ansible all -m yum -a "name=httpd state=absent" -k

 

작업할 내용을 파일로 작성(playbook)

멱등성 : 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질

3번 노드를 2번 추가

echo로 한경우 두줄이 추가되나 ansible로 할 경우 1개만 추가됨(멱등성)

echo "192.168.0.173" >> customized_inven.lst
echo "192.168.0.173" >> customized_inven.lst

 

ansible localhost -c local -m lineinfile -a "path=customized_inven.lst line=192.168.0.174"
ansible localhost -c local -m lineinfile -a "path=customized_inven.lst line=192.168.0.174"
cat customized_inven.lst

플레이북은 앤서블 플레이북(ansible-playboo)이라는 파일로 실행

 nginx_install.yml 생성

---
- name: Install nginx on linux
  hosts: nginx
  gather_facts: no
  
  tasks:
    - name: install epel-release
      yum: name=epel-release state=laste
    - name: install nginx web server
      yum: name=nginx state=present
    - name: upload default index.html for web server
      get_url: url=https://www.nginx.com dest=/usr/share/nginx/html/ mode=0644
    - name: start nginx web server
      service: name=nginx state=started
ansible-playbook nginx_install.yml -k

사이트 정상 작동 확인