본문 바로가기
교육

[37일 차] 21.09.09 : Ansible 1(Playbook 개념, Vagrant 설치 및 기초)

by ballena 2021. 9. 9.

1교시

 

 

레시피를 하나로 파일로 만든 것이 플레이북. 해당 플레이북을 앤서블로 뿌리는 것.

 

모듈 'service'

ex) ansible all -m service -a "name-httpd state=started" -k

 

  • Playbook 

여러 단계가 필요한 작업을 수행하기 위한 파일. 미리 정의된 작업을 수행하는 절차적 의미

 

코딩을 YAML로 할 수도 있고, JSON으로 할 수도 있지만, 우리는 전자의 방식으로 학습할 것이다.

 

플레이북은 ansible-playbook이라는 파일(명령)로 실행된다. 

실습을 위해 노드들에 설치된 httpd 삭제 : ansible all -m yum -a "name=httpd state=absent" -k

nginx로 실습 진행 예정.

들여 쓰기(스페이스 2번)가 중요!

vim nginx_install.yml

처음의 ' --- '는 이 파일이 YAML 파일임을 명시하는 줄이다.

첫 name은 이 playbook의 이름이다.

hosts는 이전에 /etc/ansible/hosts에 작성했던 그룹 이름이다. 이 그룹으로 묶여 있는 노드들에게 이 작업을 실행하겠다는 것이다.

gather_facts는 나중에 설명할 예정이니 넘어간다.

 

이제 실제 수행할 작업이 tasks 하단에 작성된다.

name은 특정 작업의 이름을 명시하는 것이다. 필수는 아니지만 알아보기 쉬우려면 계속 명시해주는 것이 좋다.

그 아래에는 모듈을 통한 작업이 작성된다. 

-> 최신 버전으로 설치하려면 present가 아닌 latest로 작성한다.

 

 

이제

ansible-playbook nginx_install.yml -k

로 실행하면 

task 진행 과정이 보인다.

changed라고 뜨면 작업이 에러 없이 잘 수행된 것이다. 에러가 발생하면 다른 글씨가 뜨겠지.

마지막에 수행 결과가 종합적으로 뜬다.

 

대충 playbook이 이런 역할을 한다는 것을 알아보기 위한 실습이었다.

 

앞으로 실습할 때 다수의 인프라를 구축하고 없애고를 반복해야 하는데, 이번 실습처럼 VirtualBox로 복제를 할 수 있더라도 시간이 많이 걸린다. 그래서 앞으로 실습에서 사용할 프로그램이 Vagrant다.


2교시

 

 

Vagrant 설치(https://www.vagrantup.com/downloads)

실습 진행은 Windows CMD에서 진행하는데, 글꼴 때문에 문자를 헷갈리는 것에 주의.

+ 사용자명, 경로명 등에는 한글 쓰지 말 것. 에러 발생한다.

 

베이그란트를 사용하면 실습에 맞게 가상 인프라를 빠르게 관리할 수 있다.

 

  • Vagrant 명령어

1. vagrant init : 프로비저닝을 위한 예제 스크립트 생성

2. vagrant up : 베이그런트 파일을 읽어 들여 프로비저닝 진행

3. vagrant halt : 베이그런트에서 다루는 가상 머신들 종료

4. vagrant destroy : 베이그란트에서 관리하는 가상 머신들 삭제

5. vagrant ssh : 베이그란트에서 관리하는 가상 머신에 SSH로 접속

6. vagrant provision : 베이그란트에서 관리하는 가상 머신에 변경된 설정을 적용

 

베이그란트를 설치한 디렉터리(C:\HashiCorp)로 이동해서 vagrant init 실행

생성된 Vagrantfile을 보면 대충 15행쯤에

config.vm.box = "base"

가 있는데, base 부분에 사용할 OS를 넣어서 vagrant up을 진행하면 된다. 사용할 OS를 어떻게 적어 넣을 것인지는

https://app.vagrantup.com/boxes/search

에서 찾아보면 된다.

 

base를 centos/7으로 수정 후 Vagrantfile이 있는 위치에서 vagrant up 실행

-> VirtualBox를 열어 보면 VM이 생성되고 있는 것이 보인다.

-> 기본값이 VirtualBox다. 

 

설치가 끝난 후, vagrant ssh를 실행하면 만들어진 VM으로 들어간다.

베이그란트는 생성될 떄 개인키와 공개키를 만들고, 가상 머신을 만들 때 공개키를 보내 놓는다.

그럼 vagrant ssh를 실행하면 가상 머신에 넣어놓은 공개키로 인증이 된다. 그래서 다른 절차 없이 바로 접속되는 것이다.

 

호스트로 돌아와서, 실습의 편의성을 위해 플러그인 설치

vagrant plugin install vagrant-vbguest

-> 아래에서 다시 언급하겠지만, 최신 버전 플러그인을 사용하니 문제가 많이 발생했다. 이전 버전으로 설치하자.


3교시

 

 

Vagrantfile을 아래와 같이 수정(교재 p.100~104).

 

Vagrant.configure("2") do |config|
  config.vm.define "ansible-server" do |cfg|                   -> vagrant 안에서 식별하는 이름
    cfg.vm.box = "centos/7"
    cfg.vm.provider "virtualbox" do |vb|
      vb.name = "Ansible-Server(github_SysNet4Admin)"      -> 실제 VirtualBox에서 인식하는 이름
    end
    cfg.vm.host_name = "ansible-server"                         -> 서버 이름
    cfg.vm.network "public_network", ip: "VM에 사용할 IP 주소"
    cfg.vm.network "forwarded_port", guest: 22, host: 60010, auto_correct: true, id: "ssh"
    cfg.vm.synced_folder "../data", "/vagrant", disabled: true

    cfg.vm.provision "shell", inline: "yum install epel-release -y"

    cfg.vm.provision "shell", inline: "yum install ansible -y"
  end
end

 

블록 1. config 

-> 전체를 감싸고 있다.

블록 2. cfg

블록 3. vb

 

이제 저장하고 vagrant up 실행하면 설정했던 이름 - Ansible-Server(github_SysNet4Admin)으로 VM이 생성된다.

이 장비를 vagrant는 ansible-server라는 이름으로 인식하고 있다.

 

만들어진 VM에 vagrant ssh로 접속.

aisible 명령어 설치를 위해 

cfg.vm.provision "shell", inline: "yum install epel-release -y"

cfg.vm.provision "shell", inline: "yum install ansible -y"

를 추가한다.

이후 vagrant provision 명령을 실행해서 추가한 구문을 수행.

-> 이미 배포된, 운영 중인 장비를 업데이트

-> 이미 존재하는 장비에 vagrant up을 실행하면 "이미 존재하는 장비니, vagrant provision을 실행하라"는 구문이 뜬다.

 

아무튼 이렇게 추가하고 설치가 끝나면 vagrant ssh로 접속해서 ansible이 설치되었는지 확인한다.

 

이제 호스트에서 yml 파일을 만들어서 베이그란트를 통해 만든 VM으로 보내고, 이 VM이 다른 VM으로 환경 설정을 뿌릴 수 있게 하자. 이러면 완전히 동일한 환경들이 만들어질 것이다.

Vagrantfile에 아까 썼던 곳 아래에 이어서

    cfg.vm.provision "shell", inline: "yum install ansible -y"
    cfg.vm.provision "file", source: "ansible_env_ready.yml", 
      destination: "ansible_env_ready.yml"
    cfg.vm.provision "shell", inline: "ansible-playbook ansible_env_ready.yml"

작성.

※ 쓰다가 행이 길어서 명령을 이어가며 줄바꿈을 하고 싶다면, 줄바꿈 후 들여 쓰기를 해줘야 한다.


4교시

 

 

환경 조성을 위한 ansible_env_ready.yml 파일을 Vagrantfile과 같은 경로에 만든다(교재 p. 108).

Vagranfile을 통한 Ansible 환경 조성

쉘에서 실행할 여러 개의 명령을 

shell: "{{ item }}"
with_items:

  - "명령1"

  - "명령2"

이런 식으로 한 번에 넣을 수 있다.

 

ssh 원격 로그인 시 vagrant라는 사용자로 로그인된다(비밀번호도 vagrant). 기본적으로 root 사용자는 차단되어 있다.

-> 중요 파일 수정 시 sudo 필수

 

어쨌거나 ansible_env_ready.yml 파일을 만들고 vagrant provision 하는데, 에러가 났다면 대부분은 오타 문제다.


5교시

 

 

교재 119~120 페이지

-> Vagrantfile에 Ansible-Server와 Ansible-Node01~03을 한 번에 넣어서 vagrant up

-> 원래 up 한 번에 4개가 쫙 만들어져야 하는데, 뭔 문제인지 하나 설치하고 자꾸 먹통이라 up 4번 실행해서 4개 설치했다.

-> ansible-server에 패키지 설치도 안되어 있어서 다시 명령을 실행해서 설치했다.

-> disabled 관련 버그 같다고 보인다. 

 

에라이 팍 씨


6~8교시

 

 

하도 에러가 펑펑 터져서 진행할 수가 없을 정도다.

이리저리 찾아보니 스택오버플로나 깃허브에도 vbguest 플러그인 관련 말이 많아서 그 길을 따라가기로 했다.

vagrant plugin uninstall vagrant-vbguest
vagrant plugin install vagrant-vbguest --plugin-version 0.21

현재 플러그인을 삭제하고 이전 플러그인을 설치한다.

c:\HashCorp에 있던 .vagrant 폴더도 삭제하고 다시 처음부터 해보자.

VirtualBox 파일들도 삭제하고...

 

1. 일단 VM 4개(ansible-server, ansible-node01~03)가 한 번에 설치되었다.

2. vagrant ssh ansible-server로 들어가 보니 IP 주소가 설정했던 대로 고정되어 있다.

3. 처음 up 할 때 yml 파일을 통한 원격 관리가 작동하는 것을 확인했다.

4. bash_ssh_conf_4_CentOS.sh는 미리 작성해놨기에 ans all -m ping -k를 통한 핑 테스트도 성공했다.

 

 

복습은 대충 3장 부분을 보면 될 것 같다. 

 

오후 타임은 플러그인 때문에 거의 날렸다.

vagrant halt로 장비들을 끄고, 다시 사용할 때 vagrant up 해주면 된다.

내일은 4장(146 페이지)부터 나갈 예정


4교시(12:50~13:00) ansible_env_ready.yml 설명 다시 듣기(교재 111~118 페이지)

 

교재는 '우아하게 앤서블'이다.

아무래도 초반 부분은 교재를 충실히 보면 수업 내용과 똑같다.

'교육' 카테고리의 다른 글

[Ansible/Vagrant] 정리 1  (0) 2021.09.12
[38일 차] 21.09.10 : Ansible 2  (0) 2021.09.10
[36일 차] 21.09.08 : Linux Server 15  (0) 2021.09.08
[35일 차] 21.09.07 : Linux Server 14  (0) 2021.09.07
[34일 차] 21.09.06 : Linux Server 13  (0) 2021.09.06

댓글