[Ansible] Vagrant

728x90

ansible 공식 문서

https://docs.ansible.com/

teraform 공식 문서

https://www.terraform.io/intro

코드 형태로 Public Cloud 를 프로비저닝하는 방법이다. 문법은 엄청 단순하다.

choco

윈도우 용 패키지 관리자 프로그램

MAC 의 Homebrew 같은 프로그램이다.

쿠버네티스나 AWS CLI 도커 등을 다운받을 때 아주 간단하게 다운로드 할 수 있다.

https://chocolatey.org/

  1. windows terminal 을 microsoft store 에서 다운로드 한 뒤 우클릭 → 관리자 권한으로 실행 클릭하여 실행한다. CMD 로 실행하면 안된다.
  2. Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) 
  3. 위 명령어를 커맨드 라인에 붙여넣는다.
  4. compmgmt.msc 에서 사용자 그룹을 확인할 수 있다. Administrators 라는 그룹에 사용자가 속해있어야 관리자 권한으로 프로그램을 실행할 수 있다. 만약 관리자 권한으로 실행이 안된다면 이쪽을 확인해보자.
  5. 설치가 완료됐다면 choco --version 명령어를 입력해서 버전을 확인해보자.

Choco 명령어

  • choco list -l : 로컬 환경에 choco 로 설치한 패키지들 리스트 확인한다.
  • choco search 패키지명 : 패키지 관리자에 해당 패키지가 있는지 찾는다.
  • choco info 패키지명 : 패키지 관리자를 통해 해당 패키지 정보를 확인한다.
  • choco install 패키지명 : 패키지 관리자를 통해 패키지를 다운로드 한다.

Vagrant

공식 문서 : https://www.vagrantup.com/

가상 컴퓨터를 쉽게 만들어주고 배포해주는 도구로 모든 작업들을 코드로 처리한다.

중점은 Vagrantfile 을 어떻게 구성해서 만들 것인지가 중점이다.

디렉토리를 생성해준다.

Vagrant 는 작업하고 있는 디렉토리의 위치가 중요하다.

똑같은 명령어라도 디렉토리 위치가 다르면 다르게 작동한다.

Vagrant Boxes : https://app.vagrantup.com/boxes/search → 미리 준비된 이미지를 받을 수 있는 사이트이다. 즉, 이미지를 공유하는 사이트이다.

이미지들이 어떤 가상 머신들을 지원해주는 지도 확인할 수 있다.

centos/7 이미지를 사용해서 가상 머신을 만들어보자.

vagrant init [이미지이름]

해당 명령어로 vagrant 파일을 만들 수 있다.

PS C:\\Users\\CHOI\\vagrant\\test> ls
PS C:\\Users\\CHOI\\vagrant\\test> vagrant init centos/7
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

아래와 같은 Vagrantfile 이 생성된다. 반드시 대문자 V 로 시작해야 한다.

PS C:\\Users\\CHOI\\vagrant\\test> ls

    디렉터리: C:\\Users\\CHOI\\vagrant\\test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----      2022-04-11  오전 11:57             75 Vagrantfile

메모장으로 파일을 열어본 후 주석 처리된 문장들을 전부 제거해보자.

PS C:\\Users\\CHOI\\vagrant\\test> notepad .\\Vagrantfile

주석을 전부 제거하면 아래와 같은 문장들만 남는다.

Vagrant.configure("2") do |config|

  config.vm.box = "centos/7"

end

베이그런트에서 이미지를 박스 이미지라고 표현한다.

즉, config.vm.box 가 뜻하는 것은 이미지를 뜻하는 것이고 여기서는 centos/7 이미지를 사용하겠다는 뜻이다.

vagrant up

중요한 것은 vagrant 파일이 있는 디렉토리에서 실행해야 한다.

vagrant 파일에 있는 이미지를 사용해서 가상 머신을 생성하는 명령어이다.

해당 이미지에서 지원하는 가상 머신에 자동으로 이미지가 실행된다.

실제로 가상 머신에 실행된 것을 확인할 수 있다.

vagrant status

현재 가상 머신의 상태를 확인하는 명령어이다.

PS C:\\Users\\CHOI\\vagrant\\test> vagrant status
Current machine states:

default                   running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.

vagrant 에서 관리하는 이름이 나온다. 그리고 현재 작동 중인 가상 머신이 나온다.

vagrant halt

vagrant 를 통해 실행된 가상 머신의 전원을 끄는 명령어이다.

PS C:\\Users\\CHOI\\vagrant\\test> vagrant halt
==> default: Attempting graceful shutdown of VM...

multi vm 일 경우 halt 뒤에 config.vm.define 에서 정의한 vm 명을 적어서 특정 vm 만 중단시킬 수 있다.

PS C:\\Users\\CHOI\\vagrant\\test> vagrant halt myvm
==> default: Attempting graceful shutdown of VM...

vagrant reload

Vagrantfile 설정을 변경했을 때 가상 머신을 재부팅 해주는 명령어이다.

vagrant suspend

가상 머신을 일시 중지시키는 명령어이다.

vagrant destory

가상 머신을 종료하고 삭제해주는 명령어이다.

PS C:\\Users\\CHOI\\vagrant\\test> vagrant destroy
    default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Forcing shutdown of VM...
==> default: Destroying VM and associated drives...

multi VM 일 경우에 아래 처럼 둘 다 삭제할 수 있거나 vagrant destroy [가상 머신 이름] 을 적으면 된다.

vagrant ssh

가상 머신에 ssh 키 기반으로 가상 머신에 접근하게 해주는 명령어이다.

기본적으로 루트 아이디도 비밀번호도 없기 때문에 버츄얼 머신으로 접속을 할 수 없다.

명령어로만 접속을 해야 한다.

PS C:\\Users\\CHOI\\vagrant\\test> vagrant ssh
[vagrant@localhost ~]$

만약 multi vm 일 경우 config.vm.define 에서 정의한 vm 명을 뒤에 적어서 접속을 해야 한다.

PS C:\\Users\\CHOI\\vagrant\\test> vagrant ssh myvm
[myvm@localhost ~]$

Vagrantfile 예제

Vagrant.configure("2") do |config|
    # Define VM
    config.vm.define "myvm1" do |centos|
        centos.vm.box = "centos/7"
        centos.vm.hostname = "myvm1"
        centos.vm.network "private_network", ip: "192.168.56.11"
        centos.vm.provider "virtualbox" do |vb|
            vb.name = "myvm1"
            vb.cpus = 2
            vb.memory = 2048
        end
        config.vm.provision "shell", inline: <<-SHELL
            #!/bin/bash
            echo "hello world" > /tmp/hello.txt
        SHELL
    end

    # Define VM
    config.vm.define "myvm2" do |centos|
        centos.vm.box = "centos/7"
        centos.vm.hostname = "myvm2"
        centos.vm.network "private_network", ip: "192.168.56.12"
        centos.vm.provider "virtualbox" do |vb|
            vb.name = "myvm2"
            vb.cpus = 2
            vb.memory = 2048
        end
        config.vm.provision "shell", inline: <<-SHELL
            #!/bin/bash
            echo "hello world" > /tmp/hello.txt
        SHELL
    end
end
  • Vagrant.configure() 로 시작해서 end 로 끝나야 한다.
  • Vagrantfile 하나에다가 여러개의 가상 머신을 만들 수 있다.
  • config.vm.define 에서 end 가 하나의 가상 머신을 정의하는 부분이다.
  • config.vm.define “myvm” ⇒ vagrant 에서 관리해주는 가상 머신의 이름을 설정하는 곳이다.
  • centos.vm.box ⇒ 어떤 이미지를 사용할 지 작성하는 곳이다.
  • centos.vm.hostname ⇒ 가상 머신 내에서 사용하는 호스트 명을 설정해주는 곳이다.
  • centos.vm.network ⇒ private 네트워크, public 네트워크 설정과 IP 세팅을 해주는 곳이다.
  • centos.vm.provider ⇒ 공급자라는 뜻으로 가상화 도구를 뜻한다. 그래서 사용하고자 하는 가상화 도구를 작성하면 된다.
  • vp.name ⇒ 버츄얼 박스에서 표시되는 이름을 뜻한다.
  • vp.cpus ⇒ cpu 갯수를 설정하는 곳이다.
  • vp.memory ⇒ 메모리를 몇 MB 사용할 것인지 설정하는 곳이다.
  • config.vm.provision “shell” ⇒ 쉘 스크립트를 사용하여 배치 스크립트를 작성할 수 있다.

PS C:\\Users\\CHOI\\vagrant> notepad Vagrantfile
PS C:\\Users\\CHOI\\vagrant> mv .\\Vagrantfile.txt .\\Vagrantfile
PS C:\\Users\\CHOI\\vagrant> ls

    디렉터리: C:\\Users\\CHOI\\vagrant

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2022-04-11  오후 12:36                myvm

d-----        2022-04-11  오후 12:26                test

-a----        2022-04-11  오후 12:37            426 Vagrantfile

PS C:\\Users\\CHOI\\vagrant> vagrant up
PS C:\\Users\\CHOI\\vagrant> vagrant ssh
[vagrant@myvm ~]$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 142
Model name:            Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
Stepping:              10
CPU MHz:               1800.003
BogoMIPS:              3600.00
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              6144K
NUMA node0 CPU(s):     0,1
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single fsgsbase avx2 invpcid rdseed clflushopt md_clear flush_l1d
[vagrant@myvm ~]$ head /proc/meminfo
MemTotal:        1881936 kB
MemFree:         1663796 kB
MemAvailable:    1643604 kB
Buffers:            2068 kB
Cached:           100288 kB
SwapCached:            0 kB
Active:            73156 kB
Inactive:          72840 kB
Active(anon):      43832 kB
Inactive(anon):     8464 kB
728x90