오늘은 Ansible 수업 첫날이였다.
한번에 여러 인프라의 설정을 바꿀 수 있는 신기한 시스템이라 흥미로웠는데 중간중간 에러가 나서 녹화본 보고 겨우 따라잡았다.
인프라를 웹 인터페이스 및 대화형식의 도구를 사용해 수동적으로 인프라를 구성하는
것이 아닌, 시스템이 읽을 수 있는 인프라 정의 파일을 통해 인프라의 구성 관리 및
배포를 자동화 하는 것
▪ 애플리케이션 및 IT 인프라를 자동화 할 수 있는 도구
기본 Ansible 구성 파일의 위치는 /etc/ansible/ansible.cfg
Ansible 구성 파일 우선 순위
① ANSIBLE_CONFIG 환경 변수
② 현재 디렉토리의 ansible.cfg
③ 홈 디렉토리의 ~/.ansible.cfg
④ /etc/ansible/ansible.cfg
▪ 우선 순위가 높은 파일에 정의된 값이 이전 정의된 값보다 우선함
Ansible 작동 방식 제어 우선 순위
▪ Ansible 작동 방식을 제어하기 위해 Ansible 구성 파일 외에도 ansible 명령의 옵션,
플레이북 키워드, 변수를 이용해 동작을 제어할 수 있음
① -e 옵션에 지정한 변수
② 변수
③ 플레이북 키워드
④ 명령의 옵션
⑤ Ansible 구성 파일
cd ~
ansible-config view
echo "this is .ansible.cfg" > ~/.ansible.cfg
ansible-config view
mkdir ansitest
cd ansitest
echo "this is ansitest/ansible.cfg" > ansible.cfg
ansible-config view
결과 : 현재 디렉토리의 구성 파일이 더 높으므로
'this is ansitest/ansible.cfg\n' 출력
▪ Ansible은 인프라에 존재하는 여러 호스트를 관리함
▪ 호스트의 목록 또는 그룹을 지정한 인벤토리 파일이 필요하며 인벤토리가 정의되면
패턴을 사용하여 Ansible을 실행할 노드 또는 그룹을 선택함
▪ 기본 인벤토리 파일은 /etc/ansible/hosts 이며, -i 옵션을 사용하여 다른 인벤토리
파일을 지정할 수 있음
ansible all --list-hosts -i inventory
( inventory 파일에 그룹을 만들어놨을 때)
sudo vi /etc/ansible/hosts
여기서 맨 아래에 ansi-master1 입력시
ansible all --list-hosts
결과창에 ansi-master1 가 호스트로 나온다.
vi ansible.cfg
[default]
inventory = ~vagrant/ansitest/inventory
remote_user= vagrant
ask_pass= false
[privilege_escalation]
become= false
become_method= sudo
become_user= root
become_ask_pass= false
vi /etc/ansible/ansible.cfg
여기서 inventory 앞의 #를 삭제해주고 경로를
/home/vagrant/ansitest/inventory.ini
로 설정해준다.
ansible all --list-hosts
출력 결과 만들어둔 인벤토리 안의 노드들이 나온다.
패턴
▪ Ad-hoc 명령 또는 플레이북을 실행할 때 작업을 실행할 관리 노드 또는 그룹을
지정할 때 패턴을 이용해 관리 노드를 선택
모든 호스트 all 또는 * (192.0.*)
단일 호스트 host1
여러 호스트 host1:host2 또는 host1, host2
단일 그룹 webservers
여러 그룹 webservers:dbservers
제외 그룹 webservers:!west
교차 그룹 webservers:&east
▪ 모듈은 Ansible을 이용해 관리 노드에 작업을 실행하는 핵심 요소
▪ 모듈은 Python 코드로 이루어져 있으며, /usr/lib/python3/dist-packages/ansible
경로에 있음.
▪ 모듈 목록 확인
$ ansible-doc -l
ansible [pattern] -m [module] -a "[module options]"
-m: 모듈 이름 지정(기본값: command)
-a: 모듈의 옵션/아규먼트
ansible databases -a "/sbin/reboot" -u username -b -K
파일 복사
ansible ansi-node1 -m copy -a "src=/home/vagrant/ansitest/masterfile dest=/home/vagrant/m-file"
ansible -b-m copy -a "src=/home/vagrant/ansitest/masterfile dest=/home/vagrant/m-file1"
-> 모든 노드들에 m-file1 생성
파일 권한 변경
ansible webservers -m file -a "dest=/srv/foo/a.txt mode=600"
파일 소유권 변경
ansible webservers -m file -a "dest=/path/to/c mode=755 owner=mdehaan
group=mdehaan state=directory"
파일 삭제
ansible webservers -m file -a "dest=/path/to/c state=absent"
사용자 생성
ansible ansi-node2 -m user -a "name=user01 password=[password]"
서비스 시작 명령어는 apt를 업데이트 후 실행해야 한다.
ansible ansi-node1 -m apt -a " update_cashe=yes" -b
ansible ansi-node1 -m apt -a "name=apache2 state=present" -b
ansible ansi-node1 -m service -a "name=apache2 state=started" -b
오랜만에 타이핑을 많이 해서 기분이 좋았다.
사실 줌 렉이 많이 걸려서 따라치기가 좀 어려운데
그래도 역시 클릭보단 타이핑이 재밌다!
오늘은 복습을 열심히 했더니 굉장히 뿌듯하다~
매일 이럴 수 있도록 열심히 하자!