Study Memory Work
[Ansible] Ansible이란? 본문
Ansible이란 ?
- 여러 서버를 효율적으로 관리하는 환경 구성 자동화 도구
- Infrastructure As a Code : 환경의 배포와 구성을 규격화된 코드로 정의해 사용하는 것. 인프라 상태를 코드로 선언하고 이를 모든 서버에 배포하는 것. ( 특정 환경을 동일하게 유지할 수 있다는 장점이 있다. )
Ansible 역할
- 환경 배포, 서버/클러스터의 체계적인 관리, 확장 가능한 모듈 사용 등
Ansible 구조
- 서버/클라이언트 구조로 되어있다.
- 서버는 제어할 호스트(클라이언트) 정보와, 어떤 명령을 내릴 것인 지 정의된 파일을 가지고 있다.
Ansible 설치
- 서버 노드에는 Ansible 설치
apt install ansible
- 클라이언트 노드에는 Agent를 별도로 설치하지 않고, SSH 데몬이 Agent역할을 대신한다.
즉, SSH 접속이 가능한 모든 호스트는 Ansible 제어 대상이 될 수 있다. - Ansible 사용 조건
1. 각 서버/클라이언트 노드들은 SSH 데본이 실행중이며,
2. SHH로 접속이 가능해야 하며,
3. 서버와 클라이언트는 호스트 전용 브릿지를 이용해 상호 통신이 가능하다.
Ansible 구성요소 : Inventory, Playbook, Module
1) Inventory (where 어디에서)
- 제어대상 서버의 목록을 정의하는 파일 ( host.ini)
- 구성 :
- 호스트명 : ansible에서 호스트를 제어할 때 사용하기 위해 고유하게 지정하는 이름.
- IP(Port) : 호스트의 IP
- User : 접근을 위한 호스트 계정명 - 여러 호스트를 구성할 때, 호스트를 그룹화할 수도 있다.
- host.ini 예)
# 각 호스트 3개를 정의한 것.
# 띄어쓰기를 구분자로 호스트명, ansible_host, ansible_user 로 나뉨
agent_1 ansible_host=192.168.50.145 ansible_user=ubuntu
agent_2 ansible_host=192.168.50.177 ansible_user=ubuntu
ls_1 ansible_host=192.168.50.38 ansible_user=ubuntu
# '[그룹명]'을 이용하여 위 정의된 호스트를 그룹화 한 것
[agents]
agent_1
agent_2
[logstash]
ls_1
2) Playbook (what 무엇을)
- 제어 대상 호스트들이 할 일을 정의하는 파일로 Yaml 형식의 파일이다. (.yml)
- Ansible을 사용한다는 것은 곧 Playbook을 사용한다는 말과 같다.
- Inventory + Playbook 조합으로 어디에서 무엇을 할지 정의하는 것이 Ansible의 핵심이다.
- playbook.yml 예)
- name: metricbeat # 플레이북 명
hosts: agents # 제어대상 호스트 or 호스트 그룹
become: true # root권한으로 실행할 지 여부
vars: # 반복해서 쓰이는 것 변수화
beat_name: metricbeat
beat_dir: metricbeat-6.5.0-linux-x86_64
beat_dir_path: "./{{beat_dir}}"
tasks: # 실제 작업 기술
- name: download beat tar file
get_url:
url: "https://artifacts.elastic.co/downloads/beats/{{beat_name}}/{{beat_dir}}.tar.gz"
dest: ./
- name: unarchive beat tar file
unarchive:
src: "./{{beat_dir}}.tar.gz"
dest: ./
remote_src: True
3) Module (How 어떻게)
- Playbook 내에 tasks 부분에 들어가는 액션들을 모듈이라 한다.
- 500개 정도의 모듈을 제공하고 있다.
- Module 예)
- name: metricbeat
hosts: agents
become: true
vars:
beat_name: metricbeat
beat_dir: metricbeat-6.5.0-linux-x86_64
beat_dir_path: "./{{beat_dir}}"
tasks:
- name: download beat tar file
get_url: # Web에서 다운받는 모듈
url: "https://artifacts.elastic.co/downloads/beat..." # get_url모듈의 하위 옵션들
dest: ./
- name: unarchive beat tar file
unarchive: # 압축을 푸는 모듈
src: "./{{beat_dir}}.tar.gz" # unarchive모듈의 하위 옵션들
dest: ./
remote_src: True
'Data' 카테고리의 다른 글
[Kafka] kafka 실행 오류 (Unexpected exception, exiting abnormally (org.apache.zookeeper.server.ZooKeeperServerMain)java.net.BindException: Address already in use) (0) | 2023.05.25 |
---|---|
[Netapp] Netapp을 통한 Metric 수집 리서치 (0) | 2023.03.31 |
[SSH] VsCode 'Remote - SSH' 를 통해 원격 접속하기 (0) | 2022.12.19 |
Metricbeat 설치 / 실행 (0) | 2022.12.07 |
Kafka 설치 / Kafka와 Logstash 연동하기 (0) | 2022.10.06 |