IT/Ansible & Terraform

[Ansible] Ansible 이란?

깅지수 2022. 4. 14. 00:47
  • About Ansible
    • IaC
    • Ansible
    • Ansible Architecture
  • 환경 구성
    • Chocolatey
    • Vagrant

 


 

📓 IaC

: Infrastructure as Code

 

📎 장점

- 비용 절감

- 빠른 속도

- 안정성

- 재사용성, 버전 관리

 

📎 종류 

 

- 구성관리 / 배포

Configruration Management : 패키지 설치, 설정 파일, 파일 복사, ... (OS에서하는 작업들)

                                        ex. Ansible, Chef, Puppet, SaltStack ...

Provisioning : 리소스 관리 (생성, 변경, 삭제)

                  ex. Terraform, Vagrant, AWS CloudFormation

 

- 가변 인프라 / 불변 인프라

Mutable Infra (ex. VM, Ansible)

Immutable Infra (ex. Container, Terraform)

-참고 : 애완동물 vs 소떼(가축)

 

- 절차적 / 선언적

순서 有 (ex. Ansible)

순서 無 (ex. Terraform, Kubernetes) > 주로 선호

 

- 마스터 및 에이전트 유무

마스터, 에이전트 有 : Chef, Puppet, SaltStack (관리용 server가 따로 필요 => 복잡)

마스터, 에이전트 無 : Ansible, Terraform

 


 

📙 Ansible 

: IT 인프라를 구성하고 관리할 수 있는 자동화 도구

YAML 사용 & OpenSSH 기반 

 

https://docs.ansible.com/ansible_community.html

 

Ansible Community Documentation

Ansible Collections Documentation Extend the benefits of simple, powerful, agentless automation with sysadmin, cloud, network, and security collections.

docs.ansible.com

 

 

📃 Ansible Architecture

 

                                                                             제어 노드 (controller) | 관리노드 (Host)

 

- 제어노드 (Control Node, Controller, Ansible Engine)

 : ansible이 설치되는 시스템

 ❕조건 : Unix 계열만 가능 (즉, window 시스템이 제어노드가 될 수는 x), python 설치

 

- 관리노드 (Managed Node, Target Node, Host ...)

 : BM, VM, Instance, Network Device ...

 ❕조건 : SSH가 가능한 시스템, python 설치 (window의 경우 WinRM 사용)

 

- 인벤토리

 : 정적 인벤토리 - 관리 노드의 목록 파일

   동적 인벤토리 - 클라우드, CMDB에서 관리 노드 목록 가져옴  (내가 직접 작성하는게 x 동적으로 가져옴)

 

- 플러그인

 : Ansible 기능 확장

 

- 모듈

 : Ansible 작업 실행할 수 있는 기본 단위, Python Code

 

- 테스크

 : 하나의 모듈을 실행 = 하나의 task


- Ad-Hoc

 : user가 직접 engine을 사용, Ansible 임시 실행을 의미, 하나의 모듈을 실행

 

- Play

 : 하나 이상의 task 모음 

 

- Playbook

 : user가 playbook을 통해 engine을 사용, 하나 이상의 플레이 모음, YAML (data를 표현하는 하나의 format) 파일

 

 


 

📃 환경 구성

 

🔎 Chocolatey 

https://chocolatey.org/

(* mac은 homebrew)

: 설치 도구, terminal 관리자 권한으로 실행

 

choco install vagrant

choco를 이용해 vagrant 설치 후, 재부팅

 

 

Chocolatey - The package manager for Windows

Chocolatey is software management automation for Windows that wraps installers, executables, zips, and scripts into compiled packages. Chocolatey integrates w/SCCM, Puppet, Chef, etc. Chocolatey is trusted by businesses to manage software deployments.

chocolatey.org

 

 

🔎 Vagrant

: 개발 환경을 쉽게 배포하게 해주는 도구, VM 쉽게 구성하고 배포 가능

(terraform 제작사인 HashiCorp가 제작)

https://www.vagrantup.com/

 

Vagrant by HashiCorp

Vagrant enables users to create and configure lightweight, reproducible, and portable development environments.

www.vagrantup.com

이미지 제공 : https://app.vagrantup.com/boxes/search

 

Vagrant Cloud by HashiCorp

Vagrant Cloud by HashiCorp

app.vagrantup.com

 

 

🔎 Vagrant 명령어

 

- Vagrantfile 생성

vagrant init <IMAGE> #centos/7

 

  * Vagrantfile 예제

```ruby
Vagrant.configure("2 (version) ") do |config|
	config.vm.define "myvm (vagrant에서 표시하는 이름)" do |centos|
		centos.vm.box = "centos/7"
		centos.vm.hostname = "myvm" #접속시, host name
		centos.vm.network "private_network", ip: "192.168.56.10"
		centos.vm.provider "virtualbox" do |vb|
			vb.name = "myvm" #VM에서 표시되는 이름
			vb.cpus = 2
			vb.memory = 2048
		end
		config.vm.provision "shell", inline: <<-SHELL #user data
			#!/bin/bash
			echo "hello world" > /tmp/hello.txt
		SHELL
        # myvm에 대한 설정
	end >> 하나의 VM
end
```

 

- VM 생성 및 부팅

vagrant up

 

 

Encoding::CompatibilityError: incompatible character encodings: UTF-8 and CP-949 에러 발생

 => 경로에 한글이 포함되어 있어서 vagrant 설정 파일을 인식 x

 

- VM 상태 확인

vagrant status

- VM 종료

vagrant halt

- VM 재부팅

vagrant reload

- VM 삭제

vagrant destroy

- VM 일시정지

vagrant suspend

- VM 일시정지 해제

vagrant resume

 

- VM SSH 접속

vagrant ssh

   * multi VM 의 경우 명령어 뒤에 <VM_NAME> 지정하여 실행