본문 바로가기

DevOps/Ansible

[Ansible] Ansible 실습 - 시스템 구성 및 인벤토리 설정

https://holywat2r.tistory.com/159

 

[Linux] Ansible 정의

앞서 다루었던 IaC의 종류중 하나인 Ansible을 다뤄보겠다. https://holywat2r.tistory.com/158 [Linux] IaC 개념 IaC개념 코드를 통한 인프라 환경 배포 및 관리 자동화 언어로 원하는 구성을 정의한다. 기존의..

holywat2r.tistory.com

# 앞선 Ansible 개념을 바탕으로 실습을 진행해보자


https://docs.ansible.com/

 

Ansible Documentation

Ansible Documentation An enterprise automation platform for the entire IT organization, no matter where you are in your automation journey

docs.ansible.com

# 해당 문서는 Ansible 공식 문서이다.

 

  • 패키지를 이용해서 엔진을 설치 (Ansible)
  • ssh키 생성 및 복사
  • 권한 상승 설정
  • /etc/hosts 파일 설정 (컨트롤러 노드에서 설정)
  • 권한 상승 설정 (sudo 설정, 호스트 노드에서 설정)

패키지 설치

  • 컨트롤러 노드와 호스트노드들을 준비한다 ( Controller, host1, host2..)
  • 컨트롤러 노드에 접속해서 패키지 설치
yum install centos-release-ansible-29.noarch -y
yum install -y ansible

# Ansible 엔진을 설치하기위해 ansible repo부터 설치해준 후 Ansible 엔진을 설치한다.

# 컨트롤러 노드 NAT IP : 10.0.2.10 host 1, 2, 3 ... : 10.0.2.21 ,22 ,23 으로 설정한다

 

  • 컨트롤러 노드에서 호스트 노드로 접속이 잘 되는지 확인해보자
ssh root@10.0.2.21

# 키 파일을 설정해서 비밀번호를 매번 입력하는 수고로움을 줄여보자.


키 설정

  • ssh-keygen 명령어를 이용해서 키를 생성하자
ssh-keygen
ssh-copy-id study@10.0.2.21

# 이 해당 과정을 host별로 수행해준다.

 

  • 이후 권한 상승을 설정하자
vi /etc/sudoers

# 해당 파일중 wheel의 부분을 참고할것이다.

 

  • 모든 작업들을 패스워드 없이 수행할 수 있도록 설정한다
vi /etc/sudoers.d/study
study	ALL=(ALL)	NOPASSWD: ALL
ssh-copy-id study@localhost

# 현재 시스템에도 설정을 한다. 로컬호스트의 study도 추가해주자

  • 반복문을 통해 정보를 전달해보자
for i in {21..24}; do scp /etc/sudoers.d/study root@10.0.2.$i:/etc/sudoers.d/ ; done

# for 문을 사용하여 10.0.2.21~10.0.2.24까지 해당 작업을 수행할 수 있다.

 

  • sudo 권한주기
ssh study@10.0.2.21 sudo id

Ansible의 인벤토리

  • 엔서블의 기본경로는 /etc/ansible 이다.
vi /etc/ansible/hosts

# Ansible host 지정의 규칙들이 포함되어있다.

이 파일은 기본 ansible 호스트 파일이다. ( 인벤토리 파일중에 기본파일이다)

# 으로 시작하면 주석이다
# 라인이 비어있는건 무시한다.
# 호스트를 선언할때 그룹단위로 묶어주고 싶으면 [헤더]를 붙여주면 된다.
# 호스트 네임 또는 ip주소 둘다 쓸 수 있다 
# 원하는 주소를 지정을 해서 관리할 대상들을 설정해주는 파일이다.

EX 1 : 그룹없이 관리대상들을 개별관리할 수 있다. ( 개별 호스트 )
# 호스트 이름만 나열
# green.example.com
# blue.example.com
# ip
# ip

EX 2 : [그룹이름]으로 그룹화 할 경우
그룹을 사용할 경우
# [웹 서버] ( 그룹 이름 )
# alpha.example.com
# beta.example.com
# ip
# ip
한번에 4개의 시스템을 관리할 수 있다.
중첩 그룹을 설정할수도 있다.

EX 3 : 패턴을 쓸 수 있게 한다. 위의 쉘스크립트 for문처럼
www[001:006].example.com 1번부터 6번까지
=>
www001.example.com
www002.example.com
www003.example.com
www004.example.com
www005.example.com
www006.example.com

Ansible 이용하여 인벤토리를 구성하기

  • Ansible의 컨트롤러 노드에서 현재 관리중인 호스트들을 확인해보자
ansible --list-hosts all

# 인벤토리를 구성하기 전이기 때문에 아직 대상이 없다고 나온다.

 

인벤토리 파일 생성해보기 1

  • 인벤토리 파일에 호스트들의 정보를 입력해보자
mkdir test_inventory
cd test_inventory
vi inventory
host1
10.0.2.22
host3.gurm.example.com
localhost
host4
  • 이후 컨트롤러 노드에서 관리중인 호스트 정보를 확인해보자
ansbile --list-hosts all -i inventory

# 관리 호스트의 기본 경로는 /etc/ansible/hosts 이므로 -i 를 통해 인벤토리를 재 지정해준다.

 

인벤토리 파일 생성해보기 2

  • 범위를 지정하는 방식으로 파일을 생성해보자
vi range
host[1:4]
10.0.2.2[10:20]

# 해당 명령어처럼 범위를 설정하여 host를 구성할 수 있다.

 

인벤토리 파일 생성해보기 3

  • 호스트들을 그룹화 하여 생성해보자.
vi group_inv
10.0.2.10

[web]
host1
host2

[db]
host3
host4

[linux]
host[1:4]

 

  • 이후 호스트를 확인해보자
ansible --list-hosts all -i group_inv

# 각각 그룹화를 시켰지만 중첩이 되는 호스트는 한번만 출력됨을 알 수 있다.

 

  • 각각의 그룹을 출력해보기
ansible --list-hosts host1 -i group_inv

ansible --list-hosts web -i group_inv

ansible --list-hosts db -i group_inv

ansible --list-hosts ungrouped -i group_inv

# 그룹화 되지 않은 목록들도 표시가 된다 (default가 ungrouped로 포함되어있다)

# 이렇게 그룹을 정의해 두면 시스템을 관리할 때 더 편하게 관리가 가능하다.

# Linux 라는 그룹을 chilren을 통해 그룹끼리 그룹화를 시킬 수 있다.

# 따라서 linux 그룹을 출력하면 db와 web이 출력 되는 것

# test라는 그룹에 host1 ~ 4 까지 추가해보자.

ansible --list-hosts 'web:&test' -i group_inv

# web 그룹과 test 그룹의 공통된 hosts를 출력한다.

ansible --list-hosts 'web:!test' -i group_inv

# 해당 명령어는 Web그룹에 속하되 test 그룹에 속하지 않는 것을 출력하는 것이다.

# 실수로 잘못 설정했기에 다시 설정해보았다.

 

# 아래와 같이 출력됨을 알 수 있다.

# ! 또는 & 기호는 : 와 함께 사용해야한다.

'DevOps > Ansible' 카테고리의 다른 글

[Ansible] Ansible 실습 - Playbook  (0) 2021.09.09
[Ansible] Ansible 실습 - AD-HOC와 모듈 사용법  (0) 2021.09.07
[Ansible] Ansible 실습 - 구성파일 설정  (0) 2021.09.07
[Ansible] Ansible 정의  (0) 2021.09.07
[Ansible] IaC 개념  (0) 2021.09.07