ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Ansible] Docker 관련 모듈을 이용한 컨테이너 관리하기
    개발자 라이프 2021. 11. 7. 21:58
    반응형

    들어가며

    앤서블은 다수의 컴퓨팅 장비에 요청을 보내어 동시에 제어 관리하기에 용이한 시스템입니다. 이번 글은 앤서블을 이용하여 AWS 환경에서 여러 EC2 인스턴스를 대상으로 도커 컨테이너를 배포하거나, 수정, 조회, 삭제 등 관리하는 방법을 -매우- 간단한 예제 시나리오를 통해 알아봅니다. 

    관련한 예제 코드는 깃헙을 통해서 확인하실 수 있습니다. 참고로 현재 저는 앤서블을 공부하고 있는 중이라 구성된 앤서블 스크립트의 구조가 최적화된 상태는 아닙니다. PR로 고쳐주시면 감사히 배우겠습니다.

    Docker 모듈을 이용한 컨테이너 관리하기

    1. 예제 환경 구성하기

    1.1. EC2 구성

     예제 환경은 아마존 EC2 환경을 바탕으로 합니다. 따라서 아래와 같은 EC2 인스턴스가 필요합니다.

    • 컨트롤러 노드 인스턴스 1대 :
      • 앤서블이 설치되어 있어야 합니다. 예제는 2.11.5 버전을 기준으로 했습니다.
      • 매니지드 노드와 ssh 통신이 가능해야 합니다. pem 키 경로는 `vars_common.yml`에 명시해주시길 바랍니다.
    • 매니지드 노드 인스턴스 n 대 :
      • 동적 인벤토리 방식으로 검색 가능하도록 아래와 같은 태그가 구성되어야 합니다. 참고 글
        • Project : ansible-example
        • CollectMetric : true
        • MetricAgent : telegraf_1.20.3

    1.2. 앤서블 모듈 구성하기

    앤서블은 모듈을 이용하여 보다 쉽게 명령어를 작성할 수 있습니다. 이번 글에서 사용할 모듈은 2가지입니다. 

    • aws : 대상이 되는 AWS EC2 인스턴스를 인벤토리로 구성하기 위해 사용합니다.
    • docker : 도커 관련 명령어를 위해 사용합니다.

    관련한 모듈을 설치하기 위해 예제 디렉토리 내에서 아래와 같은 커맨드를 실행해줍니다. 

    $ ansible-galaxy install -r requirements.yml

    2. 예제 시나리오 및 명령어 사용해보기

    2.1. 예제 시나리오

    예제 코드는 다음과 같은 가상 시나리오를 배경으로 합니다.

    • 다수의 EC2 인스턴스에 메트릭 에이전트 구성되어 있고, 관리되어야 합니다.
    • 메트릭 에이전트는 도커 컨테이너 형태로 구성되어 있습니다. 
    • 구성된 메트릭 에이전트의 정보는 EC2 인스턴스의 태그 정보로 알 수 있습니다.

    2.2. 명령어 사용해보기

    예제 코드의 Makefile에 명시된 명령어를 통해, 직접 메트릭 에이전트 컨테이너를 배포하고 관리해봅니다.

    # container 배포
    $ make deploy-container
    
    # container 확인
    $ make check-container
    
    # container 제거
    $ make remove-container

    배포 스크립트를 실행하는 모습. 아래 대상 인스턴스에 컨테이너가 정상적으로 배포된 것을 알 수 있다.

    3. 예제 스크립트 살펴보기

    예제 스크립트 중 실제 도커 컨테이너를 관리하는 부분에 대해 보다 자세히 살펴봅니다.

    3.1. 컨테이너 배포 부분

    # playbook-deploy-metric_agent.yml
    ...
        - name: Run docker-compose up
          community.docker.docker_compose:
            project_src: "{{ metric_agent_docker_compose_dir }}"
          register: runOutput
    ...

    docker-compose 명령어를 이용하여 컨테이너를 배포하는 task는 위와 같습니다. docker_compose 모듈을 이용하여 컨테이너를 관리하며, 배포에 사용하는 docker-compose.yml 파일은 `project_src`에 설정된 디렉토리 경로 하위에 위치한 파일이 됩니다. 물론 task 명세에 `definition` 키로 docker-compose.yml 파일에 대한 내용을 직접 넣을 수 있습니다.

    definition 하위에 컨테이너 서비스에 대한 명세를 넣을 수 있다. (출처: https://docs.ansible.com/ansible/2.9/modules/docker_compose_module.html#examples)

    3.2. 컨테이너 확인 부분

    # playbook-check-metric_agent.yml
    ...
        - name: Check the container
          docker_container_info:
            name: "{{ metric_agent_name }}"
          register: containerCheckResult
    ...

    도커 컨테이너에 대한 정보를 확인하는 것엔 docker_container_info 모듈을 사용합니다. 컨테이너의 이름을 `name` 키의 값으로 넣으면 해당 컨테이너에 대한 정보를 반환합니다. 반환되는 정보는 아래와 같은 정보가 포함됩니다.

    • 환경 변수 정보
    • 네트워크 인터페이스 정보
    • 볼륨 마운트 정보
    • 재시도 횟수와 같은 실행 상태 정보

    3.3. 컨테이너 제거 부분

    # playbook-remove-metric_agent.yml
    ...
        - name: remove container
          docker_container:
            name: "{{ metric_agent_name }}"
            state: absent
    ...

    컨테이너를 직접 제거하기 위해 docker_container 모듈을 사용합니다. 이는 물론 앞서 사용한 docker_compose 모듈을 사용해도 됩니다. 주요한 설정이 비슷하기 때문인데, 바로 `state: absent` 부분입니다. 해당 설정은 컨테이너를 제거하는 설정입니다. 

    마무리

    도커 컨테이너를 사용하는 환경에서 앤서블을 이용한 컨테이너 관리하는 방법을 예제를 통해 매우 간단히 살펴봤습니다. 

    반응형

    댓글

Designed by Tistory.