안녕하세요! 시공의 폭풍(클라우드) 속으로! 강시공 입니다.😊
이번 포스트에서는 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
'Infra Structure As a Code > Ansible' 카테고리의 다른 글
Ansible 배워보기 3탄 (Ansible Playbook 개념) - 작성 중 (0) | 2023.10.17 |
---|---|
Ansible 배워보기 2탄 (root 로그인이 불가 환경에서 Ansible 제어 방법) (0) | 2023.10.17 |