W09 IaC, Ansible
9주차에 진행되었던 IaC 기본 개념과 Ansible 강의의 주요 내용을 정리하였습니다.
Ansible 사전공부
IT 환경에서의 자동화란? 레드햇 앤서블 쉽게 이해하기, Red Hat Korea
-
자동화?
기존에 사람이 수동으로 작업하던것을 로봇이나 컴퓨터를 이용해서 자동으로 처리. 단순반복적인 일을 대신 수행시킴으로써 보다 생산적이고 가치있는 일에 집중 - IT 환경에서의 Red Hat Ansible?
- IT 인프라 배포,구성,설정관리등을 손쉽게 자동화
- 앞선 작업이 완료 된 후 다음 작업을 진행하도록 업무흐름 자동화
- 일정 시간이 되면 정해진 작업을 수행(백업 등)
- IT 인프라 배포,구성,설정관리등을 손쉽게 자동화
- 이점
- 기업의 생산성 제고, 협업과정의 불필요한 대기시간 제거> 비즈니스 신속성
- 서비스 자동화
- 운영 자동화
- 배포 자동화
- 네트워크 자동화
- 보안
- Compliance 관리
- 단순한 사용법, 강력한 생태계 구축으로 활용범위 넓음, Human Error로인 한 운영오류 최소화
- 기업의 생산성 제고, 협업과정의 불필요한 대기시간 제거> 비즈니스 신속성
What is Ansible, TechWorld with Nana
- Overview
- Real Life scenario
- Ansible cpnt.
- Modules & Playbook
- ASB w/Docker
- ASB vs. alt tools (eg.puppet)
-
What is Ansible?
- Tool to automate diff. IT tasks
- What is IT tasks?
- Why it’s good to automate them? rather than manually?
- Tool to automate diff. IT tasks
-
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-
Execute task from the own machine
versus inst. ssh into all target serv. -
conf. inst. dply in a single YAML File
versus manual&shell script -
Reuse same file multiple times & for diff. envir.
-
More reliable and less likely for human errors
-
- ASB supports all infra. from OS to cloud provider.
- Before..
-
Agentless
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 -
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
-
- YAML Syntax
- No need for learning a specific lang. for ASB
- examples of jenkins, docker, postgressql,
-
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
-
ASB Inventory
이부분은 이해안감
플레이북보다 조금 더 큰단위인거같은데.. 공부해봐야할듯 -
ASB For Docker
Not only for docker container, but other envir.
By playbook, ASB can manage both Container & its Host -
Ansible Tower
얘도 이해안감
그러니까… 모니터링 툴같은거야? 아니면 GUI? -
Ansible vs Puppet & Chef
Ansible Puppet&Chef Simple YAML Ruby, difficult to learn Agentless Inst. needed
need for managing updates of trg server -
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 구성 파일 우선 순위
- ANSIBLE_CONFIG 환경 변수
- 현재 디렉토리의 ansible.cfg
- 홈 디렉토리의 ~/.ansible.cfg
- /etc/ansible/ansible.cfg
- 우선 순위가 높은 파일에 정의된 값이 이전 정의된 값보다 우선함
- Ansible 작동 방식 제어 우선 순위
- Ansible 작동 방식을 제어하기 위해 Ansible 구성 파일 외에도 ansible 명령의 옵션, 플레이북 키워드, 변수를 이용해 동작을 제어할 수 있음
- -e 옵션에 지정한 변수
- 변수
- 플레이북 키워드
- 명령의 옵션
- Ansible 구성 파일
- Ansible 작동 방식을 제어하기 위해 Ansible 구성 파일 외에도 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 명령은 하나 이상의 관리 노드에 단일 작업을 실행하는 임시 명령
- 임시 명령은 거의 반복하지 않는 간단한 작업에 주로 사용
- 플러그인 확인 명령어
Leave a comment