원격 호스트 관리를 위한 Ansible 구성 방법

AnsibleBeginner
지금 연습하기

소개

Ansible 은 원격 호스트 및 인프라 관리를 간소화하는 강력한 IT 자동화 도구입니다. 이 튜토리얼에서는 효과적인 원격 호스트 관리를 위해 Ansible 을 구성하는 과정을 안내하고, Ansible 의 기본 사항과 실제 사용 사례를 탐색하여 인프라 운영을 최적화하는 데 도움을 드립니다.

Ansible 기본 이해

Ansible 이란 무엇인가?

Ansible 은 인프라를 코드로 관리할 수 있도록 지원하는 오픈소스, 에이전트리스 IT 자동화 도구입니다. 복잡한 작업을 여러 시스템에 걸쳐 자동화하기 쉽도록 간단하고 강력하며 확장 가능하도록 설계되었습니다. Ansible 은 시스템의 원하는 상태를 선언적인 언어로 기술하고, 그 상태로 시스템을 가져오기 위한 필요한 작업을 수행합니다.

주요 Ansible 개념

  • 인벤토리 (Inventory): Ansible 이 관리할 호스트 목록과 연결 세부 정보를 포함합니다.
  • 모듈 (Modules): 서비스 구성이나 패키지 관리와 같은 특정 작업을 수행하는 재사용 가능한 코드 단위입니다.
  • 플레이북 (Playbooks): 관리 대상 호스트에서 실행할 작업을 정의하는 YAML 형식의 파일입니다.
  • 롤 (Roles): 여러 플레이북에서 공유할 수 있는 재사용 가능한 작업, 변수 및 기타 리소스의 컬렉션입니다.

Ansible 아키텍처

Ansible 은 Ansible 제어 노드 (Ansible 명령을 실행하는 머신) 가 SSH 또는 다른 프로토콜을 통해 관리 대상 호스트와 통신하는 클라이언트 - 서버 아키텍처를 사용합니다. Ansible 은 관리 대상 호스트에 특별한 소프트웨어를 설치할 필요가 없으므로 에이전트리스 솔루션입니다.

graph TD A[Ansible 제어 노드] -- SSH/기타 프로토콜 --> B[관리 대상 호스트 1] A -- SSH/기타 프로토콜 --> C[관리 대상 호스트 2] A -- SSH/기타 프로토콜 --> D[관리 대상 호스트 3]

Ansible 설치 및 구성

Ansible 은 Linux, macOS 및 Windows 를 포함한 다양한 운영 체제에 설치할 수 있습니다. 이 예제에서는 Ubuntu 22.04 시스템에 Ansible 을 설치합니다.

sudo apt-get update
sudo apt-get install -y ansible

Ansible 설치 후에는 Ansible 이 관리할 호스트를 지정하기 위해 인벤토리 파일을 구성해야 합니다.

원격 호스트 관리를 위한 Ansible 구성

인벤토리 관리

Ansible 인벤토리는 Ansible 이 관리할 호스트를 정의하는 파일입니다. 인벤토리는 INI 또는 YAML 과 같은 다양한 형식으로 저장될 수 있습니다. 다음은 INI 스타일 인벤토리 파일의 예입니다.

[webservers]
web01 ansible_host=192.168.1.100
web02 ansible_host=192.168.1.101

[databases]
db01 ansible_host=192.168.1.200
db02 ansible_host=192.168.1.201

이 예제에서는 webserversdatabases 두 개의 그룹이 있으며, 각 그룹에는 두 개의 호스트가 있습니다.

SSH 구성

Ansible 은 관리 대상 호스트에 연결하기 위해 SSH 를 사용합니다. 기본적으로 Ansible 은 제어 노드에 구성된 SSH 키를 사용하지만, 인벤토리 파일이나 플레이북에서 사용자 이름과 비밀번호를 지정할 수도 있습니다.

all:
  hosts:
    web01:
      ansible_host: 192.168.1.100
      ansible_user: ubuntu
      ansible_password: mypassword
    web02:
      ansible_host: 192.168.1.101
      ansible_user: ubuntu
      ansible_password: mypassword

플레이북 실행

인벤토리가 구성되면 원격 호스트를 관리하기 위해 Ansible 플레이북을 실행할 수 있습니다. 다음은 webservers 그룹에 Apache 웹 서버를 설치하는 예시 플레이북입니다.

- hosts: webservers
  tasks:
    - name: Install Apache
      apt:
        name: apache2
        state: present
    - name: Start Apache
      systemd:
        name: apache2
        state: started
        enabled: yes

이 플레이북을 실행하려면 다음 명령어를 사용합니다.

ansible-playbook -i inventory.yml apache.yml

Ansible Vault

Ansible Vault 는 Ansible 플레이북 및 인벤토리 파일에 비밀번호나 API 키와 같은 민감한 데이터를 암호화할 수 있는 기능입니다. 이를 통해 민감한 정보를 안전하게 보관할 수 있습니다.

graph TD A[Ansible 제어 노드] -- SSH/기타 프로토콜 --> B[관리 대상 호스트 1] A -- SSH/기타 프로토콜 --> C[관리 대상 호스트 2] A -- Ansible Vault --> D[암호화된 민감한 데이터]

실용적인 Ansible 사용 사례

서버 프로비저닝

Ansible 은 운영 체제 설치, 네트워크 설정 구성 및 필요한 소프트웨어 설치를 포함하여 서버 프로비저닝을 자동화하는 데 사용될 수 있습니다. 다음은 새로운 Ubuntu 22.04 서버를 프로비저닝하는 예시 플레이북입니다.

- hosts: new_server
  tasks:
    - name: 필요한 패키지 설치
      apt:
        name:
          - openssh-server
          - python3
          - python3-pip
        state: present
    - name: 네트워크 설정 구성
      network:
        interface: eth0
        dhcp: yes
    - name: 새 사용자 생성
      user:
        name: labex
        groups: sudo
        password: "$6$rounds=656000$xxxxxxxxxx"

구성 관리

Ansible 은 서버 및 애플리케이션의 구성을 관리하여 원하는 상태를 유지하는 데 사용될 수 있습니다. 이에는 소프트웨어 설치 및 구성, 시스템 서비스 관리 및 보안 업데이트 적용과 같은 작업이 포함됩니다.

- hosts: webservers
  tasks:
    - name: Apache 설치
      apt:
        name: apache2
        state: present
    - name: Apache 시작
      systemd:
        name: apache2
        state: started
        enabled: yes
    - name: Apache 구성 복사
      template:
        src: apache.conf.j2
        dest: /etc/apache2/apache.conf
      notify: Apache 재시작
  handlers:
    - name: Apache 재시작
      systemd:
        name: apache2
        state: restarted

애플리케이션 배포

Ansible 은 애플리케이션 배포를 자동화하는 데 사용될 수 있습니다. 이에는 애플리케이션 빌드 및 패키징, 대상 서버로의 배포 및 필요한 종속성 구성과 같은 작업이 포함됩니다.

- hosts: app_servers
  tasks:
    - name: 애플리케이션 빌드
      docker_image:
        name: myapp
        build:
          path: .
    - name: 애플리케이션 배포
      docker_container:
        name: myapp
        image: myapp
        state: started
        ports:
          - 80:8080

오케스트레이션 및 워크플로우 자동화

Ansible 은 인프라 프로비저닝, 애플리케이션 배포 및 유지 관리 작업과 같은 복잡한 워크플로우를 오케스트레이션하는 데 사용될 수 있습니다. 이는 여러 플레이북을 연결하거나 Ansible 의 내장 워크플로우 기능 (예: 롤 및 태그) 을 사용하여 달성할 수 있습니다.

graph TD A[인프라 프로비저닝] --> B[애플리케이션 배포] B --> C[유지 관리 수행] C --> D[인프라 해제]

Ansible 의 유연성과 강력함을 활용하여 다양한 IT 작업 및 워크플로우를 자동화하여 인프라 전반의 효율성, 일관성 및 안정성을 향상시킬 수 있습니다.

요약

이 튜토리얼을 마치면 Ansible 과 원격 호스트 관리를 위한 Ansible 구성 방법에 대한 확실한 이해를 얻게 될 것입니다. Ansible 을 사용하여 작업을 자동화하고 구성을 관리하며 인프라 운영을 간소화하여 IT 환경을 더욱 효율적이고 안정적으로 만들 수 있습니다.