Ansible(by 김은용님)

Twolinecode
twolinecode
Published in
8 min readOct 23, 2023

“ 안녕하세요. 투라인코드에서 근무 중인 김은용 선임입니다.

대규모 서버 클러스터를 구성하고 관리하는 과정은 소규모 프로젝트와는 달리 별도의 복잡함을 요구합니다. 특히 CentOS 7을 기반으로 10개 이상의 서버로 Kubernetes 클러스터를 구축해야 하는 경우, 각 서버에 연속적으로 다음과 같은 일련의 작업을 수행해야 합니다.

또는

이러한 반복적인 작업을 수동으로 수행하는 것은 비 효율적이며 오류 발생 가능성도 높습니다. 이를 해결하기 위한 대안으로 “코드형 인프라” (Infrastructure as Code, IaC) 개념을 소개하고자 합니다.

IaC란 IT 인프라를 코드로 관리하는 방식을 의미합니다. 이를 통해 서버 구성 및 관리 작업을 자동화하고 효율적으로 수행할 수 있습니다. 대규모 서버 클러스터를 관리할 때 IaC를 활용하면 다음과 같은 이점을 얻을 수 있습니다.

1)일관성 : 코드로 인프라를 정의하면 모든 서버가 동일한 구성을 가지므로 일관성이 유지됩니다.

2)자동화 : IaC 스크립트 또는 도구를 사용하면 반복 작업을 자동화할 수 있으며, 오류 가능성을 줄일 수 있습니다.

3)스케일링 : 수많은 서버를 쉽게 확장할 수 있으며, 새로운 서버를 추가하거나 구성을 변경하는 데 효율적입니다.

4)문서화 : 인프라 코드는 문서화 역할을 하며, 인프라 구성에 대한 이해를 높일 수 있습니다.

1. IaC (Infrastructure as Code)

IaC를 구현하는데 주로 사용되는 도구로는 Ansible, Terraform, 그리고 Puppet이 대표적입니다. 이러한 도구들의 특성을 아래와 같이 요약할 수 있습니다:

이러한 도구들은 구성 관리와 오케스트레이션을 다루는데, 오케스트레이션은 환경을 지속적으로 “원하는 상태”로 유지하는 것을 의미하고, 구성 관리는 원하는 상태에 도달하기 위한 “구성”을 정의하는 것을 의미합니다. 특히, 테스트 환경에서는 반복적으로 환경을 생성, 삭제 및 테스트 환경을 구성해야 하기 때문에 “구성”에 최적화된 Ansible과 Puppet을 비교하여 선택하게 되었습니다.

2. Ansible을 선택한 이유

Ansible는 구성 관리에 초점을 두고 있으며, 속도와 확장성 측면에서 매우 우수한 성능을 보입니다. 이에 대한 이유는 다음과 같습니다.

1) 구성 관리 중심 : Ansible은 주로 구성 관리에 사용되며, 구성 변경을 간편하게 수행할 수 있습니다.

2) 에이전트 불필요 : Ansible은 Puppet과 달리 에이전트 설치가 필요하지 않습니다. 이로 인해 서버 구성 시간을 절약할 수 있습니다.

3) 클라이언트-마스터 아키텍처 : Ansible은 클라이언트와 마스터 서버만 필요하므로 구성이 간단하고 운영 환경에 적합합니다.

4) YAML 형식 사용 : Ansible은 YAML 형식을 사용하며, Kubernetes와 같은 다른 도구와 쉽게 통합할 수 있습니다. 접근성과 확장성 측면에서 Puppet과 비교하여 우수합니다.

따라서, 테스트 환경에서 서버를 반복적으로 구축하고 관리해야 할 경우, Ansible이 더 효율적이고 관리가 용이하다고 판단되었습니다.

3. Ansible 기본 개념

Ansible는 다음과 같은 기본 개념을 기반으로 동작합니다.

1) Inventory (주소록) : Inventory 파일은 Ansible이 관리하는 Host (서버)의 목록을 정의하는 곳입니다. 이 파일을 사용하여 Ansible은 어떤 Host에 어떤 작업을 수행할지 결정합니다.

2) SSH 프로토콜 : Ansible은 SSH 프로토콜을 사용하여 Host와 통신합니다. SSH를 통해 Ansible은 Host에 접속하고 명령을 실행합니다.

3) Ansible-Playbook (Ansible playbook) : Playbook은 Ansible의 실행 계획을 정의하는 파일입니다. Playbook에는 실행할 작업, 명령, 역할 (Roles), 환경 변수 등이 포함됩니다. 이러한 Playbook은 Ansible로 하고자 하는 작업을 정의하는 핵심 도구로 사용됩니다.

이러한 기본 구조를 통해 Ansible은 Inventory에서 정의된 Host 목록을 기반으로 SSH 프로토콜을 사용하여 모든 Host에 연결하고, Playbook에 정의된 작업을 차례대로 실행합니다. 이를 통해 Ansible은 인프라 구성, 소프트웨어 설치, 설정 변경 및 기타 관리 작업을 효율적으로 자동화할 수 있습니다.

이러한 작업을 효율적으로 수행하려면 Ansible은 다음과 같은 기본 개념과 동작 원리를 기반으로 합니다.

3–1 . 인벤토리 (inventory)

인벤토리 파일은 Ansible이 관리하는 Host(서버)의 목록을 정의하는 장소입니다. 이 파일을 사용하여 Ansible은 어떤 Host에서 어떤 작업을 수행해야 하는지 결정합니다. 인벤토리를 그룹화하여 관리하거나 변수를 설정할 수 있으며, 이를 통해 작업을 정확히 대상 Host에 적용할 수 있습니다.

3–2. SSH 프로토콜

Ansible은 Host와 통신하기 위해 SSH 프로토콜을 사용합니다. SSH를 통해 Ansible은 Host에 연결하고 필요한 명령을 실행합니다. 이것은 Ansible이 에이전트를 설치하지 않고도 Host를 관리할 수 있는 이점 중 하나입니다.

3–3 . Ansible playbook

Ansible playbook은 Ansible의 실행 계획을 정의하는 파일입니다. Ansible playbook에는 실행할 작업, 명령, 역할 (Roles), 환경 변수 등이 포함됩니다. Ansible playbook은 Ansible로 하고자 하는 작업을 정의하는 핵심 도구로 사용됩니다.

위 예시는 “centos” 그룹에 속한 Host들에게 “package_name” 변수를 선언하고, “firefox” 패키지가 없을 경우 설치하는 플레이를 정의한 것입니다.

이러한 기본 개념을 통해 Ansible은 인벤토리에서 정의된 Host 목록을 기반으로 SSH 프로토콜을 사용하여 모든 Host에 연결하고, Ansible playbook에 정의된 작업을 차례대로 실행합니다. 이를 통해 Ansible은 인프라 구성, 소프트웨어 설치, 설정 변경 및 기타 관리 작업을 효율적으로 자동화할 수 있습니다.

4. Ansible 사용방법

1) Ansible 설치 (Ubuntu 22.04 기준)

2) inventory 파일 작성

3) 통신 확인

4) Ansible playbook 작성

Ansible playbook 예시 :

5) ansible-playbook 실행

위와 같은 방법으로 Ansible을 사용할 수 있습니다.

5. Module 사용방법

위의 Ansible playbook은 단순한 명령어를 사용하여 작업을 수행하는 것으로 가능하지만, Ansible에는 다양한 Module이 제공됩니다.

Module을 사용한 Ansible playbook 예시 :

Module은 Ansible의 핵심 기능이며, debug, yum, apt와 같이 직관적으로 사용할 수 있어 Module을 활용하는 데 큰 어려움이 없습니다.

Module을 사용하면 작업을 더 효율적으로 수행할 수 있으며, 코드도 더 읽기 쉽고 유지 관리하기 쉽습니다.

6. 마무리

Ansible은 인프라 자동화를 위한 강력한 도구로, 이해하기 쉽고 사용하기 쉬운 기능을 제공합니다. 인벤토리를 통해 대상 서버를 정의하고, SSH를 사용하여 원격 Host에 연결하며, Ansible playbook을 작성하여 원하는 작업을 자동화할 수 있습니다. Module을 활용하면 보다 효과적으로 서버 관리 작업을 수행할 수 있으며, 패키지 설치, 설정 변경, 배포 작업을 안전하게 처리할 수 있습니다.

안전성과 확장성을 고려할 때, Ansible은 중요한 역할을 하며, 관리자가 인프라 및 서버 관리를 효율적으로 수행하는 데 도움이 됩니다. Ansible은 공식 문서 및 커뮤니티의 지원을 받을 수 있으며, Shell script나 명령어를 사용하여 작업을 수행하는 것보다 읽기 쉽고 유지 관리하기 쉬운 코드를 작성할 수 있습니다.

Ansible을 사용하여 인프라 및 서버 관리 업무를 자동화하면, 시간과 리소스를 절약하고, 실수를 줄이며, 일관성을 유지할 수 있습니다. 이러한 이점을 통해 조직은 더 효율적으로 운영할 수 있고, 업무에 집중할 수 있게 됩니다.

--

--

Twolinecode
twolinecode

We have the best solutions and experts for our customer’s digital business needs-everything from Cloud Infrastructure to Cloud Native Application.