Ansible을 이용하여 Elastic Stack 설치
우연한 기회로 ansible 을 접하고 좋다고 느끼고 있었는데 해당 사항을 이용해야 하는 상황이 왔습니다.
요즘은 쿠버네티스 같은 툴이 있어서 소프트웨어를 설치함에 있어서 굉장히 편리해졌지만 실제 생활에서는 여전히 베어 메탈( bare metal ) 위에 소프트웨어를 설치해야 하는 경우가 부지기수다.
그러던 중 최근에 핫하게 이용되고 있는 elasticsearch 를 사용해야 하는 상황이 왔는데 elasticsearch 를 쿠버네티스 위에서 이용하는 경우 라이센스가 무척이나 비싸기에 베어 메탈에 설치하여 이용하기로 하였다.
우선 노드에 들어가서 하나 하나 설치하는 것은 비효율적이기에 ansible 을 이용하여서 설치하기로 한다.
https://www.ansible.com/overview/how-ansible-works
How Ansible Works | Ansible.com
Ansible is an IT orchestration engine that automates configuration management, application deployment and many other IT needs.
www.ansible.com
위 링크에 ansible 에 대한 대략적인 설명이 되어 있다, 한국어가 아닌것은 아쉽지만 그래도 알아두면 손해 볼것이 없는 도구이다.
정리하면
" 프로그램 설치를 도와주는 좋은 친구 "
정도로 이해하면 될 거 같다.
우선 ansible 을 사용하기 위해서 ssh-copy-id 를 통해 키를 복사해준다.
ssh-copy-id {username}@{ip} -p {port}
위와 같이 설치하고자 하는 노드에 일일이 추가해준다.
ssh-copy-id user@192.168.1.200 -p 22
ssh-copy-id user@192.168.1.201 -p 22
ssh-copy-id user@192.168.1.202 -p 22
위 코드는 예시이다.
이러한 것을 해주는 이유는 ansible 이 기본적으로 ssh 통신을 통해서 해당 소프트웨어를 노드에 설치하기 때문이다. \
이제 ansible 을 이용해서 소프트웨어를 설치하기 위해서 playbook 을 이용해야한다.
https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html
Intro to playbooks — Ansible Documentation
A playbook runs in order from top to bottom. Within each play, tasks also run in order from top to bottom. Playbooks with multiple ‘plays’ can orchestrate multi-machine deployments, running one play on your webservers, then another play on your databas
docs.ansible.com
위 글이 공식 문서이기는 하지만 너무 길어서 시간을 날때 짬짬이 확인하는게 좋을 거 같다.
https://digitalvarys.com/how-to-write-an-ansible-playbook/
How to Write an Ansible Playbook. - Ansible Tutorial - Digital Varys
Running ansible with Playbook is more powerful. This is the article about How to Write an Ansible Playbook with example code snippets.
digitalvarys.com
위 글에서 나오는 이미지를 보는게 보다 이해하기 쉬울 거 같다.
쉽게 정리하자면
inventory 는 내가 설치하고자 하는 노드의 정보 및 그러한 노드에 접근하기 위한 정보 그리고 playbook 은 설치 과정을 하나로 모아 둔것이라고 보면 된다.
다시 본론으로 들어와서 elastic stack 을 설치하기 위한 playbook 을 가지고 온다.
https://github.com/elastic/ansible-elasticsearch
GitHub - elastic/ansible-elasticsearch: Ansible playbook for Elasticsearch
Ansible playbook for Elasticsearch. Contribute to elastic/ansible-elasticsearch development by creating an account on GitHub.
github.com
elasticsearch 에서 공식 지원해주는 ansible playbook 이다. 글을 쓰는 현재 기점으로 최신 elasticsearch 도 지원해주고 있다.
많은 영어가 있지만 간추려서 본론으로 들어가면
git clone https://github.com/elastic/ansible-elasticsearch.git
cd ansible-elasticsearch
다운을 받아서 파일로 들어가서 설치해줄 호스트에 대해서 추가해준다.
touch hosts.yml
hosts.yml 의 내용은
all:
hosts:
node:
ansible_ssh_port: 22
ansible_host: 192.168.1.200
ansible_user: user
ansible_become: yes
ansible_sudo_pass: password
우선은 노드 한개로 설치하는 과정을 진행하겠다.
설치할 호스트를 정의했으니 playbook 을 가지고 온다.
playbook.yml
- name: Simple Example
hosts: localhost
roles:
- role: elastic.elasticsearch
vars:
es_version: 7.15.1
이제 이 둘을 조합하는 일만 남았다.
ansible-playbook -i hosts.yml playbook.yml
실제 노드에 올렸던 로그를 올리고자 하는데 아쉽게도 찍어서 올리지 못했다.
이후 systemctl status elasticsearch 를 하면 해당 소프트웨어가 돌아간다는 것을 확인할 수 있다.
향후 해당 멀티 노드에 설치할 때 상세하게 결과물을 보여줄 수 있도록 하겠다.