앤서블을 어떻게 이용할까?
앤서블 활용
앤서블을 어떻게 이용할까?
레드헷 계열에 서버를 쉽게 빠르게 1000개라도 금방 구축할수있는 코드를 만들수있다.
앤서블은 항상 똑같은 일관성과 유연하면서도 확장성을 가지고있는 구성이 가능하게 한다.
레드헷(Centos) 에
MySQL, Oracle같은 DBMS에 스키마까지 전부다 생성해줄수있고,
WEB, WAS 등을 설치할수있으며,
심지어 파일까지 여러 서버에 쉽게 배포 가능하다!
리눅스로 명령어를 주는건 모두 가능하다.
즉, 서버를 구성하고 띄우는것까지 모두 코드화 할 수 있는것.
먼저는 우리 VM을 받아 구축하는게 코드로 이루어 질수있으며,
나아가 서버설치를 진행할때 레드헷 계열에 경우 앤서블을 설치하여 쉽게 코드를 실행시켜 구성해줄수도 있을것이다.
(Yum을 자유롭게 사용하고, 보안에 걸리지 않는 한)
앤서블의 대해
1. 앤서블은 Master / slave 구조이다.
서버가 되는 놈이 있고, 그에 딸린 클라이언트들이 존재한다.
서버가 되는놈을 컨트롤러, 에이전트, 마스터 등으로 부를수 있다.
서버 hosts파일에 명시된 애들에게 접근하여 모두 똑같이 혹은 정해진대로 다르게 한번에 설치 명령을 날려주는 방식으로 진행된다. 당연히 root권한까지 가져야하므로, ssh 키를 만들어 사전에 Master에게 전달해줘야 들어와서 작업할수 있다.
2. LAMP 기초번들
LAMP (램프)는 리눅스, 아파치, Mysql, Php의 첫알파벳으로 대표적인 래거시 환경인데, 쉽게 구축가능한 예시문이 나뒹군다.
3. CLI vs PlayBook
이 둘은 iac 를 위한 앤서블 실행 방식으로 각각 다르게 작동한다.
CLI는 클라인언트에 직접 명령어들을 날려 구성하는 방식
PlayBook은 yaml형식으로 미리 코드를 작성하여 순차 실행하는 방식
CLI 방식으로 앤서블을 동작시켜보고 익숙해지면, PlayBook으로 인프라를 구성하도록 짜보자.
CLI 를 통해 진행했을 때, 패키지 설치 -> 설정 -> 연동 순으로 진행해야하지만,
PlayBook은 형식에 맞게 명시만 잘해준다면, 이런 절차를 현저하게 줄일수 있다.
참조
여기가 찐으로 설명도 잘해두었고 똑부러지게 이해된다.
LAMP구성을 따라하다보면 익숙해질것이고, 이후 발걸음을 더 해갈수 있을것같다.
free-direction.tistory.com/entry/Ansible-%EB%A1%9C-LAMP-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0
참조
여기가 찐으로 설명도 잘해두었고 똑부러지게 이해된다.
LAMP구성을 따라하다보면 익숙해질것이고, 이후 발걸음을 더 해갈수 있을것같다.
free-direction.tistory.com/entry/Ansible-%EB%A1%9C-LAMP-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0
앤서블 구성하기
1. 앤서블 설치
먼저 마스터가되는 서버에 앤서블을 yum으로 설치한다. (epel-repo가 있어야 함)
# repo 리스트에서 epel/x86_64 존재하는지 확인
> sudo yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.kakao.com
* epel: ftp.jaist.ac.jp
* extras: mirror.kakao.com
* updates: mirror.kakao.com
repo id repo name status
base/7/x86_64 CentOS-7 - Base 10,072
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 13,567
extras/7/x86_64 CentOS-7 - Extras 463
updates/7/x86_64 CentOS-7 - Updates 1,901
repolist: 26,003
# epel 추가하기
> sudo yum install -y epel-release
# 앤서블 설치
> sudo yum install -y ansible
2. SSH Key 생성 , 전달
Ansible은 SSH 접속을 기반으로 원격 서버들에게 명령을 전달합니다.
따라서 Controller 서버와 원격 서버간 SSH key가 공유되어야 합니다.
Controller 서버에서 모든 작업을 완료할 수 있습니다.
Controller 서버에서 ssh key를 하나 생성합니다.
$ ssh-keygen
이제 생성된 key를 원격 서버에 복사 합니다.
중간에 원격 서버의 계정 비밀번호를 입력하셔야 합니다.
$ ssh-copy-id [원격서버계정ID]@[원격서버IP]
정상적으로 ssh key가 복사되었다면,
controller 서버에서 원격 서버로 ssh 접속을 시도할 때,
비밀번호 입력없이 바로 접속이 되어야 합니다.
확인해볼까요?
$ ssh [원격서버계정ID]@[원격서버IP]
3. 호스트 파일 설정
호스트파일, 인벤토리 파일이라하는 /etc/ansible/hosts 을 작성하여 인프라를 구성할 목적지 PC목록을 작성합니다.
인벤토리 목록에 있는 서버들로 접속이 정상적으로 이루어지는지를 확인합니다.
ansible all -m ping
4. Ansible 명령
여기서는 간단한 기능을 확인하기 위해 플레이북이 아니라,
한 줄 한 줄 명령줄을 입력해보겠습니다.
Ansible 명령 구조는 아래와 같습니다.
$ ansible [host 또는 host그룹] options
[host 또는 host그룹]에 ansible 명령을 전달할 원격 서버들을 설정합니다.
일반적으로 'all' 을 사용하면 인벤토리에 적혀있는 모든 원격 서버에 명령을 전달합니다.
가장 많이 사용되는 옵션은 '-m' 옵션으로,
ansible에서 실행할 모듈을 불러오는 옵션입니다.
모듈마다 필요한 인자값들이 다르니 그때그때 확인하셔야 합니다.
저희는 Controller 서버에 test.txt라는 파일을 만들어두고,
이 파일을 ansible 을 통해 원격 서버에 복사해보겠습니다.
아래 명령으로 수행할 수 있습니다.
$ ansible all -m copy -a "src=~/test.txt dest=~/test.txt"
host 값에는 all을 넣어 인벤토리에 있는 모든 원격 서버에 명령을 전달하게끔 했고,
copy라는 모듈을 불러와서 파일 복사 명령을 수행하도록 했습니다.
'-a' 옵션은 copy 모듈에 필요한 인자값을 전달하는 옵션으로, src file경로와 dest file 경로를 전달해주었습니다.
Controller 서버에서 위 명령을 수행하면 아래와 같은 화면을 보실 수 있습니다.
이제 원격서버에 test.txt 파일이 잘 복사 되었나 볼까요?
네, test.txt 파일이 보이네요. 잘 복사 되었습니다.