0411 Ansible 첫날

Ada·2022년 4월 11일
0

Playdata-Cloud

목록 보기
6/21

오늘은 Ansible 수업 첫날이였다.

한번에 여러 인프라의 설정을 바꿀 수 있는 신기한 시스템이라 흥미로웠는데 중간중간 에러가 나서 녹화본 보고 겨우 따라잡았다.

IaC(Infrastructure as Code-코드형 인프라)

인프라를 웹 인터페이스 및 대화형식의 도구를 사용해 수동적으로 인프라를 구성하는
것이 아닌, 시스템이 읽을 수 있는 인프라 정의 파일을 통해 인프라의 구성 관리 및
배포를 자동화 하는 것

Ansible

▪ 애플리케이션 및 IT 인프라를 자동화 할 수 있는 도구

  • Ansible을 사용하여 호스트를 구성하고, 소프트웨어를 배포하고, 지속적인 배포 및 다운 타임 없는 롤링 업데이트 등 고급 IT 작업은 조율할 수 있음
  • Ansible의 주요 목적은 간결성과 사용 용이성이며 또한 보안과 신뢰성을 바탕으로 OpenSSH를
    기본 전송 방법으로 사용
  • 컨트롤 로드는 리눅스나 유닉스 시스템만 가능
  • 관리 노드는 어떠한 시스템이든 상관없음
  • 시스템 관리에 특별한 에이전트가 필요하지 않지만 파이썬을 이용해서 해당 작업들을 행해야
    되기 때문에 컨트롤 로드든 관리 노드든 파이썬이 설치되어 있어야 함

Ansible 구성 파일

  • 기본 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

Ad-Hoc 명령

  • Ansible ad-hoc 명령은 하나 이상의 관리 노드에 단일 작업을 실행하는 임시 명령
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

오랜만에 타이핑을 많이 해서 기분이 좋았다.

사실 줌 렉이 많이 걸려서 따라치기가 좀 어려운데
그래도 역시 클릭보단 타이핑이 재밌다!

오늘은 복습을 열심히 했더니 굉장히 뿌듯하다~

매일 이럴 수 있도록 열심히 하자!

profile
백엔드 프로그래머

0개의 댓글