본문 바로가기
Infra Structure As a Code/Ansible

Ansible 배워보기 1탄 (Ansible 설치 및 기본 명령어 배워보기)

by 강시공 2023. 10. 16.

안녕하세요! 시공의 폭풍(클라우드) 속으로! 강시공 입니다.😊

 

이번 포스트에서는 Ansible에 대해 소개하려고 합니다.

 

1. Ansible이란 ?

Ansible이란, 자동화 및 구성 관리 도구이며, 시스템 관리자와 다수의 서버, 다수의 네트워크 장비, 다수의 애플리케이션을 쉽게 자동화하고 구성할 수 있게 해주는 오픈소스 도구입니다.

 

Python 기반이며, MGMT 관리 서버만, Target 서버들과 SSH 통신만 되면,

에이전트 설치 없이 시스템을 제어할 수 있는 특징을 가지고 있어, 손쉽게 사용 가능합니다.


2. Ansible 주요 특징

- Agentless

=> MGMT 관리 서버만 ansible 패키지를 설치하면 됩니다. 타겟 서버들과 SSH 통신만 열려 있으면 되며,

타겟 서버들은 에이전트 설치 없이 관리를 할 수 있게 됩니다.

 

- 인프라 자동화

=> 서버, 네트워크, 클라우드 인프라를 자동으로 구축하고 관리할 수 있습니다.

 

- 작업 자동화

=> 반복적인 작업, 스케줄링된 작업, 백업 및 모니터링과 같은 다양한 IT 작업을 자동화 가능합니다.

 

- 설정 관리

=> 서버 및 시스템의 구성을 일관되게 유지하고 변경 관리할 수 있습니다.

 

- 애플리케이션 배포

=> 애플리케이션 배포를 자동화하여 개발 및 테스트 환경에서 운영 환경으로 배포를 간소화 시킵니다.

 

- 다중 플랫폼 지원

=> 윈도우, 리눅스, 네트워크, 클라우드 플랫폼 등 다양한 환경에서 사용 가능합니다.

 

- 멱등성

=> 몇번을 실행하던지, 동일한 결과를 내는 걸 멱등성 이라고 합니다. 자동화 툴에서 가장 중요합니다.

 

- YAML 파일 형식의 간단한 스크립트로 인프라 및 애플리케이션 관리


3. Ansible 설치 방법

- 구성 환경 : CentOS 7.9 64 bit

1. epel-release 설치
# yum install -y epel-release

2. ansible 패키지 설치
# yum install -y ansible

3. ansible 버전 확인
# ansible --version

ansible 2.9.27
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Oct 14 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

 

 

3-1. 서버 SSH 키 값 교환

-- ansible mgmt 서버에서 진행 --
-- ansible mgmt 서버에서 진행 -- 

1. ssh 키 값 생성
# ssh-keygen -t rsa
모두 입력 없이 그냥 엔터

2. id_rsa.pub 값 메모장에 별도 복사
# cd ~/.ssh/
# vim id_rsa.pub


-- ansible target 서버에서 진행 --
-- ansible target 서버에서 진행 --


3.  ssh 키 값 생성
# ssh-keygen -t rsa
모두 입력 없이 그냥 엔터

4. target 서버 authorized_keys에 mgmt 서버 id_rsa.pub 값 넣기
# cd ~/.ssh/
# vim authorized_keys

-- ansible mgmt 서버에서 진행 --

5. ssh [target 서버 사설 IP]
6. 패스워드 없이 정상 접속되는지 확인

 

3-2. Ansible Inventory 설정

1. ansible 인벤토리에 관리 대상 서버 넣어주기

vi /etc/ansible/hosts

'''
생략

관리 서버 대상 사설 IP

# 172.16.0.[1..10] 으로 172.16.0.1 ~ 172.16.0.10 까지 서버를 지정할 수 있다.

# webservers 라는 그룹에서 webserver01, webserver02 Alias(별칭을 줌)
webservers:
	hosts:
    	webserver01:
        	ansible_host: 172.26.125.113
        webserver02:
        	ansible_host: 172.26.125.114

생략
'''

 

 

3-3. ansible 통신 상태 확인

ansible 모든 인벤토리 대상에 ping 보내기
모든 hosts / module에 ping, 패스워드를 통해 통신 확인

# ansible all -m ping

 

3-4. 기타

기본적으로 ansible 관련된 파일들은 아래 경로에 저장되어 있다.

- /etc/ansible/ansible.cfg


4-1. 특정 대상을 inventory 파일로 만들어서 제어하기

리눅스 파일에 호스트 사설 IP를 별도로 넣으면, 각 서버의 관리 대상을 관리할 수 있다.

예를들어, 아래 서버와 같이 one_inventory.lst 파일에 관리 서버 대상 (172.26.125.113) 가 있다면,

해당 관리 서버들만 제어를 수행하게 된다. 파일별로 인벤토리 가능한 셈

 

1. 특정 inventory 파일의 모든 대상 ping 날리기

[root@Ansible-MGMT ~]# ansible -i one_inventory.lst all -m ping -k

SSH password:

172.26.125.113 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}


2. 특정 inventory 파일의 내 특정 대상에 ping 날리기
[root@Ansible-MGMT ~]# ansible -i customized_inven.lst 172.26.125.113 -m ping -k

5. ansible 관리 서버에서 쉘 명령어 실행

1. 모든 서버의 디스크 사용량 조회
# ansible all -m shell -a "df -h" -k
=> # df -h를 수행한 결과와 똑같다.

2. 특정 서버 디렉터리 조회
# ansible -i one_inventory.lst 172.26.125.113 -m shell -a "ls -l /root" -k
=> 192.168.186.133 (was02 서버)의 root 디렉터리만 조홰해준다.

3. 모든 서버 root 계정 패스워드 만료일 조회
# ansible all -m shell -a "chage -l root" -k
=> 각 서버의 패스워드 만료일을 조회할 때 유용하다.

4. 패키지 설치
# ansible all -m yum -a "name=httpd state=present" -k
=> # yum install -y htttpd 수행과 동일.

5. 패키지 제거
# ansible all -m yum -a "name=httpd state=absent" -k

6. ansible all -m shell -a "yum install -y iftop" -k
=> 각 서버에 iftop 패키지를 설치해 준다

7. ansible 관리 서버에서 사용자 추가하는 방법
name = 사용자 명, state = presnet (추가), state = absent (제거)

- user01 사용자 추가
# ansible all -m user -a "name=user01 state=present" -k

- user01 사용자 제거
# ansible all -m user -a "name=user01 state=absent" -k