ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 오픈소스로 구성하는 데브옵스 시스템 - Ansible & AWX 설치
    DevOps 2018. 1. 31. 23:00

    이번에는 최근 Devops 엔지니어라면 한번은 들어 봤을 Provision Tool 중 ansible과 ansible을 GUI로 관리 및 컨트롤 할 수 있는 awx에 대해 이야기 해보도록 하겠습니다.


    현재 제가 근무하는 곳은 100여대가 넘는 서버를 2명의 엔지니어가 관리를 하고 있습니다. 여러 종류의 서버로 구성이 되어 있기는 하지만 주로 리눅스 계열의 서버가 대부분인 상태이지요.


    윈도우의 경우에는 Active Directory 구성을 하면 서버의 설정이나 정책들을 Group policy로 관리가 가능합니다만, 리눅스의 경우에는 이런 구성을 제공하고 있지 않습니다.


    또한 최근에는 VM과 클라우드의 등장으로 관리를 해야되는 OS의 수가 계속 늘어나고 있었습니다. OS의 설정 변경이나 커널 업데이트등을 적용하려치면 그 많은 서버를 일일히 들어가서 명령어를 실행해야 되는 상황에 직면해 있었습니다.


    그래서 최근에 Devops를 접하면서 provisioning tool의 존재를 알게 되었고, 그 중 많이 사용하는 puppet, chef, salt, vagrant, ansible의 검토를 시작 하였습니다.


    저희가 privisioning tool 도입을 검토하면서 내린 기준은 아래와 같습니다.

    • agent가 없어야 한다. (방화벽, agent 데몬 관리 이슈 제거)
    • 리눅스는 물론이고 윈도우도 지원되어야 한다.
    • 실행코드의 문법이 쉽고 작성이 용이해야 한다.
    • Web GUI에서 관리, 컨트롤 되어야 한다. AD 연동은 필수!
    • 당연히 오픈소스....
    이런 기준을 모두 만족하는 provisioning tool이 ansible이 되었고, 도입을 결정하게 되었습니다.

    아울러 ansible에 대한 Web GUI도 검토를 하였습니다.
    가장 먼저 Ansible Tower가 검토 되었지만, 10개 이상의 호스트는 유료로 지원이 가능했습니다. (심지어 비싸기까지...)
    그 다음은 semaphore를 설치 했지만, 특정 버전만 사용이 가능한 환경이라 바로 삭제...그 다음은 playable 이라는 tool을 설치 하였으나 task 실행시 계정 인증 및 권한 escalation이 되지 않아 도입을 포기 하였습니다.

    그러던 중 ansible tower의 open source 버전인 awx-project가 최근에 생긴 것을 발견하고 설치를 진행해 보았습니다.

    ansible+awx는 현재 docker install을 지원하고 있습니다.


    우선 CentOS를 업데이트 합니다.

    sudo yum -y update

    sudo reboot


    yum으로 기본 패키지를 설치 합니다.

    sudo yum -y install bzip2 device-mapper-persistent-data gcc gcc-c++ git gettext lvm2 yum-utils


    다음으로 EPEL repository를 설치하고, Docker repository까지 추가 합니다.

    sudo yum -y install epel-release

    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

    sudo yum -y update


    그리고 Ansible과 pip 설치를 진행 합니다.

    sudo yum -y install ansible python-pip


    다음으로 Docker-CE 버전을 설치 합니다.

    sudo yum -y install docker-ce

    sudo systemctl enable docker

    sudo systemctl start docker


    pip로 docker-py를 설치 합니다.

    sudo pip install -U docker-py


    git으로 AWX 프로젝트를 clone 받고 install을 진행 합니다.

    git clone --depth 50 https://github.com/ansible/awx.git

    cd awx/installer/

    ansible-playbook -i inventory install.yml


    inventory file을 수정합니다. 이부분은 선택사항 입니다.

    cd awx/installer/

    vi inventory


    inventory file에서 다음 부분은 주석을 풀고 수정을 합니다.

    dockerhub_version=1.0.6    # latest 경우 버전 업그레이드 되고 updating 무한로딩이 될 수 있습니다.

    postgres_data_dir=/data/pgdocker    # /tmp 하위에 둘 경우 데이터 파일이 깨질 위험이 있습니다.

    host_port=9000    # 보안을 위해....

    #pg_hostname=pgsql_host_or_ip    # pgsql을 별로도 설치 했을 때, 해당 설정을 해주면 docker는 설치 안됩니다.

    project_data_dir=/var/lib/awx/projects    # docker와 host간의 volume을 마운트 할 때 필요합니다.



    마지막으로 firewall과 selinux 설정을 확인 합니다.

    systemctl disable firewalld

    systemctl stop firewalld

    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

    setenforce 0


    여기까지 설치가 완료 되었습니다. 아래 명령으로 모니터링 로그를 출력합니다.

    docker logs -f awx_task


    설치가 완료되면 해당 서버의 url로 접속을 합니다. 기본 계정은 admin, 패스워드는 password 입니다.

    http://awx-host



    아래는 로그인 하면 가장 처음 만나는 Dashboard 화면 입니다.

    각 화면의 구성은 따로 설명을 하도록 하겠습니다.


    아울러 저희는 사내 Active Directory를 운영하고 있어서, 계정 연동도 같이 진행 하였습니다.

    그리고 yaml 파일을 관리하기 위한 gitlab 프로젝트를 만들어서 연동을 한 상태 입니다.


    관련해서는 다음 시간에 자세히 다루도록 하겠습니다.

Designed by Tistory.