CoreOS 사용하기

이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20

Vagrant로 CoreOS 설치하기

앞에서 VirtualBox로 CoreOS를 설치해보았습니다. 가상 머신 한 개에 CoreOS를 설치했기 때문에 CoreOS를 실행해보는 것 이외에는 큰 의미가 없습니다. 이번에는 Vagrant를 이용하여 가상 머신 세 개를 생성하고 CoreOS를 설치하여 클러스터를 구성해보겠습니다.

Vargrant는 가상 머신을 손쉽게 생성하고 관리하는 도구입니다. 가상화 소프트웨어는 아니기 때문에 VirtualBox나 VMware가 반드시 설치되어 있어야 합니다.


그림 15-19 Vagrant 개념도

Vagrant와 Docker
Vagrant도 Docker처럼 Vagrant Cloud(https://vagrantcloud.com/)를 통해 각종 리눅스 배포판 및 웹 서버, DB 등의 이미지(Box)를 제공하고 있습니다.

Vagrant는 가상화 소프트웨어인 VirtualBox와 VMware를 기반으로한 플랫폼이고, Docker는 리눅스 커널의 cgroups, namespaces를 기반으로한 플랫폼입니다. Vagrant Box는 Docker 이미지와는 달리 완전한 형태의 운영체제 형태입니다.

앞에서 VirtualBox로 CoreOS를 설치할 때 터미널에서 일일이 설정 파일을 생성하고 설치 명령을 실행해야 했습니다. Vagrant를 이용하면 미리 설정된 환경을 이용하여 가상 머신 생성부터 운영체제 설치 및 설정까지 자동으로 진행할 수 있습니다.

Windows와 Mac OS X에서는 다음 주소에서 설치 파일을 다운로드하여 설치하면 됩니다. 설치 방법은 특별한 것이 없으므로 따로 설명하지 않겠습니다.

우분투

$ sudo apt-get install virtualbox
$ wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.6.5_x86_64.deb
$ dpkg -i vagrant_1.6.5_x86_64.deb

CentOS 6

$ sudo yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ curl http://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo -o virtualbox.repo
$ sudo mv virtualbox.repo /etc/yum.repos.d/
$ sudo yum install VirtualBox-4.3 kernel-devel dkms
$ sudo yum groupinstall "Development Tools"
$ sudo yum install https://dl.bintray.com/mitchellh/vagrant/vagrant_1.6.5_x86_64.rpm
$ sudo su
# export KERN_DIR=/usr/src/kernels/2.6.32-431.23.3.el6.x86_64
# /etc/init.d/vboxdrv setup

CentOS 7

$ sudo yum install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm
$ curl http://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo -o virtualbox.repo
$ sudo mv virtualbox.repo /etc/yum.repos.d/
$ sudo yum install VirtualBox-4.3 kernel-devel dkms
$ sudo yum groupinstall "Development Tools"
$ sudo yum install https://dl.bintray.com/mitchellh/vagrant/vagrant_1.6.5_x86_64.rpm
$ sudo su
# export KERN_DIR=/usr/src/kernels/3.10.0-123.6.3.el7.x86_64
# /etc/init.d/vboxdrv setup

CentOS 7 EPEL 패키지 버전
CentOS 7용 EPEL 패키지는 버전이 빠르게 업데이트됩니다. rpm 파일을 받을 수 없을 때는 http://dl.fedoraproject.org/pub/epel/7/x86_64/e/에 접속하여 새 버전이 있는지 확인한 뒤 yum 명령으로 해당 버전을 설치합니다.

이제 Git으로 미리 작성된 CoreOS용 Vagrantfile을 받아옵니다(지금부터 나오는 명령은 Mac OS X, 리눅스, Windows에서 모두 동일합니다. Windows에서는 명령 프롬프트나 PowerShell을 실행하고, Mac OS X에서는 터미널을 실행합니다. 리눅스는 터미널에서 그대로 진행합니다). Git 설치 방법은 ‘8.1.1 개발자 PC에서 Git 설치 및 저장소 생성하기’를 참조하기 바랍니다.

git clone https://github.com/coreos/coreos-vagrant.git
cd coreos-vagrant

이제 클러스터 상태를 저장하기 위해 etcd discovery URL을 할당받아야 합니다. 터미널에서 다음 명령을 실행하거나 웹 브라우저에서 https://discovery.etcd.io/new에 접속합니다.

$ curl -w "\n" https://discovery.etcd.io/new
https://discovery.etcd.io/c0d96ba6f4024d5cabe2484e89bca52f


그림 15-20 etcd discovery URL 할당

CoreOS에서는 etcd를 손쉽게 사용할 수 있도록 discovery URL을 서비스 형태로 제공합니다. 이 URL은 etcd 리더 노드(마스터)를 선출할 때 사용됩니다.

다음 내용을 coreos-vagrant 디렉터리 아래에 user-data 파일로 저장합니다.

user-data

#cloud-config

coreos:
  etcd:
      discovery: https://discovery.etcd.io/<클러스터 ID>
      addr: $public_ipv4:4001
      peer-addr: $public_ipv4:7001
  fleet:
      public-ip: $public_ipv4
  units:
    - name: etcd.service
      command: start
    - name: fleet.service
      command: start
  • #cloud-config는 반드시 맨 앞 줄에 입력합니다.
  • coreos: CoreOS 메인 설정입니다.
  • etcd: etcd 설정입니다.
    • discovery: discovery URL입니다. 앞에서 할당받은 discovery URL을 설정합니다(반드시 https://discovery.etc.io/와 클러스터 ID를 포함하여 설정합니다).
    • addr: clientURL IP 주소이며 현재 서버의 IP 주소를 설정합니다. $public_ipv4를 사용하면 Vagrant가 자동으로 가상 머신에 할당된 IP 주소를 설정해줍니다.
    • peear-addr: peerURL IP 주소이며 현재 서버의 IP 주소를 설정합니다. 마찬가지로 $public_ipv4를 사용하면 Vagrant가 자동으로 가상 머신에 할당된 IP 주소를 설정해줍니다.
  • fleet: fleet 설정입니다.
    • public-ip: 현재 서버의 IP 주소를 설정합니다. $public_ipv4를 사용하면 Vagrant가 자동으로 가상 머신에 할당된 IP 주소를 설정해줍니다.
  • units: 실행할 서비스 설정입니다.
    • name: 서비스 이름입니다. 여기서는 etcd.service, fleet.service를 실행합니다.
    • command: 서비스에 내릴 명령입니다. 여기서는 start를 설정하여 서비스를 시작합니다.

참고
$public_ipv4, $private_ipv4는 Vagrant 뿐만 아니라 Amazon EC2, Google Compute Engine, OpenStack, Rackspace, DigitalOcean에서도 사용할 수 있고, 자동으로 현재 서버의 공인 IP 주소와 사설 IP 주소를 설정해줍니다.

메타데이터 설정하기
메타데이터를 설정하려면 다음과 같이 fleet에 metadata 항목을 추가하면 됩니다. fleetctl을 사용하여 메타데이터가 일치하는 노드에 유닛이 실행되도록 할 수 있습니다.

coreos:
  fleet:
      public-ip: $public_ipv4
      metadata: region=ap-northeast-1,disk=ssd,platform=cloud,provider=amazon

메타데이터는 특별한 규칙은 없으며 각자 편한대로 설정하면 됩니다. 각 메타데이터는 ,(콤마)로 구분합니다.

다음 내용을 coreos-vagrant 디렉터리 아래에 config.rb 파일로 저장합니다.

config.rb

$num_instances=3
$update_channel='stable'

$num_instances에 3을 설정하여 가상 머신을 3개 생성합니다. 그리고 $update_channel에 stable을 설정하여 Stable 버전을 사용합니다.

config.rb.sample과 discovery URL
이번 예제에서는 discovery URL을 할당받은 뒤 user-data 파일에 직접 설정하였습니다. config.rb.sample 파일을 살펴보면 자동으로 discovery URL을 할당받고 user-data 파일에 설정하는 코드가 들어있습니다.

이제 coreos-vagrant 디렉터리에서 다음 명령을 실행하여 가상 머신을 생성합니다(Windows에서는 sudo를 제외합니다)

$ sudo vagrant up

잠시 기다리면 가상 머신이 생성됩니다. Windows에서 VirtualBox 사용자 계정 컨트롤 창이 표시되면 예(Y) 버튼을 클릭합니다. 이제 vagrant status 명령을 입력합니다.

$ sudo vagrant status
Current machine states:

core-01                   running (virtualbox)
core-02                   running (virtualbox)
core-03                   running (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.


그림 15-21 Vagrant로 CoreOS 가상 머신 생성

CoreOS가 설치된 core-01, core-02, core-03 가상 머신이 표시됩니다. vagrant ssh 명령을 사용하여 core-01 가상 머신에 SSH로 접속해봅니다.

$ sudo vagrant ssh core-01
Last login: Sun Sep  7 11:40:28 2014 from 10.0.2.2
CoreOS (stable)
core@core-01 ~ $

vagrant ssh <가상 머신 이름> 형식이며, 간단하게 core-01 가상 머신에 접속했습니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

30 November 2014