안녕하세요~ Administrator팀의 조랭이입니다!
IaC는 Devops에서 빠질 수 없는 부분이죠. 이번 포스트에서는 여러 코드형 인프라 툴들의 특성 및 장단점을 알아보겠습니다.
코드형 인프라(Infrastructure as Code, IaC) 란?
코드를 작성 및 실행하여 인프라를 생성, 배포, 수정, 정리하는 것을 의미
서버를 물리적으로 설치하는 등의 하드웨어 측면을 포함하여 운영의 모든 측면을 소프트웨어적으로 전환
코드형 인프라 도구에는 다섯 가지 범주가 있습니다.
코드형 인프라의 범주
애드혹 스크립트
- 자동화하는 가장 간단한 방법 중 한가지 (하지만 규모가 커지면 스파게티 코드가 될 가능성이 높음)
- 수행할 작업을 단계별로 나눠 bash, Ruby, Python 등의 언어를 사용하여 코드로 정의하고 작성된 스크립트를 서버에 수동으로 실행
구성 관리 도구
- 대상 서버에 소프트웨어를 설치하고 관리하도록 설계, 멱등성과 분산형 구조가 주요 특징
- Chef, Puppet, Ansible, Saltstack 같은 도구가 있음
서버 템플릿 도구
- 여러 서버를 시작하고 각각 동일한 코드를 실행하여 서버를 구성하는 구성 관리 도구와 다르게, 서버 템플릿 도구는 운영 체제, 소프트웨어, 파일 및 기타 필요한 모든 내용을 포함하고 있는 스냅샷(snapshot)으로 이미지를 생성
- 가상 머신, 컨테이너 2가지로 이미지 작업을 위한 도구의 범주가 나뉨.
- Docker, Packer, Vagrant 같은 도구가 있음
오케스트레이션 도구
- 서버 템플릿 도구로 생성된 VM이나 컨테이너를 어떻게 관리하는가에 대한 도구
- ex) VM과 컨테이너를 하드웨어에 효율적 배포, 배포 전략, 헬스 체크 등..
- Kubernetes, Marathon/Mesos, ECS, Docker Swarm, Nomad 와 같은 도구가 있음
프로비전 도구
- 구성 관리, 서버 템플릿 및 오케스트레이션 도구가 각 서버에서 실행되는 코드를 정의한다면 프로비전 도구는 서버 자체를 생성
- 서버만 생성하는 것이 아니라 DB, Cache, LB 등 인프라에 관한 거의 모든 부분을 프로비저닝할 수 있음.
- Terraform, OpenStack Heat, CloudFormation 같은 도구가 있음
테라폼의 주요 특징
- 2014년에 출시했고 클라우드에 상관 없이 여러 클라우드 서비스들을 지원하기 때문에 다중 클라우드, 다중 환경을 관리할 수 있다. Hashicorp 언어를 사용하며 사용자 친화적이다.
- 오케스트레이션 도구이다. 그렇기 때문에 원하는 상태에 있도록 계속 유지하려고 한다. 어떤 부분이 제대로 작동하지 않을 경우 자동으로 계산해서 리로드하려고 한다. 일정한 상태가 필요한 환경에 적합하다.
- 선언적 언어이며, 사용자가 설명한 최종 상태에 도달하려고 노력한다.
- 테라폼 프로비저닝 - 사용자 서버에 대한 액세스 권한 부여, 필수 외부 소프트웨어 설치, Terraform 자격 증명 등 추가 조치 필요
Terraform 장점
- 자동화:
수동으로 서버를 생성하는 게 아니라 코드로 생성 하기 때문에 서버 운영 및 관리가 모두 자동화 될 수 있다. - 속도 와 안전:
코드로 실행 되기 때문에 사람이 수동으로 작업하는 것 보다 훨씬 빠르며 또한 인적 실수 들을 방지할 수 있다. - 문서화:
모든 인프라가 코드로 기록 및 관리 되기 때문에 자동으로 문서화가 된다. 가장 큰 장점 중에 하나인데, 많은 회사에서 인프라를 직접 구현하고 관리한 담당자를 제외하고는 전체 서버를 전부 파악하고 있는 사람이 없는 경우가 많다. - 형상관리:
terraform 코드도 Git 등등을 이용해 형상관리를 할 수 있다. 이 뜻은, 인프라의 변경 기록을 쉽게 볼 수 있다는 뜻이다. - 리뷰 및 테스트:
수동 작업 시 문제가 발견 되었을 때는 이미 프로덕션 애플리케이션에 영향을 주고 난 후인 경우가 많았는데, terraform의 경우 코드 리뷰와 테스트를 통해 문제가 실제로 발생되는 것을 어느 정도 예방할 수 있다. - Reuse:
한번 terraform 코드를 사용해서 인프라를 구축해놓으면 그 후 새로 추가하는 인프라들을 구성하기가 쉬워진다.
앤서블 특징/장단점
- 다양한 클래스와 구성 방법을 활용할 수 있다. Wrapper 모듈로 다른 공급자에 연결하여 구성할 수도 있다. 가볍고 배포 기능이 빠른 것이 장점이다.
- 구성 관리 도구이다. 그렇기 때문에 시스템을 재설정하지 않고 시스템을 교체하는 대신 문제를 복구하려고 한다. 그렇기 때문에 Terraform이 더 상위호환으로 간주된다.
- 선언적, 절차적으로 모두 할 수 있다.
- AWS과 앤서블은 서로 잘 연동된다. S3, Route53, Lambda등 100개에 가까운 모듈을 연결할 수 있다.
앤서블 프로비저닝 - 안정적인 프로비저닝 가능
Ansible 장점
- SSH 기반이므로 원격노드에 Agent를 설치 할 필요 X
- YAML 언어로 간편하게 작성 가능
- 간단하고 명확한 구조
- 변수 기능을 사용하여 같은 작업에 대해서 다른 구성으로 쉽게 구성 가능
- 다른 도구에 비해 훨씬 간소화 된 코드 기반
'INFRA > DevOps' 카테고리의 다른 글
[Docker] Docker Engine 설치 실습 (0) | 2022.06.14 |
---|---|
Service - 2 (0) | 2022.06.13 |
[K8S] 배포전략 (0) | 2022.06.09 |
[Docker] Container 개요 (0) | 2022.06.07 |
IaC란 무엇일까? (0) | 2022.06.03 |
댓글