본문 바로가기

Cloud/CloudFoundry

BOSH를 이용하여 VM 생성해보기

BOSH는 IaaS 환경에서 Stemcell, Deployment, Release를 이용하여 VM을 관리하는 툴이다.

위 그림처럼 사용자는 CLI를 통해 접근할 수 있고 BOSH를 통해 띄워진 VM은 BOSH Agent를 가지고 있어서 개별 관리를 해준다. Release Engineering라는 개념을 사용한다. 이는 잦은 릴리즈를 뜻하는데 요즘 유행하는 개발환경과 공통점이 많아보인다. Release Engineering이라는 개념은 아래 글을 보면 빠르게 이해할 수 있다. 언제나 좋은 글을 번역해주는 분들에게 감사드린다.

http://www.looah.com/article/view/983

 

독점 기사: Facebook 릴리즈 엔지니어링 은밀히 들여다 보기 | Looah

독점 기사: Facebook 릴리즈 엔지니어링 은밀히 들여다 보기 Facebook은 캘리포니아 멘로 파크 안...

www.looah.com

잘 모르겠으니, 일단 한 번 BOSH를 사용해본다. 테스트를 위해 진행된 환경은 다음과 같다.

- OS : Ubuntu 18.04.03 LTS

- Memory 8GB, HDD 120GB, CPU 2core, 인터넷이 가능한 환경

 

1. BOSH CLI 설치

 기본적으로 OS는 전부 설치되어 있다는 가정하에 진행한다. BOSH Dependecy를 설치해준다.

sudo apt-get install -y build-essential zlibc zlib1g-dev ruby ruby-dev openssl libxslt1-dev libxml2-dev libssl-dev libreadline7 libreadline-dev libyaml-dev libsqlite3-dev sqlite3

이후 BOSH-CLI를 설치해준다.

$ mkdir -p ~/bosh-env/virtualbox
$ cd ~/bosh-env/virtualbox 
$ curl -Lo ./bosh https://s3.amazonaws.com/bosh-cli-artifacts/bosh-cli-5.3.1-linux-amd64 
$ chmod +x ./bosh $ sudo mv ./bosh /usr/local/bin/bosh 
$ bosh -v version 5.3.1-8366c6fd-2018-09-25T18:25:51Z

(2) VirtualBOX를 설치해준다.

$ sudo apt update 
$ wget --content-disposition https://download.virtualbox.org/virtualbox/5.2.20/virtualbox-5.2_5.2.20-125813~Ubuntu~bionic_amd64.deb 
$ sudo dpkg -i virtualbox-5.2_5.2.20-125813~Ubuntu~bionic_amd64.deb 
$ sudo apt --fix-broken install 
$ sudo /sbin/vboxconfig 
$ VBoxManage --version

(3) bosh-release를 만든다.

먼저 git을 클론해서 필요한 정보를 다운받아준다.

git clone https://github.com/cloudfoundry/bosh-deployment.git
Cloning into 'bosh-deployment'...
remote: Enumerating objects: 98, done.
remote: Counting objects: 100% (98/98), done.
remote: Compressing objects: 100% (77/77), done.
remote: Total 6799 (delta 41), reused 58 (delta 20), pack-reused 6701
Receiving objects: 100% (6799/6799), 1.08 MiB | 1.08 MiB/s, done.
Resolving deltas: 100% (4386/4386), done.

create-env를 실행하여 BOSH 디렉터를 만들어주고, 환경을 구성해준다.

./bosh-deployment/virtualbox/create-env.sh

과정을 보면 BOSH Deirector VM이 생성되고 네트워크 경로도 추가해준다. .envrc라는 파일을 만들어주는데 적용하고 bosh 명령어를 통해 새롭게 만들어진 vbox에 접근할 수 있다.

source .envrc
bosh -e vbox env

이제 디렉터가 만들어졌으니 배포 준비가 끝났다.

(4) cloud config를 업데이트해준다.

bosh-deployment/warden/cloud-config.yml

샘플 파일로 어떻게 구성되는지 볼 수 있다.

azs:
- name: z1
- name: z2
- name: z3

vm_types:
- name: default

disk_types:
- name: default
  disk_size: 1024

networks:
- name: default
  type: manual
  subnets:
  - azs: [z1, z2, z3]
    dns: [8.8.8.8]
    range: 10.244.0.0/24
    gateway: 10.244.0.1
    static: [10.244.0.34]
    reserved: []

compilation:
  workers: 5
  az: z1
  reuse_compilation_vms: true
  vm_type: default
  network: default

 이 파일을 통해 몇 개의 존을 만들지, 네트워크는 어떻게 할지, 워커는 어디에 몇 개 만들지 정할 수 있다. 적용해본다.

bosh -e vbox update-cloud-config bosh-deployment/warden/cloud-config.yml

맹숭맹숭하게 적용된다.

(5) stemcell을 업로드해준다. (+release도 가지고 있음)

얘는 배포시 필요한 패키지나 OS 이미지를 가지고 있다.

bosh -e vbox upload-stemcell https://bosh.io/d/stemcells/bosh-warden-boshlite-ubuntu-xenial-go_agent?v=315.45 \
  --sha1 674cd3c1e64d8c51e62770697a63c07ca04e9bbd

다운받는 파일을 살펴보면 이미지, 패키지 리스트가 있는 것을 볼 수 있다.

(6) sample deployment를 배포해준다.

bosh -e vbox -d zookeeper deploy <(wget -O- https://raw.githubusercontent.com/cppforlife/zookeeper-release/master/manifests/zookeeper.yml)

얘는 이름만 봐도 알 수 있는 zookeeper다. (오랜만에 보니 반갑다)

---
name: zookeeper

releases:
- name: zookeeper
  version: 0.0.10
  url: git+https://github.com/cppforlife/zookeeper-release

stemcells:
- alias: default
  os: ubuntu-xenial
  version: latest

update:
  canaries: 2
  max_in_flight: 1
  canary_watch_time: 5000-60000
  update_watch_time: 5000-60000

instance_groups:
- name: zookeeper
  azs: [z1, z2, z3]
  instances: 5
  jobs:
  - name: zookeeper
    release: zookeeper
    provides:
      conn: {shared: true}
    properties: {}
  - name: status
    release: zookeeper
    properties: {}
  vm_type: default
  stemcell: default
  persistent_disk: 10240
  networks:
  - name: default

- name: smoke-tests
  azs: [z1]
  lifecycle: errand
  instances: 1
  jobs:
  - name: smoke-tests
    release: zookeeper
    properties: {}
  vm_type: default
  stemcell: default
  networks:
  - name: default

yml 파일 내용은 이렇다. ubuntu를 사용하고, zone 1, 2, 3에 5개의 instance를 올린다. 네트워크도 default 값을 사용한다. 이러한 내용은 이전에 만든 cloud-config에 전부 써져있다는 것을 알 수 있다. 

열심히 만드는 모습. 만들어진 vm들은 아래 명령어로 조회할 수 있다.

bosh -e vbox vms

(7) 하란대로 smoke test 해본다. 이건 그냥 잘 돌아가나 테스트해보는거다.

bosh -e vbox -d zookeeper run-errand smoke-tests

테스트가 끝났으면 아래 스크립트를 통해 깔끔하게 지워준다.

./bosh-deployment/virtualbox/delete-env.sh

'Cloud > CloudFoundry' 카테고리의 다른 글

PaaS-TA 교육 이론 정리  (0) 2019.11.29
PaaS-TA 교육 5일차  (0) 2019.11.29
PaaS-TA 교육 4일차  (0) 2019.11.29
PaaS-TA 교육 3일차  (0) 2019.11.29
PaaS-TA 교육 2일차  (0) 2019.11.29