[Ansible] Ansible 이란?
- 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
(* 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가 제작)
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> 지정하여 실행