소프트웨어 프로비저닝, 구성 관리, 애플리케이션 전개 도구인 Ansible에 대해 알아봅니다.
여러 개의 소프트웨어를 배포, 업데이트, 오케스트레이션이 어떻게 가능한지 알아봅니다.
목표
- Ansible에 대해 알아봅니다.
- Ansible의 구성요소에 대해 이해합니다.
- Ansible 예제 코드에 대해 알아봅니다.
Ansible이란
Ansible이란 Python으로 작성된 IT 자동화 소프트웨어 애플리케이션입니다. 애플리케이션을 배포하고 업데이트를 지원하기 위해 시스템을 구성합니다. 나아가 소프트웨어를 배포하고 복잡한 워크플로를 오케스트레이션할 수 있습니다.
- 인프라 관리를 코드 기반으로 자동화하는 도구라고 생각하시면 됩니다.
- Infrastructure as Code (IaC) 와 같은 IT 인프라를 코드 기반으로 자동 설치, 구축, 프로비저닝 하는 프로세스를 말합니다.
- Ansible은 1년에 두 번 주요 릴리즈됩니다.
Bash 쉘 스크립트대신 엔서블
기존 리눅스에서 동일한 환경을 구성하기 위해 쉘 스크립트에 패키지 설치, 설정파일 수정 등 명령어를 나열하여 실행하는 것이 일반적이었습니다.
여러 기술이 등장하고 진보함에 따라 인프라 환경도 데이터 중심에서 클라우드 환경으로 변화되었고, 이는 한명의 관리자가 관리해야 하는 서버의 숫자가 증가하게 되었습니다.
[출처 : https://www.theregister.com/2012/03/26/opscode_funding_chef_momentum/]
따라서 클러스터에 존재하는 많은 서버들이 동시에 동일한 환경을 배포해야 하는 상황이 발생하게 되었고, 쉘 스크립트의 한계점을 가지게 되었습니다.
Ansible 특징
Ansible의 특징을 알기전에 기존 IaC 솔루션들에 대한 이해가 필요합니다.
기존 IaC의 솔루션(Chef/Puppet
)은 원격 서버에 에이전트를 설치하여 Controller 서버와 원격 서버에 설치된 Agent들이 명령을 주고 받는 방식으로 동작했습니다.
Ansible은 SSH프로토콜을 기반으로 원격 서버에 명령을 전달하기 때문에 Agent가 필요하지 않습니다.
- Ansible을 agentless, Chef/Puppet을 agent-based라고 칭합니다.
Agent를 설치하지 않는 것의 장점은 다음과 같습니다.
- 설치 및 설정의 간소화 : Ansible을 사용하면 원격 시스템에 Agent를 설치하고 구성해야 하는 추가 작업이 존재하지 않으므로 구성 관리 환경을 빠르게 구축할 수 있습니다.
- 확장성 : Agent를 설치하지 않아도 되므로 인프라의 규모가 확장됨에 따라 유연하게 대처가 가능합니다.
- 호환성 : Ansible은 다양한 운영 체제와 플랫폼을 지원하므로, 에이전트를 설치하는 것과는 달리 다양한 환경에서 작동할 수 있습니다.
무조건 좋은가?
🔥 위의 장점들은 에이전트를 설치하지 않는 접근 방식인 Ansible의 특징입니다. 그러나 사용 사례와 환경에 따라 기존의 IaC솔루션인 Chef와 Puppet과 같은 에이전트 기반 도구가 더 적합한 경우가 있을 수 있으니, 구체적인 요구 사항과 상황을 고려에 도구를 선택하는 것이 중요합니다.
ex) 복잡한 인프라 구성이 필요할 때 Chef와 Puppet을 사용하는 것이 적절합니다. Ansible은 설치 와 설정의 간소화의 이점이 존재하지만 복잡한 인프라를 구성하기에는 유연하지 않습니다.
Ansible 요소
[출처 : https://static.javatpoint.com/tutorial/ansible/images/ansible-architecture.png]
엔서블의 구성요소는 크게 아래와 같습니다.
Inventory
: Ansible이 관리할 호스트 및 그룹을 정의하는 파일 또는 인벤토리 서버입니다. hosts.ini 파일에 정의해 사용하며, 여러 서버들의 SSH접근 IP, 포트, 사용자의 접속 정보등을 정의합니다.Modules
: Ansible에서 제공하는 작업 단위입니다. 모듈은 시스템 상태를 변경하거나 작업을 수행하는 데 사용됩니다.Playbooks
: 플레이북은 작업을 수행하기 위한 정의와 순서를 기술하는 YAML 형식의 파일입니다. 단독으로 사용되는 것이 아닌 인벤토리와 함께 사용합니다.Roles
: 롤은 여러 플레이북을 조직화하여 재사용 가능한 구성 단위로 분리할 수 있습니다. 롤은 일반적으로 특정 역할이나 기능을 수행하는데 사용되며, 구성 관리의 모듈화와 모듈 재사용을 촉진합니다.Ad-hoc Commands
: Ad-hoc 명령은 명령줄에서 간단한 작업을 실행할 수 있으며, 특정 모듈과 함께 사용됩니다. ex) 원격 호스트에서 파일을 복사하거나 패키지를 업데이트할 수 있습니다.
Ansible 요소 예제 코드
Inventory
1 |
|
Modules
1 |
|
Playbooks
1 |
|
Roles
1 |
|
Ad-hoc Commands
1 |
|