[우아하게 앤서블] Chapter 2 - 앤서블 체험하기
책에서는 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
사이트 정상 작동 확인