앤서블 기초1 맛보기
학습을 하기 위한 조건 / 네트워크 구성
- VMware
- centos 설치
- 각각 ip를 지정하여 서로 통신이 되는지 확인하고 hostname을 변경 해준다.
#ip 변경
vim /etc/sysconfig/network-scripts/ifcfg-ens33
#hostname 변경
hostnamectl set-hostname <호스트네임>
su
앤서블을 이용한 간단한 테스트
- 앤서블 server에 앤서블 패키지 설치
yum -y install ansible
#만약 no packege 라고 뜬다면 아래의 코드를 사용한 후 다시 install할 것
yum install epel-release
yum repolist
- 서버의 명령을 받아서 실행할 노드들을 추가한다.
vim /etc/ansible/hosts
- 노드 추가 후 hosts_key 값을 입력 받은 후 앤서블 서버로부터 앤서블 노드로 정상적으로 앤서블 명령이 전달 되는지 확인한다.
ansible -all -m ping
#hosts_key값을 입력 받는다.
#총 3개의 node 가 있기 때문에 yes를 3번 입력 해준다.
ansible -all -m ping -k
#node의 password를 입력 해준다.
앤서블이 실행할 때 참조하는 파일
- 환경 설정 파일
- 위치 : /etc/ansible/ansible.cfg
- 앤서블이 실행 시에 참조하는 거의 모든 옵션들이 들어가 있다.
- 앤서블 호스트 파일
- 위치 : /etc/ansible/hosts
- 앤서블을 통해서 명령이 실행되는 목적지 노드들의 정보를 담고 있다.
#위처럼 묶어놓게 된다면 명령어 역시 변경된다.
ansible test -m ping -k
#all은 /etc/ansible/hosts 파일에 있는 모든 값을 불러들여서 목적지 노드로 지정하는 설정값 이다.
앤서블을 실행할 때 주로 사용되는 옵션
옵션 | 풀 네임 | 내용 |
-i | --inventory-file | 적용될 노드들을 선택 |
-m | --module-name | 사용하는 모듈 |
-k | --ask-pass | 암호를 물어보도록 설정 |
--list-hosts | 적용되는 노드들을 확인 |
-i 사용
파일을 만들어 파일안에 적용될 노드들의 ip를 넣어주고 해당 파일을 기준으로 실행
echo "192.168.108.4" >> customized_inven.lst
echo "192.168.108.5" >> customized_inven.lst
#노드들의 일부 ip를 파일에 입력
ansible -i customized_inven.lst all -m ping -k
#생성한 customized_iven.lst 파일안에 있는 모든 노드들을 실행
ansible -i customized_inven.lst 192.168.108.4 -m ping -k
#customized_inven.lst 파일 안에 있는 특정 노드(192.168.108.4)만 실행
-k 사용
위에서도 사용해 봤지만 명령을 수행 하기 위해서는ssh 로그인이 필요한데 이때 암호를 입력 받도록 하는 옵션
--list hosts
앤서블을 사용하다 보면 어떤 노드들이 적용 되는지 확인 해야할 필요가 있다.
그런 경우 사용하는 옵션이 --list hosts이다.
ansible all -m ping -k --list-hosts
※ --list-hosts 옵션은 실제로 실행 되는것이 아니라 host 를 확인 하는 것이기 때문에 -k는 필수 사항이 아니다.
-m 사용
-m 뒤에 ping 이라는 모듈을 사용해서 앤서블 서버와 노드간의 통신 상태를 체크 한 것이다.
shell 모듈을 사용하여 모듈의 사용법에 대해 확인 하도록 하자
shell 이란 : 명령 구문을 전달하고 해당 결과를 다시 반환하는 모듈로써 -a 옵션으로 필요한 인자 값을 넣는다.
-a 는 uptime , cd , ls , df , free 와 같은 명령 구문이라고 이해 하면 된다.
간단하게 df - h 를 통해 디스크 사용량을 체크하고 free -h 를 통해서 메모리 사용량을 체크 해보자
ansible all -m shell -a "df -h" -k
ansible all -m shell -a "free -h" -k
※ ""는 모듈의 옵션을 사용하기 위해 사용된다.
예를 들어 ls 라는 명령어를 사용할 때는 ""가 없어도 되지만 ls -a 라는 명령어를 사용할 때는 ""로 묶어줘야 한다.
다양한 모듈의 사용
1. user 모듈
user 모듈은 사용자를 관리하는 모듈이다.
해당 모듈을 사용하면 사용자를 추가/삭제 및 관리하기가 유용하다.
즉 쉽게말해 ansible server를 통해 node들에게 사용자를 일괄적으로 추가 하는 모듈인 것이다.
ansible all -m user -a "name=choi" -k
#사용자 생성
ansible all -m user -a "name=choi state=absent" -k
#사용자 삭제
ansible all -m shell -a "tail -n 1 /etc/passwd" -k
#사용자 확인
2. 여려개의 패키지를 한가지 목적으로 사용
사용해볼 모듈 : yum(패키지를 설치) , copy(파일을 원격지로 복사) , service(서비스를 관리)
2-1 yum 을 사용하여 node들에게 일괄적으로 웹서버 설치
ansible all -m yum -a "name=httpd state=present" -k
#present = 설치 absent = 삭제
2-2 copy 를 사용하여 server에서 node로 파일을 전송
index.html 파일은 기존에 만들어 봤던 팬클럽 index를 사용 했다.
ansible all -m copy -a "src=index.html dest=/var/www/html" -k
#src : 보낼 파일의 위치와 이름
#dest : 받을 파일의 위치와 이름
ansible all -m service -a "name=httpd state=started" -k
#서비스 시작
ansible all -m shell -a "systemctl stop firewalld" -k
#방화벽 내리기
다음 진행을 위해 web 삭제
ansible all -m yum -a "name=httpd state=absent" -k