본문 바로가기

A101[1기]

Ansible 스터디 1주차 엔서블 기본사용

스터디를 위한 테스트 환경 생성

 

생성되는 vm에 기본적으로 추가되는 계정과 비밀번호 또한 알고있다는 가정하에 설정 시작.

 

인벤토리를 활용한 제어노드 지정

 

계정 : centos

비밀번호 : passed

해당 계정은 sudo 권한을 가지고있음

 

호스트들을 그룹화하여 각 그룹에 대한 변수를 다르게 지정해줄 수 있어 체계적으로 관리 가능함.

호스트가 늘어나 한 파일에서 관리가 어려워지면 파일을 분리하여 관리해줄 수 있음.

 

호스트만 정의해주고 처음으로 ping 모듈을 통하여 테스트 해보면 제어노드의 계정 그대로 ssh 접속을 시도하고 있고 key checking을 하는것을 볼 수 있음.

 

 

아래와 같이 그룹에 대한 변수를 지정해주어  key checking을 해제해줄 수 있고 원하는 계정을 사용가능함.

또한 모든 그룹이나 그룹 내에서 공통적으로 사용할 변수를 지정하여주고 변수 우선순위를 활용하여 같은 이름의 변수를 호스트마다 다른 값을 넣어줄 수 있음.

 

ansible_user ansible_password 변수를 사용하여 제어노드에서 사용할 user와 password를 지정.

host_key_checking 변수를 사용하여 key checking을 해제.

 

다시 ping모듈을 사용하여 테스트해보면 정상적으로 결과를 받아오는 것을 확인할수 있음.

 

Ansible ad-hoc sudo 권한으로 사용

 

운영중인 서버의 설정을 바꾸기위해 전체나 특정 그룹의 서버에 한 두줄짜리 명령어만 실행이 필요한 경우가 종종있는데, 그때는 ansible ad-hoc을 활용하면 편리함.

 

패키지 설치 및 서버들을 세팅하기 위해서 특정 명령어를 실행하기 위해 sudo 권한을 가지고 명령어를 실행해야 하는 경우가 많은데 기본설정을 사용하면 처음에 설정 준 유저의 권한으로 명령어를 실행하기 때문에 모든 명령어를 실행할 수 있진 않음.

 

 

ansoble_become 변수를 사용허여 기본적으로 sudo 권한을 주고 명령어를 실행하여 주거나 특정 그룹이나 특정 명령에만 권한을 부여할 수 있음.

또한 anaible_become_method를 통하여 권한을 부여하는 방법또한 변경 가능

다음중 하나를 선택할 수 있음.

sudo | su | pbrun | pfexec | doas | dzdo | ksu

 

이제 permission deny가 되지않고 정상적으로 명령어가 실행되는것이 확인됨

 

 

 

Gathering Facts 캐싱

ansible playbook 실행 시 gathering facts를 비활성화 하지 않으면 제어노드는 관리 노드의 facts를 수집하기 시작함.

facts에는 관리 노드의 ip, timezone 등과 같은 다양한 시스템정보를 수집한 정보임.

 

 

운영중 ansible을 활용할 떄 해당 관리노드의 정보가 필요한 경우도 있어 facts 수집을 끄지않고 사용할 때가 있음.

 

 

 

 

하지만 운영중인 호스트나 VM수가 많으면 gathering facts 단계에서 시간이 굉장히 오래걸릴 수 있음.

이떄를 위해 facts를 파일이나 db에 캐싱하여 활용할 수 있음.

 

playbook의 위치에 ansible.cfg 파일을 생성하여 facts관련 설정을 할 수 있음.

 

ansible.cfg

[defaults]
gathering = smart
fact_caching = jsonfile
fact_caching_connection = facts

 

 

설정 후 ansible playbook을 실행하면 해당 디렉토리에 각 관리노드별 facts가 파일로 캐싱됨.