카테고리 없음

앤서블 기초1 맛보기

됵이 2022. 10. 28. 16:40

학습을 하기 위한 조건 / 네트워크 구성

  • 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 로그인이 필요한데 이때 암호를 입력 받도록 하는 옵션

-k를 입력 하지 않았을때
-k 를 입력 했을 경우

--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