본문 바로가기
Ansible

Ansible 개념 / 설치

by Nirah 2023. 1. 5.

 

공식문서

https://docs.ansible.com/ansible/latest/getting_started/index.html

 

Getting started with Ansible — Ansible Documentation

© Copyright Ansible project contributors. Last updated on Dec 14, 2022.

docs.ansible.com

 

Ansible의 배경

기존 리눅스에서 동일한 환경을 구성하기 위해 Bash 쉘 스크립트에 패키지의 설치, 설정파일 수정등을 나열하여

이를 실행하는 것이 일반적이었다.

그러나 IT의 기술력이 진보함에 따라 인프라 환경도 기존 Data center에서 cloud 환경으로 변화되고 있으며,

한명의 관리자(Admin)가 관리해야하는 서버의 숫자가 증가하게 되었다.

따라서 클러스터에 존재하는 많은 서버들에 동시에, 동일한 화경을 배포해야하는 상황이 발생하게 되었고,

Bash 쉘 스크립트의 한계점을 갖게 되었다.

서버의 자동화를 도와주는  Infrastructure as a code 개념의 엔서블의 필요해졌다.

 

 

 

 

Ansible의 특징

 

1. no agent

open SSH & Clinet 패키지만 필요.

관리노드쪽에서 제어노드로의 연결을 매개하는 에이전트 설치할 필요 없음.

 

2. 멱등성

반복 실행에 대한 동일 결과 보장. 멱등성은 항상 동일한 작업과 결과를 보장하여

패키지를 실행할 때마다 서버 환경과 기존 패키지 설치 상황에 영향을 받지 않음

수정된 부분이 있다면 그 부분만 새롭게 반영 된다는 것

 

3. 다양한 모듈

필요에 따라 적용할 모듈이 다양함

예를 들어 ping 이라는 모듈을 호출 ansible all -m ping

https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html

 

 

 

 

 

 

Ansible 사용의 3가지 요소

앤서블은 크게 3가지인 인벤토리, 플레이북, 모듈을 정의하여 사용한다.

 

1. 인벤토리(inventory) 는 어디서 수행 할 것인지?

인벤토리는 앤서블에 의해 제어될 대상을 정의합니다. 일반적으로 hosts.ini 파일에 정의해 사용 하며,

여러 서버들의 SSH접근 iP, 포트, 리눅스 사용자 와 같은 접속 정보를 정의한다.

 

2. 플레이북(Playbook) 은 무엇을 수행 할 것인지?

플레이북은 인벤토리 파일에서 정의한 대상들이 무엇을 수행할 것인지 정의하는 역할을하며, yaml 포맷으로 설정한다.

단독으로 사용되는 것이 아닌 인벤터리와 플레이북의 조합으로 같이 사용한다.

ansible ~ 명령어 이용 : Ad hook 방법

yaml ~ 파일 이용 : playbook 방법

 

3. 모듈(Module)은 어떻게 수행할 것 인지?

모듈은 플레이북에서 task가 어떻게 수행될지를 정의하는 요소다.

앤서블은 Python Code를 호출하여 실행하기 때문에 Python이 필수적으로 필요하며,

실제로 앤서블을 설치해보면 다양한 모듈이 같이 설치되는 것을 볼 수가 있다.

예를 들어 yum 명령어를 통해 패키지를 설치할때 yum 모듈을 사용하면 되면

플레이북에서 yum 부분이 yum 모듈을 정의하고 이를 사용하겠다는 의미다.

 

 

 

 

 

 

Ansible 구조

제어 노드에서 ansible 명령으로 관리 노드를 제어한다.

제어노드는 인벤토리를 생성하여 관리 노드들을 목록화한다.

 

 

 

 

 

제어 노드와 관리 노드 설정

제어 노드에 관리 노드들을 등록하고 SSH 인증을 수립하는 과정이다.

 

 

우선 편의상 root계정으로 모든 명령을 실행하면 실제 회사에서 쓰는 보안적 방식과 차이가 나기도 하고

권한 문제가 생기는 것을 테스트해볼 수 없기때문에 관리자계정을 따로 생성하여 진행하겠다.

 

제어 노드에서 설정한다.

useradd admin

passwd admin

gpasswd -a admin wheel

(wheel은 sudo에 대한 특별한 권한을 줄 계정을 넣는 기본그룹이다.)

 

 

visudo

:set nu

107 line 주석 풀기

wheel : 모든 커맨드를 사용가능한 권한 (sudo 를 사용할 수 있음)을 활성화

참고로 110번 라인 활성화하면 sudo 쓸 때 패스워드 안 물어보기 때문에 편의상 설정해도 좋다.

 

id admin

 

ssh를 수립하기 위해서 admin계정으로 접속하여 rsa 키를 생성한다.

su - admin

ssh-keygen -t rsa

 

ls -a

.ssh 폴더가 만들어져있는 것이 보인다.

ls -a .ssh

rsa 키가 생성 된게 보인다.

 

관리 노드들에서 설정한다.

관리 노드가 될 node 1~3 모두 user admin 계정을 생성해준다.

그리고  admin에 wheel 권한도 추가해준다. gpasswd -a admin wheel

후에 -u admin으로 일괄 root권한을 부여받아 쓰게 할 것이기 때문이다.

 

제어 노드 쪽에서 아까 만든 rsa key를 각 관리 노드로 전송

ssh-copy-id -i .ssh/id_rsa.pub admin@node1

ssh-copy-id -i .ssh/id_rsa.pub admin@node2

ssh-copy-id -i .ssh/id_rsa.pub admin@node3

 

ssh 접속이 잘 되는지 확인해본다.

ssh admin@node1

ssh admin@node2

ssh admin@node3

 

root로 계정을 다시 로그인 하려면 (exit말고)

sudo -i

= sudo - root

 

 

 

 

 

ansible 설치

 

확장 패키지 설치

sudo yum -y install epel-release

 

ansible 패키지 설치 돼있나 확인 (설치 안돼있다)

sudo yum list install ansible

 

ansible 설치

sudo yum -y install ansible

 

python3 설치

sudo yum -y install python3

 

앤시블 설치 및 버전 확인

ansible --version

config 파일 위치를 확인할 수 있다 : /etc/ansible/ansible.cfg

 

ls -a

.ansible 디렉터리가 생겼다.

 

ls -la /etc/ansible/

 

자주 사용할 디렉토리이므로 편의상 심볼릭 링크를 설정하여 /etc/ansible/와 /ansible 를 연결해두자.

sudo ln -s /etc/ansible/ /ansible

cd /ansible

 

 

관리 노드들을 설정해보자.

제어 노드가 관리해줄 다른 노드들의 주소를 hosts 파일에 정의하고, 관리 노드들 중 일부를 그룹화하여 명명할 수 있다.

 

sudo vi hosts

 

192.168.108.4 ~ 6 이 관리를 받을 관리 노드의 주소들이고 이미 앞서 ssh 통신을 수립했었다.특별히 webservers라는 그룹을 만들어 이 노드들을 통칭해보겠다.

 

테스트로 Ad hook 방법으로 hosts 인벤토리의 webservers 그룹원들에게 ping 모듈을 사용해보겠다.

ansible webservers -i hosts -m ping

success : 구성원 3개의 노드 모두 ping 통신이 잘 되는 것을 알 수 있다.

 

ansible ~ 명령어 이용 : Ad hook 방법

yaml ~ 파일 이용 : playbook 방법

 

 

 

※ 참고로 ip 주소를 통한 관리 노드 등록이 아닌 이름 기반으로 관리 노드를 지명하려면 아래 파일에 등록을 해줘야 한다.

cat /etc/hosts

위와 같이 ip와 이름을 잘 연결지어줬다면 관리 노드 등록 파일에서도 이름으로 등록해줄 수 있다.

sudo vi hosts

 

ip가 아닌 /etc/hosts 파일 기반으로 이름으로 통신이 됨

'Ansible' 카테고리의 다른 글

Ansible-Playbook  (0) 2023.01.09
Ansible-Vault  (0) 2023.01.09
Ansible-Console  (0) 2023.01.09
Ansible 명령어 실습  (0) 2023.01.06
미니프로젝트- awx 설치  (0) 2023.01.05