8 minute read

9주차에 진행되었던 IaC 기본 개념과 Ansible 강의의 주요 내용을 정리하였습니다.


Ansible 사전공부

IT 환경에서의 자동화란? 레드햇 앤서블 쉽게 이해하기, Red Hat Korea

  • 자동화?
    기존에 사람이 수동으로 작업하던것을 로봇이나 컴퓨터를 이용해서 자동으로 처리. 단순반복적인 일을 대신 수행시킴으로써 보다 생산적이고 가치있는 일에 집중

  • IT 환경에서의 Red Hat Ansible?
    • IT 인프라 배포,구성,설정관리등을 손쉽게 자동화
      • 앞선 작업이 완료 된 후 다음 작업을 진행하도록 업무흐름 자동화 asb1
      • 일정 시간이 되면 정해진 작업을 수행(백업 등)
  • 이점
    • 기업의 생산성 제고, 협업과정의 불필요한 대기시간 제거> 비즈니스 신속성
      • 서비스 자동화
      • 운영 자동화
      • 배포 자동화
      • 네트워크 자동화
      • 보안
      • Compliance 관리
    • 단순한 사용법, 강력한 생태계 구축으로 활용범위 넓음, Human Error로인 한 운영오류 최소화

What is Ansible, TechWorld with Nana

  1. Overview
    • Real Life scenario
    • Ansible cpnt.
      • Modules & Playbook
    • ASB w/Docker
    • ASB vs. alt tools (eg.puppet)
  2. What is Ansible?

    • Tool to automate diff. IT tasks
      • What is IT tasks?
      • Why it’s good to automate them? rather than manually?
  3. Why uses Ansible?

    • Before..
      • Tedious job; distribute or update apps on 10 server
      • Repetitive tasks; updates, backups, weekly sys reboots, create usr/grp, assign permissons, etc.
    • Ansible comes in!
      More efficient & Less time consuming in 4 ways

      1. Execute task from the own machine
        versus inst. ssh into all target serv.

      2. conf. inst. dply in a single YAML File
        versus manual&shell script

      3. Reuse same file multiple times & for diff. envir.

      4. More reliable and less likely for human errors

    • ASB supports all infra. from OS to cloud provider.
  4. Agentless

    asb2

    If control mach. has ASB and ssh, then the trg serv can work w/o ASB

    No deply effort in beginning
    No upgrade effort for version change

  5. How ASB works? > Modules

    • Small programs that do the actual work

      • pushed to the trg serv.
      • Do their work and get removed
    • One small specific task
      • e.g Start/Install Nginx Serv.
      • Create or copy file
      • Start docker container
      • Create cloud instance
    • List of modules in asb official doc
  6. YAML Syntax
    • No need for learning a specific lang. for ASB
    • examples of jenkins, docker, postgressql,
  7. ASB Playbook

    Modules are granular and specific

    > How to handle complex apps?

    • multiple small modules
    • in a certain seq.
    • grped together

    > playbooks come in

    how and which order

    at what time and where (on which machines)

    what(the modules) should be executed

    Orchestartes the module execution

  8. ASB Inventory

    이부분은 이해안감
    플레이북보다 조금 더 큰단위인거같은데.. 공부해봐야할듯

  9. ASB For Docker

    asb3

    Not only for docker container, but other envir.
    By playbook, ASB can manage both Container & its Host

  10. Ansible Tower

    asb4

    얘도 이해안감
    그러니까… 모니터링 툴같은거야? 아니면 GUI?

  11. Ansible vs Puppet & Chef

    Ansible Puppet&Chef
    Simple YAML Ruby, difficult to learn
    Agentless Inst. needed
    need for managing updates of trg server
  12. Summary

    Automation tool to prevent human error&tedious manual work


IaC 개념

  • IaC(Infrastructure as Code-코드형 인프라)

  • 인프라를 웹 인터페이스 및 대화형식의 도구를 사용해 수동적으로 인프라를 구성하는 것이 아닌, 시스템이 읽을 수 있는 인프라 정의 파일을 통해 인프라의 구성 관리 및 배포를 자동화 하는 것

  • 인프라는 물리적 하드웨어 뿐만 아니라 가상 컴퓨터, 클라우드 등 관련 리소스를 IaC를 통해 구성 관리 및 배포할 수 있음

  • IaC는 폭발적으로 확장되는 컴퓨팅과 차세대 웹 프레임워크와 같은 새로운 기술을 구현하고 구성하는 어려움에 대한 해결책으로 발전하게 되었고, 기업들은 이런 기술을 통해 스케일링 확장하는 문제도 해결할 수 있었음

IaC 장점

  • 비용 절감
    • 사람의 노력적인 측면에서 인프라 관리를 수동적으로 하지 않음으로 다른 생산적인 작업에 노력을 집중할 수 있음.
  • 빠른 속도
    • 인프라 구성 관리 및 배포를 자동화 함으로 신속한 실행을 가능하게 하고,효율적으로 작업할 수 있는 가시성을 제공
  • 안정성
    • 수동으로 구성할 때와 같은 사람의 실수와 관련 위험을 제거할 수 있음
  • 코드화 및 버전 관리
    • 표준화된 포맷과 규칙으로 작성된 코드 문서를 통해 누구나 읽을 수 있고 확인할 수 있다. 또한 코드는 변경 사항 이력을 남길 수 있어 추후 문제 발생 시 어떤 부분이 변경되어 발생한 문제인지 확인하기 쉬움
  • 재사용성
    • 인프라를 코드화 하고 관련 리소스를 그룹 및 모듈화 해서 필요 시 필요한 부분을 재사용 할 수 있음

laC 도구 및 특징 비교

  • 구성 관리 / 배포 도구

    • 구성 관리
      • 물리(Baremetal) 시스템, 가상 컴퓨터 및 클라우드 인스턴스 내에서 패키지 설치, 애플리케이션 구성, 운영체제 관련 구성 및 구성 변경을 관리하는 도구
      • Ansible, Chef, Puppet, SaltStack 등
    • 배포
      • 새로운 인프라 리소스를 배포하고 이미 배포된 인 프라 리소스의 생명 주기를 관리하는 도구
      • AWS CloudFormation, OpenStack Heat, Terraform 등
  • 가변 인프라 / 불변 인프라
    • 가변 인프라
      • 여러 관리 대상 인프라가 독립적으로 관리되며 별도의 변경 사항을 가지는 형태
    • 불변 인프라
      • 클라우드 인스턴스의 이미지나 컨테이너의 이미지 와 같이 변하지 않는 이미지를 배포하는 것과 같이 인프라가 배포된 후 절대 로 변하지 않는 인프라
  • 절차적 / 선언적 언어
    • 절차적 언어
      • 원하는 최종 상태에 도달하기 위해 코드가 단계별로 정의되고 실행되는 형태
    • 선언적 언어
      • 최종적으로 원하는 형태를 정의만 하면 필요한 절차는 내부적으로 알아서 진행되는 형태
  • 마스터 및 에이전트 유무
    • 마스터
      • 인프라의 정보와 구성 관리 및 배포를 위한 정보를 가지고 있음
      • 장점 : 중앙 집중화 된 관리 및 모니터링이 가능
      • 단점 : 추가적인 리소스의 필요, 마스터의 관리, 장애 등이 존재
    • 에이전트
      • 서버가 관리할 인프라에 에이전트 소프트웨어가 설치되어 있음

Ansible 개념

  • 애플리케이션 및 IT 인프라를 자동화 할 수 있는 도구
    • Ansible을 사용하여 호스트를 구성하고, 소프트웨어를 배포하고, 지속적인 배포 및 다운 타임 없는 롤링 업데이트 등 고급 IT 작업은 조율할 수 있음
    • Ansible의 주요 목적은 간결성과 사용 용이성이며 또한 보안과 신뢰성을 바탕으로 OpenSSH를 기본 전송 방법으로 사용
    • 컨트롤 로드는 리눅스나 유닉스 시스템만 가능
    • 관리 노드는 어떠한 시스템이든 상관없음
    • 시스템 관리에 특별한 에이전트가 필요하지 않지만 파이썬을 이용해서 해당 작업들을 행해야 되기 때문에 컨트롤 로드든 관리 노드든 파이썬이 설치되어 있어야 함
  • 장점
    • SSH 기반이므로 원격 노드에 에이전트를 설치할 필요가 없음
    • YAML 언어를 사용하기 때문에 쉽게 배울 수 있음
    • 플레이북 구조는 간단하고 명확하게 구조화되어 있음
    • 변수 기능을 사용하여 같은 작업에 대해서 다른 구성으로 쉽게 구성할 수 있음
    • 다른 도구보다 훨씬 간소화 된 코드 기반
  • 단점
    • 다른 프로그래밍 언어를 기반으로 하는 도구보다 덜 강력
    • 변수 등록은 기본적인 기능조차도 요구되기 때문에 더 쉬운 작업을 더 복잡하게 만들 수 있음
    • 플레이 내 변수의 값을 확인하기가 어려움이 있음
    • 입력, 출력, 구성 파일의 형식 간에 일관성이 없음
    • 때때로 성능 속도가 저하됨
  • 컨트롤 노드
    • Ansible이 설치된 모든 호스트
    • 컨트롤 노드에서는 ansible 또는 ansible-playbook 명령을 이용하여 작업을 실행할 수 있음
    • Python이 설치된 모든 호스트를 제어 노드로 사용할 수 있음
    • Windows 호스트를 컨트롤 노드로 사용할 수 없음
  • 관리 노드
    • 컨트롤 머신에서 접근하여 모듈을 설치하고, 원격의 명령을 실행하는 작업을 수행하는 시스템.쉽게 말해 컨트롤 머신에 관리되는 시스템을 의미함
    • Ansible은 관리 노드에 설치되지 않음
  • 플러그인
    • Ansible의 핵심 기능을 확장할 수 있도록 다양한 플러그인을 제공
    • Action, Become, Cache, Callback, Cliconf, Connection, Httpapi, Inventory, Netconf, Lookup, Shell, Strategy, Vars
  • 인벤토리
    • 관리 노드의 목록으로, 관리 노드에 대한 호스트 이름이나 IP 주소와 같은 정보를 지정
    • 여러 관리 노드를 그룹으로 조직화 할수 있고, 중첩 그룹을 사용할 수 있음
  • 모듈
    • Ansible을 실행하는 Python 코드 단위
    • 각 모듈은 호스트에 패키지를 설치 및 관리하고, 데이터베이스의 사용자를 관리하고, 네트워크 장치의 VLAN 인터페이스를 관리할 수 있는 등 약 3000개의 모듈이 있음
    • 하나의 모듈은 하나의 작업을 실행할 수 있고, 플레이북을 이용해 여러 모듈을 선언해 여러 작업을 수행할 수 있음
  • 작업(Task)
    • Ansible의 작업 실행 단위
    • 하나의 모듈이 하나의 작업이 되며, Ad-hoc 명령을 통해 단일 작업을 실행하거나, 플레이북을 작성해 여러작업을 실행할 수 있음
  • Ad-hoc 명령
    • Ansible 명령을 이용하여 단일 작업을 실행할 수 있음
  • Play
    • 특정 관리 노드를 대상으로한 순서가 지정된 작업 목록
  • Playbook
    • 관리 노드에서 실행할 모듈을 인자와 함께 정의한 파일
    • YAML로 작성되며, Ansible의 핵심
    • ansible-playbook 명령을 이용해 플레이북을 실행할 수 있음
  • Ansible 아키텍쳐 구성 내용
    • 시스템 유형으로 컨트롤 머신과 관리 노드가 있음
    • 컨트롤 로드에 Ansible이 설치되며, 관리 노드들은 컨트롤 머신에 의해 유지되거나 관리됨
    • 관리 노드들은 인벤토리 파일에 나열되어야 하며, 여기에는 호스트이름 또는 IP 주소로 저장
    • 인벤토리에 각 관리 노드들의 기능별로 그룹화 시켜서 저장도 가능
    • 시스템 관리자는 컨트롤 로드에 로그인하여 플레이북 또는 원격 전송 명령을 사용하여 관리 노드를 제어할 수 있고, 이 때 인벤토리에 저장된 관리 노드들을 패턴 형식으로 지정하여 제어할 수 있음
    • 컨트롤 로드는 기본적으로 SSH를 사용하여 관리 노드와 통신
    • 플레이북에서 참조한 모듈은 관리 노드에 복사되며, 관리 노드에서 실행
    • 사용되는 모듈의 종류로는 코어(core) 모듈과, 사용자 지정 모듈 등
  • Ansible 구성 파일
    • Ansible의 작동 방식을 구성하는 파일
    • 인벤토리 파일의 위치, 관리 노드에 연결하는 방법, 연결 한 후 작동 방법 등 무수히 많은 구성을 지정할 수 있음
    • 기본 Ansible 구성 파일의 위치는 /etc/ansible/ansible.cfg
    • Ansible 구성 파일 우선 순위
      1. ANSIBLE_CONFIG 환경 변수
      2. 현재 디렉토리의 ansible.cfg
      3. 홈 디렉토리의 ~/.ansible.cfg
      4. /etc/ansible/ansible.cfg
    • 우선 순위가 높은 파일에 정의된 값이 이전 정의된 값보다 우선함
  • Ansible 작동 방식 제어 우선 순위
    • Ansible 작동 방식을 제어하기 위해 Ansible 구성 파일 외에도 ansible 명령의 옵션, 플레이북 키워드, 변수를 이용해 동작을 제어할 수 있음
      1. -e 옵션에 지정한 변수
      2. 변수
      3. 플레이북 키워드
      4. 명령의 옵션
      5. Ansible 구성 파일
  • 인벤토리
    • Ansible은 인프라에 존재하는 여러 호스트를 관리함
    • 호스트의 목록 또는 그룹을 지정한 인벤토리 파일이 필요하며 인벤토리가 정의되면 패턴을 사용하여 Ansible을 실행할 노드 또는 그룹을 선택함
    • 기본 인벤토리 파일은 /etc/ansible/hosts 이며, -i 옵션을 사용하여 다른 인벤토리 파일을 지정할 수 있음
    • 인벤토리 파일은 일반적으로 INI 파일 형식을 가지고 있으며, YAML 형식으로 지정할 수 있음
  • 정적 인벤토리
    • 사용자가 직접 INI 또는 YAML 형식으로 파일을 직접 작성
  • 기본 그룹
    • all : 모든 호스트 포함
    • ungrouped : 그룹에 속하지 않은 모든 호스트 포함
  • 여러 그룹에 속한 호스트
    • 각 호스트는 하나 이상의 그룹에 속할 수 있음
    • 중첩 그룹을 이용한 인벤토리 단순화
  • 동적 인벤토리
    • 가상화, 클라우드 및 컨테이너 환경과 같이 시간이 지남에 따라 관리 노드의 변화가 많은 경우에 사용
    • 클라우드 공급자, LDAP 및 CMDB 등 동적 외부 인벤토리 시스템에서 호스트의 목록을 동적으로 가져올 수 있음
  • 연결 방법
    • 인벤토리 플러그인
    • 인벤토리 스크립트
    • AWS 에서 연결방법을 사용하기 위해서는 파이썬용 AWS SDK boto 패키지를 설치해야 함.
  • 인벤토리 확인
    • ansible 또는 ansible-inventory 명령으로 확인할 수 있음
    • 기본 인벤토리 파일이 아닌 경우 -i 또는 –inventory 옵션을 사용할 수 있음
  • 패턴
    • Ad-hoc 명령 또는 플레이북을 실행할 때 작업을 실행할 관리 노드 또는 그룹을 지정할 때 패턴을 이용해 관리 노드를 선택
    • 패턴은 단일 호스트, IP 주소, 인벤토리 그룹을 참조할 수 있고, 집합, 와일드카드, 정규화 표현식 등 사용이 가능
  • 모듈
    • 모듈은 Ansible을 이용해 관리 노드에 작업을 실행하는 핵심 요소
    • 모듈은 Python 코드로 이루어져 있으며, /usr/lib/python3/dist-packages/ansible 경로에 있음.
    • ansible-doc 명령을 이용해 모듈의 목록을 확인하고, 모듈의 사용법을 확인할 수 있음
  • Ad-Hoc 명령
    • 플러그인 확인 명령어
      • Ansible ad-hoc 명령은 하나 이상의 관리 노드에 단일 작업을 실행하는 임시 명령
      • 임시 명령은 거의 반복하지 않는 간단한 작업에 주로 사용

Categories:

Updated:

Leave a comment