Bosh Monitoring Agent 설치 가이드(AWS)

1. 문서 개요

1.1. 목적

클라우드 환경에 서비스 시스템을 배포할 수 있는 BOSH는 릴리즈 엔지니어링, 개발, 소프트웨어 라이프사이클 관리를 통합한 오픈소스 프로젝트로 본 문서에서는 로컬 환경에 MicroBOSH와 BOSH를 설치하여 기능을 테스트할 수 있는 환경을 구축하는 데 목적이 있다.

1.2. 범위

본 가이드에서는 오프라인 Linux 환경(Ubuntu 14.04)을 기준으로 설치환경 구성 및 BOSH CLI 설치하고, 이를 이용하여 MicroBOSH 및 BOSH를 설치하는 것을 기준으로 작성하였다.

1.3. 참고자료

본 문서는 Cloud Foundry의 BOSH Document를 참고로 작성하였다.
BOSH Document: http://bosh.io

2. Basic BOSH Workflow

본 문서의 목적에서도 언급했듯이 BOSH는 클라우드 환경에 서비스를 배포 관리하는 소프트웨어로 BOSH자체도 클라우드에 배포되어야 하는 서비스로 설치 환경이 구성되어 있는 서버로부터 MicroBOSH만을 설치하여 운영하는 방법과 MiroBOSH 로부터 배포된 BOSH를 이용하는 방법 2가지 유형이 있으니 자신의 로컬 설치 환경에 따라 선택할 수 있다.
bosh-workflow
MicroBOSH (Single-VM BOSH)는 소프트웨어 배포 및 관리를 하나의 VM에서 수행하는 소프트웨어로 MicroBOSH를 배포하기 위해서는 Stemcell 이미지와 배포 Manifest파일이 필요하고 별도의 소프트웨어 Release는 필요로하지 않는다. (설치에 필요한 Release들은 Stemcell내부에 탑재되어 있다. )
MicroBOSH를 설치한 후에는 선택에 따라 MicroBOSH를 이용하여 BOSH (Multi-VM BOSH)를 배포하거나 또는 다른 서비스들을 배포할 수도 있다.

3. BOSH 설치 패키지 구성 요소

다음의 설치 패키지는 MicroBOSH와 BOSH를 설치하기 위한 패키지로 아래의 구성 항목을 로컬 설치 환경의 기준 디렉토리(“workspace”)로 복사한다.
구분
디렉토리
파일명
설명
공통
OpenPaaS-Env
bosh-init-0.0.81-linux-amd64
BOSH init 실행 파일
공통
OpenPaaS-Env
bosh_gem_package.tar
BOSH CLI 설치 패키지
공통
OpenPaaS-Env
ruby-2.1.6.tar.gz
Ruby 2.1.6 버전
공통
OpenPaaS-Env/bosh_env_packages
디렉토리 전체
BOSH 실행 환경 설치 패키지
공통
OpenPaaS-IaaS-Controller
bosh-233.tgz
BOSH v233 릴리즈
AWS
OpenPaaS-IaaS-Controller
bosh-aws-cpi-release-36.tgz
BOSH Plugin CPI
AWS
OpenPaaS-Stemcells
light-bosh-stemcell-3147-aws-xen-hvm-ubuntu-trusty-go_agent.tgz
AWS v3147 스템셀 이미지 Bosh-init 설치용
AWS
OpenPaaS-Stemcells
bosh-stemcell-3147-aws-xen-ubuntu-trusty-go_agent.tgz
AWS v3147 스템셀 이미지 Bosh 설치용
AWS
OpenPaaS-Deployment
openpaas-bosh-init-aws-1.0.yml
AWS MicroBOSH 배포 Manifest Sample 파일
AWS
OpenPaaS-Deployment
openpaas-bosh-aws-1.0.yml
AWS BOSH 배포 Manifest Samle 파일

4. Install BOSH CLI

BOSH는 Ruby언어로 구현되어 있으므로 Ruby개발 환경 설치 후 BOSH CLI를 설치해야 한다. BOSH CLI설치 가능한 Ruby버전은 1.9.3 이상이며, 개발 환경에 이미 설치가 되어 있다면 4.1절 Ruby설치는 건너뛰면 된다.

4.1. Ruby 설치

BOSH CLI가 지원하는 Ruby버전 중 2.1.6버전을 설치 대상으로 기술하였고, 상세 설치 절차는 다음과 같다.
  1. 1.
    Bosh Dependency를 설치한다.
    온라인인 경우(권장)
    - Ubuntu의 경우
    1
    $ sudo apt-get update
    2
    $ sudo apt-get install -y build-essential zlibc zlib1g-dev ruby ruby-dev openssl libxslt-dev libxml2-dev libssl-dev libreadline6 libreadline6-dev libyaml-dev libsqlite3-dev sqlite3 libxslt1-dev libpq-dev libmysqlclient-dev
    Copied!
    - CentOS의 경우
    1
    $ sudo yum install gcc ruby ruby-devel mysql-devel postgresql-devel postgresql-libs sqlite-devel libxslt-devel libxml2-devel yajl-ruby
    Copied!
    - OSX의 경우
    1
    $ xcode-select --install
    2
    xcode-select: note: install requested for command line developer tools
    Copied!
    오프라인인 경우
    1
    # 설치환경이 ubuntu (trusty 버전)인 경우 다음의 스크립트를 실행한다.
    2
    $ cd <다운로드 디렉토리>/OpenPaaS-Env/bosh_env_packages
    3
    $ chmod +x ./bosh-packages-install.sh
    4
    $ ./bosh-packages-install.sh
    Copied!
    ※ BOSH 설치 패키지의 구성은 다음과 같다.
    No
    패키지명
    패키지 파일명 (Ubuntu trusty amd64)
    1
    libcomerr2
    libcomerr2_1.42.9-3ubuntu1.3_amd64.deb
    2
    libssl1.0.0
    libssl1.0.0_1.0.1f-1ubuntu2.16_amd64.deb
    3
    libkrb5support0
    libkrb5support0_1.12+dfsg-2ubuntu5.2_amd64.deb
    4
    libk5crypto3
    libk5crypto3_1.12+dfsg-2ubuntu5.2_amd64.deb
    5
    libkrb5-3
    libkrb5-3_1.12+dfsg-2ubuntu5.2_amd64.deb
    6
    libgssapi-krb5-2
    libgssapi-krb5-2_1.12+dfsg-2ubuntu5.2_amd64.deb
    7
    libxml2
    libxml2_2.9.1+dfsg1-3ubuntu4.6_amd64.deb
    8
    libgssrpc4
    libgssrpc4_1.12+dfsg-2ubuntu5.2_amd64.deb
    9
    libkadm5clnt-mit9
    libkadm5clnt-mit9_1.12+dfsg-2ubuntu5.2_amd64.deb
    10
    libkdb5-7
    libkdb5-7_1.12+dfsg-2ubuntu5.2_amd64.deb
    11
    libkadm5srv-mit9
    libkadm5srv-mit9_1.12+dfsg-2ubuntu5.2_amd64.deb
    12
    mysql-common
    mysql-common_5.5.46-0ubuntu0.14.04.2_all.deb
    13
    libmysqlclient18
    libmysqlclient18_5.5.46-0ubuntu0.14.04.2_amd64.deb
    14
    libxslt1.1
    libxslt1.1_1.1.28-2build1_amd64.deb
    15
    libyaml-0
    libyaml-0-2_0.1.4-3ubuntu3.1_amd64.deb
    16
    openssl_1.0.1f-1ubuntu2.16
    openssl_1.0.1f-1ubuntu2.16_amd64.deb
    17
    libstdc++-4.8-dev
    libstdc++-4.8-dev_4.8.4-2ubuntu1~14.04_amd64.deb
    18
    g++-4.8
    g++-4.8_4.8.4-2ubuntu1~14.04_amd64.deb
    19
    g++
    g++_4%3a4.8.2-1ubuntu6_amd64.deb
    20
    libdpkg-perl
    libdpkg-perl_1.17.5ubuntu5.5_all.deb
    21
    dpkg-dev
    dpkg-dev_1.17.5ubuntu5.5_all.deb
    22
    build-essential
    build-essential_11.6ubuntu6_amd64.deb
    23
    libfakeroot
    libfakeroot_1.20-3ubuntu2_amd64.deb
    24
    fakeroot
    fakeroot_1.20-3ubuntu2_amd64.deb
    25
    comerr-dev
    comerr-dev_2.1-1.42.9-3ubuntu1.3_amd64.deb
    26
    krb5-multidev
    krb5-multidev_1.12+dfsg-2ubuntu5.2_amd64.deb
    27
    libalgorithm-diff-perl
    libalgorithm-diff-perl_1.19.02-3_all.deb
    28
    libalgorithm-diff-xs-perl
    libalgorithm-diff-xs-perl_0.04-2build4_amd64.deb
    29
    libalgorithm-merge-perl
    libalgorithm-merge-perl_0.08-2_all.deb
    30
    libtinfo-dev
    libtinfo-dev_5.9+20140118-1ubuntu1_amd64.deb
    31
    libreadline6-dev
    libreadline6-dev_6.3-4ubuntu2_amd64.deb
    32
    libfile-fcntllock-perl
    libfile-fcntllock-perl_0.14-2build1_amd64.deb
    33
    zlib1g-dev
    zlib1g-dev_1%3a1.2.8.dfsg-1ubuntu1_amd64.deb
    34
    libmysqlclient-dev
    libmysqlclient-dev_5.5.46-0ubuntu0.14.04.2_amd64.deb
    35
    libpq5
    libpq5_9.3.10-0ubuntu0.14.04_amd64.deb
    36
    libssl-dev
    libssl-dev_1.0.1f-1ubuntu2.16_amd64.deb
    37
    libpq-dev
    libpq-dev_9.3.10-0ubuntu0.14.04_amd64.deb
    38
    libsqlite3-dev
    libsqlite3-dev_3.8.2-1ubuntu2.1_amd64.deb
    39
    libssl-doc
    libssl-doc_1.0.1f-1ubuntu2.16_all.deb
    40
    libxml2-dev
    libxml2-dev_2.9.1+dfsg1-3ubuntu4.6_amd64.deb
    41
    libxslt1-dev
    libxslt1-dev_1.1.28-2build1_amd64.deb
    42
    sqlite3
    sqlite3_3.8.2-1ubuntu2.1_amd64.deb
    43
    Zlibc
    zlibc_0.9k-4.1_amd64.deb
    44
    libyaml-dev
    libyaml-dev_0.1.4-3ubuntu3.1_amd64.deb
    45
    libruby1.9.1
    libruby1.9.1_1.9.3.484-2ubuntu1.2_amd64.deb
    46
    ruby1.9.1-dev
    ruby1.9.1-dev_1.9.3.484-2ubuntu1.2_amd64.deb
    47
    ruby-dev
    ruby-dev_1%3a1.9.3.4_all.deb
    48
    ruby
    ruby_1%3a1.9.3.4_all.deb
    49
    ruby1.9.1
    ruby1.9.1_1.9.3.484-2ubuntu1.2_amd64.deb
1
※ CentOS, RHEL 또는 OSX의 경우는 표에 해당하는 패키지를 설치한다.
Copied!
  1. 1.
    Ruby 설치
    1
    $ tar -xvzf <다운로드 디렉토리>/OpenPaaS-Env/ruby-2.1.6.tar.gz
    2
    $ cd ruby-2.1.6/
    3
    $ ./configure
    4
    $ make
    5
    $ sudo make install
    Copied!
    ※ Ruby를 컴파일하여 설치할 경우 기본으로 /usr/local/lib에 설치한다.
    ※ 온라인의 경우, rvm 또는 rbenv 등을 이용하여 ruby를 설치할 수 있다. 단, ruby 1.9.3버전 이상을 설치하도록 한다.
  2. 2.
    설치 확인
    1
    # Ruby 버전 확인 (터미널창을 새로 열어서 확인한다.)
    2
    $ ruby -v
    3
    4
    # Ruby 환경설정 확인
    5
    $ gem env
    6
    7
    $ gem env
    8
    RubyGems Environment:
    9
    - RUBYGEMS VERSION: 2.1.6
    10
    - RUBY VERSION: 2.1.6 (2015-04-13 patchlevel 336) [x86_64-linux]
    11
    - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/2.1.0 <- gem 설치 디렉토리
    12
    - RUBY EXECUTABLE: /usr/local/bin/ruby
    13
    - EXECUTABLE DIRECTORY: /usr/local/bin
    14
    - SPEC CACHE DIRECTORY: /home/ubuntu/.gem/specs
    15
    - RUBYGEMS PLATFORMS:
    16
    - ruby
    17
    - x86_64-linux
    18
    - GEM PATHS:
    19
    - /usr/local/lib/ruby/gems/2.1.0
    20
    - /home/ubuntu/.gem/ruby/2.1.0
    21
    - GEM CONFIGURATION:
    22
    - :update_sources => true
    23
    - :verbose => true
    24
    - :backtrace => false
    25
    - :bulk_threshold => 1000
    26
    - REMOTE SOURCES:
    27
    - https://rubygems.org/
    28
    - SHELL PATH:
    29
    - /usr/local/sbin
    30
    - /usr/local/bin
    31
    - /usr/sbin
    32
    - /usr/bin
    33
    - /sbin
    34
    - /bin
    35
    - /usr/games
    36
    - /usr/local/games
    Copied!

4.2. BOSH INIT 설치

Bosh-init은 MicroBOSH를 설치에 사용하는 도구이다. Bosh-init을 설치하는 절차는 다음과 같다.
  1. 1.
    Bosh_init 설치
    - 온라인의 경우
    ※ 다음의 웹사이트에서 설치환경에 맞는 bosh-init 바이너리 파일을 다운로드한다.
1
※ 다운로드 받은 bosh-init에 실행 권한을 부여하고 설치한다. (~/Download 디렉토리에 파일을 다운로드 받았다고 가정)
2
3
$ chmod +x ~/Downloads/bosh-init-*
4
$ sudo mv ~/Downloads/bosh-init-* /usr/local/bin/bosh-init
5
6
7
**- 오프라인의 경우**
8
9
# OpenPaaS 패키지의 bosh-init을 설치
10
$ chmod +x ~/workspace/OpenPaaS-Env/bosh-init-0.0.81-linux-amd64
11
$ sudo mv ~/workspace/OpenPaaS-Env/bosh-init-* /usr/local/bin/bosh-init
Copied!
  1. 1.
    Bosh-init 설치 확인
    1
    $ bosh-init -v
    Copied!

4.3. BOSH CLI 설치

BOSH CLI를 설치하는 절차는 다음과 같다.
  1. 1.
    Bosh_cli 설치
    - 온라인의 경우
    1
    #bosh_cli 패키지 설치
    2
    $ sudo gem install bosh_cli
    3
    ※ gem 설치 디렉토리 소유자가 로그인한 사용자와 동일한 경우는 ‘sudo’를 사용하지 않는다.
    Copied!
    - 오프라인의 경우
    1
    #bosh_cli 의존 패키지 압축해제
    2
    $ sudo tar -xvf ~/workspace/OpenPaaS-Env/bosh_gem_package.tar -C <gem 설치 디렉토리>/cache
    3
    ※ gem 설치 디렉토리는 ‘gem env’를 실행하여 확인한다. (예: /usr/local/lib/ruby/gems/2.1.0)
    Copied!
1
#압축해제한 gem 설치
2
$ sudo gem install --force --local --no-ri --no-rdoc <gem 설치 디렉토리>/cache/*.gem
3
※ gem설치 디렉토리 소유자가 로그인한 사용자와 동일한 경우는 ‘sudo’를 사용하지 않는다.
4
5
#참고: 기존에 설치한 gem 삭제
6
$ sudo gem uninstall -aIx
Copied!
  1. 1.
    Bosh 설치 확인
    1
    $ bosh
    Copied!

5. Install MicroBOSH

본 장에서는 단일 VM에서 동작하는 MicroBOSH를 상용 클라우드 플랫폼인 AWS에 설치하는 절차를 기술한다.

5.1. 설치 절차

MicroBOSH를 배포하기 위해서는 아래와 같이 몇가지 준비 사항들이 사전에 준비되어 되어있어야 한다.
  • IaaS 환경설정: AWS
  • 배포 Manifest 파일 작성
  • MicroBOSH 배포

5.2. AWS 환경설정

MicroBOSH를 배포하기 위한 AWS 사전 준비사항 및 필요한 사항을 아래의 가이드를 참조하여 설정한다.

- 사전 준비 및 확인 사항

  • AWS 계정

- Access Key 설정

1
![account-dashboard](./../images/iaas-setup/aws/account-dashboard.png "account-dashboard")
Copied!
  1. 1.
    화면 우측 상단의 계정을 선택하여 Security Credentials를 선택
  2. 2.
    'AWS IAM' 확인 팝업이 나타나면 'Continue to Security Credentials' 버튼을 선택하여 Security Credentials 화면으로 이동
  3. 3.
    Access Keys를 선택하여 Create New Access Key 버튼을 눌러 Access Key를 생성한다.
  4. 4.
    생성한 키 정보를 확인한다.
    화면의 Access Key ID를 manifest의 access_key_id에 설정한다.
    화면의 Secret Access Key를 manifest의 secret_access_key에 설정한다.
  5. 5.
    다이얼로그 화면을 닫는다.

- Virtual Private Cloud (VPC) 구성

  1. 1.
    화면 우측 상단의 지역메뉴를 선택한다. (현재 N. Virginia 지역에서만 light stemcell을 사용할 수 있다.)
  2. 2.
    AWS 콘솔 화면에서 VPC 메뉴를 선택한다.
  3. 3.
    VPC 마법사를 선택한다.
  4. 4.
    “VPC with a Single Public Subnet” 선택
  5. 5.
    네트워크 정보를 입력하고 VPC 생성 버튼을 눌러 VPC를 생성한다.
  6. 6.
    아래와 같이 생성한 VPC의 목록이 출력된다.
    Subnet ID, CIDR, Availability Zone을 manifest의 네트워크에 설정한다.

- Elastic IP 생성

  1. 1.
    VPC 대시보드에서 ‘Elastic IPs’ 버튼과 ‘Allocate New Address’ 버튼을 차례로 눌러 Elastic IP를 생성한다.
  2. 2.
    팝업창에서 ‘Yes, Allocate’ 버튼을 눌러 Elastic IP를 생성한다.
  3. 3.
    생성한 Elastic IP를 확인한다.
    Manifest 설정에서 Elastic IP를 사용한다.

- Key Pair 생성

  1. 1.
    AWS 콘솔 화면에서 ‘EC2’ 메뉴를 선택하여 EC2 대시보드 화면으로 이동한다.
  2. 2.
    ‘Key Pairs’와 ‘Create Key Pair’ 버튼을 차례로 선택한다.
  3. 3.
    Key Pair 생성 다이얼로그 화면에서 Key Pair명을 입력하여 Key Pair를 생성하고 다운로드 한다.
1
Key pair name에 입력한 값을 manifest의 **default\_key\_name**에 설정한다.
Copied!
  1. 1.
    다운로드한 Key(예: bosh.pem)를 키 보관 디렉토리(~/.ssh)에 옮기고 권한을 변경한다.
1
# Key pair name이 ‘bosh’인 키를 ‘~/Downloads’ 디렉토리에 다운로드 한 경우
2
$ mv ~/Downloads/bosh.pem ~/.ssh/
3
$ chmod 400 ~/.ssh/bosh.pem
4
5
6
‘~/.ssh/bosh.pem’ 값을 manifest의 **private\_key**에 설정한다.
Copied!

- 시큐리티 그룹 생성

  1. 1.
    EC2 대시보드 화면에서 ‘Security Groups’과 ‘Create Security Group’ 버튼을 차례대로 누른다.
  2. 2.
    시큐리티 그룹 생성 팝업화면에서 다음과 같이 값을 입력하여 시큐리티 그룹을 생성한다.
    항목
    설정값
    설명
    Security group name
    임의 (예: bosh)
    시큐리티 그룹명
    Description
    임의 (예: BOSH builds Stemcells)
    시큐리티 그룹에 대한 설명
    VPC
    VPC 구성에서 생성한 VPC
    시큐리티 그룹을 적용할 VPC
  3. 3.
    생성한 시큐리티 그룹에 보안정책을 설정하기 위해 ‘Inbound’ 탭의 ‘Edit’을 선택한다.
  4. 4.
    아래표와 같이 보안정책을 설정한다.
    Type
    Protocol
    Port Range
    Source
    Custom TCP Rule
    TCP
    6868
    My IP
    Custom TCP Rule
    TCP
    25555
    My IP
    SSH
    TCP
    22
    My IP
    All TCP
    TCP
    0-65535
    Custom IP
    All UDP
    UDP
    0-65535
    Custom IP

5.3. 배포 Manifest 작성

MicroBOSH 배포 Manifest는 배포에 필요한 컴포넌트 및 속성 정보를 YAML 파일 형식으로 정의한다.
  1. 1.
    Manifest파일을 저장할 Local 배포 디렉토리를 생성한다.
  2. 2.
    생성한 디렉토리에서 배포 Manifest YAML 파일을 생성하고, 아래의 MicroBOSH 배포 Manifest Template을 복사하여 붙여넣고, 수정으로 쓴 부분을 자신의 Aws 환경에 맞게 편집 후 저장한다. 입력값은 ‘OpenPaaS-Deployment/openpaas-bosh-init-aws-1.0.yml’ 참조
    1
    name: bosh # 배포명
    2
    3
    releases:
    4
    - name: bosh # bosh 릴리즈
    5
    url: file:///<path_to_file>/<release_file_name> # 수정: bosh 릴리즈 파일이 있는 경로 및 파일명
    6
    - name: bosh-aws-cpi # bosh-aws-cpi 릴리즈
    7
    url: file:///<path_to_file>/<release_file_name> # 수정: bosh-aws-cpi 릴리즈 파일이 있는 경로 및 파일명
    8
    9
    resource_pools:
    10
    - name: vms
    11
    network: private
    12
    stemcell:
    13
    url: file:///<path_to_file>/<stemcell_file_name> # 수정: stemcell 파일이 있는 경로 및 파일명
    14
    cloud_properties:
    15
    instance_type: m3.xlarge # VM 타입 (cpu, ram, disk)
    16
    ephemeral_disk: {size: 25_000, type: gp2} # VM에 할당할 ephemeral 디스크 타입
    17
    availability_zone: AVAILABILITY-ZONE # 수정: VM을 생성할 availability zone
    18
    19
    disk_pools:
    20
    - name: disks
    21
    disk_size: 20_000
    22
    cloud_properties: {type: gp2}
    23
    24
    networks:
    25
    - name: private
    26
    type: manual
    27
    subnets:
    28
    - range: 10.0.0.0/24 # 수정: 내부망 서브넷 아이피 대역 (서브넷 CID)
    29
    gateway: 10.0.0.1 # 수정: 내부망 서브넷 게이트웨이 아이피
    30
    dns: [10.0.0.2] # 수정: 내부망 서브넷 DNS
    31
    cloud_properties: {subnet: SUBNET-ID} # 수정: 내부망 서브넷 아이디
    32
    - name: public
    33
    type: vip
    34
    35
    jobs:
    36
    - name: bosh
    37
    instances: 1 # 설치 VM 수
    38
    39
    templates: # 설치할 템플릿 목록 및 템플릿이 참조할 릴리즈명
    40
    - {name: nats, release: bosh}
    41
    - {name: redis, release: bosh}
    42
    - {name: postgres, release: bosh}
    43
    - {name: blobstore, release: bosh}
    44
    - {name: director, release: bosh}
    45
    - {name: health_monitor, release: bosh}
    46
    - {name: registry, release: bosh}
    47
    - {name: aws_cpi, release: bosh-aws-cpi}
    48
    49
    resource_pool: vms # 참조할 리소스풀 명칭
    50
    persistent_disk_pool: disks # 참조할 디스크풀 명칭
    51
    52
    networks: # job에 설정할 네트워크 정보
    53
    - name: private
    54
    static_ips: [10.0.0.6] # 수정: VM에 설정할 내부망 아이피
    55
    default: [dns, gateway]
    56
    - name: public
    57
    static_ips: [ELASTIC-IP] # 수정: VM에 설정할 외부망 아이피
    58
    59
    properties: # job에 설정할 프로퍼티 정보
    60
    nats: # nats 프로퍼티 정보
    61
    address: 127.0.0.1
    62
    user: nats
    63
    password: nats-password
    64
    65
    redis: # redis 프로퍼티 정보
    66
    listen_address: 127.0.0.1
    67
    address: 127.0.0.1
    68
    password: redis-password
    69
    70
    postgres: &db # postgres db 프로퍼티 정보
    71
    listen_address: 127.0.0.1
    72
    host: 127.0.0.1
    73
    user: postgres
    74
    password: postgres-password
    75
    database: bosh
    76
    adapter: postgres
    77
    78
    registry: # registry 프로퍼티 정보
    79
    address: 10.0.0.6 # 수정: VM에 설정할 내부망 아이피
    80
    host: 10.0.0.6 # 수정: VM에 설정할 내부망 아이피
    81
    db: *db
    82
    http: {user: admin, password: admin, port: 25777}
    83
    username: admin
    84
    password: admin
    85
    port: 25777
    86
    87
    blobstore: # blobstore 프로퍼티 정보
    88
    address: 10.0.0.6 # 수정: VM에 설정할 내부망 아이피
    89
    port: 25250
    90
    provider: dav
    91
    director: {user: director, password: director-password}
    92
    agent: {user: agent, password: agent-password}
    93
    94
    director: # 디렉터 프로터피 정보
    95
    address: 127.0.0.1
    96
    name: my-bosh # 디렉터명
    97
    db: *db
    98
    cpi_job: aws_cpi # 플러그인 cpi명
    99
    max_threads: 10 # 디렉터의 worker thread 개수
    100
    user_management:
    101
    provider: local
    102
    local:
    103
    users:
    104
    - {name: admin, password: admin}
    105
    - {name: hm, password: hm-password}
    106
    107
    hm: # hm 프로퍼티
    108
    director_account: {user: hm, password: hm-password}
    109
    resurrector_enabled: true # job이 중지된 경우, 해당 job에 대한 재시작 여부 설정
    110
    111
    aws: &aws
    112
    access_key_id: ACCESS-KEY-ID # 수정: AWS Access Key ID
    113
    secret_access_key: SECRET-ACCESS-KEY # 수정: AWS Secret Key
    114
    default_key_name: bosh # 수정: Key pair 명
    115
    default_security_groups: [bosh] # 수정: security_groups
    116
    region: us-east-1 # 수정: 설치할 region
    117
    118
    agent: {mbus: "nats://nats:[email protected]:4222"} # 수정: agent mbus 설정
    119
    120
    ntp: &ntp [0.pool.ntp.org, 1.pool.ntp.org] # 수정: NTP 서버 설정
    121
    122
    cloud_provider:
    123
    template: {name: aws_cpi, release: bosh-aws-cpi}
    124
    125
    ssh_tunnel:
    126
    host: ELASTIC-IP # 수정: VM에 설정할 외부망 아이피
    127
    port: 22 # VM에 설정할 ssh 포트
    128
    user: vcap # VM에 설정할 사용자 아이디
    129
    private_key: ./bosh.pem # 수정: VM과 연결할 수 있는 개인키 정보
    130
    131
    mbus: "https://mbus:[email protected]:6868" # 수정: VM에 설정할 외부망 아이피
    132
    133
    properties:
    134
    aws: *aws
    135
    agent: {mbus: "https://mbus:[email protected]:6868"}
    136
    blobstore: {provider: local, path: /var/vcap/micro_bosh/data/cache}
    137
    ntp: *ntp
    Copied!

5.4. MicroBOSH 배포

Bosh-init을 이용해 MicroBOSH를 배포한다.
  1. 1.
    터미널 상에 bosh-init의 deploy를 실행한다.
    1
    $ bosh-init deploy <작성한 manifest>
    Copied!
    ※ Deploy를 실행하면 manifest파일 있는 디렉토리에 -state.json 파일이 생긴다. MicroBOSH를 삭제할 경우 필요한 파일이므로 삭제하지 않는다.
  2. 2.
    배포가 성공하면 다음과 같이 Target 설정하면서 기본 계정인 admin/admin으로 로그인한다.
    1
    $ bosh target <ELASTIC-IP>
    Copied!
  3. 3.
    MicroBOSH의 상태정보를 확인한다.
    1
    $ bosh status
    2
    3
    Config
    4
    /home/ubuntu/.bosh_config # BOSH CLI 설정파일 위치
    5
    Director # 현재 설정된 Director 정보
    6
    Name my-bosh # Director 이름
    7
    URL https://<ELASTIC-IP>:25555 # Director URL
    8
    Version 1.3001.0 (00000000) # Director 버전
    9
    User admin # Director 로그인 계정
    10
    UUID dfb961e2-2b0a-4fce-b201-dff4ea3137bc # Director UUID
    11
    CPI aws_cpi # Director의 CPI
    12
    dns enabled (domain_name: microbosh) # Director의 DNS
    13
    compiled_package_cache disabled # Package캐싱 여부 설정
    14
    snapshots disabled # Snapshot 기능 설정 여부
    15
    Deployment
    16
    not set
    Copied!
  4. 4.
    deploy를 삭제할 경우
    1
    $ bosh-init delete <작성한 manifest>
    Copied!
  5. 5.
    bosh-init 배포에 대한 상세한 로그를 출력하고 싶은 경우, 다음과 같이 설정하고 bosh-init을 실행한다.
    1
    # bosh-init 로그출력 레벨 설정
    2
    # 설정 가능한 로그 레벨은 debug, info, warn, error, none로 none이 기본 설정되어 있다.
    3
    $ export BOSH_INIT_LOG_LEVEL=<로그 레벨>
    4
    5
    # 로그를 파일로 출력할 경우
    6
    $ export BOSH_INIT_LOG_PATH=<로그를 출력할 경로>/<로그 파일명>
    Copied!

6. Install BOSH

본 장에서는 이전 장에서 설치한 MicroBOSH 이용하여 BOSH를 설치하는 절차를 기술한다.

6.1. 설치 절차

BOSH CLI를 5장에서 설치한 MicroBOSH로 타겟 설정한 이후 아래의 절차로 설치를 진행한다.
  • BOSH Stemcell 업로드
  • BOSH Release 업로드
  • 배포 Manifest 작성
  • BOSH 배포

6.2. BOSH Stemell 업로드

Stemcell 업로드는 MicroBOSH가 BOSH VM인스턴스를 생성하기 위한 기반 이미지를 등록하는 절차로 기준 디렉토리(“workspace”)에 다운로드 받은 Stemcell을 MicroBOSH에 업로드 한다.
BOSH CLI -> $ bosh upload stemcell [Stemcell 파일명]
1
$ bosh upload stemcell ~/workspace/OpenPaaS-Stemcells/<stemcell 파일명>
Copied!
※ Bosh 설치시는 ‘hvm’ 타입이외의 버전을 사용한다.
Stemcell 업로드가 성공하면 나면 bosh stemcells 명령어을 실행하여 stemcell을 확인한다.
1
$ bosh stemcells
Copied!

6.3. BOSH Release 업로드

기준 디렉토리(“workspace”)에 다운로드 받은 release파일을 아래와 같이 CLI를 이용하여 MicroBOSH에 업로드한다.
BOSH CLI -> $ bosh upload release [release 파일명]
1
$ bosh upload release ~/workspace/OpenPaaS-IaaS-Controller/<release 파일명>
Copied!
release 업로드가 성공하면 나면 bosh releases 명령어을 실행하여 release를 확인한다.
1
$ bosh releases
Copied!

6.4. 배포 Manifest 작성

MicroBOSH 배포 Manifest파일 작성과 동일하게 로컬에 YAML파일을 생성하고, 아래의 BOSH 배포 Manifest을 복사하여 붙여넣고, 수정이라고 쓴 부분을 자신의 Aws 환경에 맞게 편집 후 저장한다. 입력값은 ‘OpenPaaS-Deployment/openpaas-bosh-aws-1.0.yml’ 참조
1
name: bosh # bosh 배포명
2
director_uuid: 3d44c981-d458-47b9-8e95-62d07b87c68f # 수정: MicroBOSH uuid
3
4
release: # bosh 릴리즈 정보
5
name: bosh # 릴리즈명
6
version: latest # 수정: 릴리즈 버전
7
8
compilation:
9
cloud_properties:
10
instance_type: m1.small # 설치 패키지를 컴파일 할 VM의 타입 정보
11
network: default # 설치 패키지를 컴파일 할 VM에 할당할 네트워크 정보
12
reuse_compilation_vms: true
13
workers: 3 # 설치 패키지를 컴파일 할 VM 개수
14
15
update:
16
canaries: 1 # job설치를 시험하기 위한 생성 VM 수
17
canary_watch_time: 3000-120000 # 시험용 VM의 생성 응답대기 시간 (밀리초)
18
max_in_flight: 4 # 동일 Job에 대한 VM을 동시에 생성할 최대 수
19
update_watch_time: 3000-120000 # 시험용 VM의 업데이트 응답대기 시간 (밀리초)
20
21
networks:
22
- name: elastic # 네트워크 이름 설정
23
type: vip # 네트워크 타입 설정 (타입: manual, dynamic, vip)
24
cloud_properties: {}
25
- name: default
26
type: manual
27
subnets: # VPC 네트워크 서브넷 정보 설정
28
- range: 10.0.0.0/24 # 수정: VPC 네트워크 대역 설정
29
dns: [8.8.8.8] # 수정: VPC 네트워크 DNS 설정
30
gateway: 10.0.0.1 # 수정: VPC 네트워크 게이트웨이 설정
31
static: # 수정: 생성할 VM에 할당할 아이피 대역 설정
32
- 10.0.0.6 - 10.0.0.20
33
cloud_properties:
34
security_groups:
35
- bosh # 수정: subnet id와 연계한 시큐리티 그룹명
36
subnet: subnet-e8d03a9e # 수정: VPC의 subnet id
37
38
resource_pools: # VM에 할당할 리소스풀
39
- name: small # small 타입 리소스
40
network: default # small 타입 리소스에 할당할 네트워크 이름
41
size: 6 # small 타입의 job(=VM) 개수
42
stemcell: # small 타입의 job에 적용할 stemcell 정보
43
name: bosh-aws-xen-ubuntu-trusty-go_agent # 수정: stemcell 이름
44
version: latest # 수정: stemcell 버전
45
cloud_properties:
46
instance_type: m1.small # 리소스에 적용할 aws flavor 타입
47
- name: medium # medium 타입 리소스
48
network: default
49
size: 1
50
stemcell:
51
name: bosh-aws-xen-ubuntu-trusty-go_agent # 수정
52
version: latest # 수정
53
env:
54
bosh: # 수정: medium 타입의 VM에 적용할 sha-512로 암호화된 비밀번호
55
password: $6$JA/VRhS7guR2t$kruB3wpqcgyi7Ql2IZIfVC7WP.ZTxjRJ9hbyJV4Xn/wr.mcaOR0MwqAulcKY5gxkFQ0/DJul7UELCKsQ3LrZ71
56
cloud_properties:
57
instance_type: m1.medium
58
59
jobs:
60
- instances: 1 # 생성할 VM 수
61
name: postgres # job(=VM) 이름
62
networks: # job에 할당할 네트워크 설정 정보
63
- default: # 기본 설정 네트워크 정보
64
- dns # 참조 대상의 DNS (네트워크 이름이 default의 DNS를 참조)
65
- gateway # 참조 대상의 게이트웨이 (네트워크 이름이 default의 게이트웨이를 참조)
66
name: default # 참조 대상의 네트워크 이름
67
static_ips:
68
- 10.0.0.6 # 수정: job에 할당할 아이피
69
persistent_disk: 2048 # VM에 persistent 디스크를 할당 할 경우, 디스크 사이즈 설정
70
resource_pool: small # job에 할당할 리소스 타입의 이름
71
template: postgres # job 생성시에 참조할 템플릿 이름
72
- instances: 1
73
name: nats
74
networks:
75
- default:
76
- dns
77
- gateway
78
name: default
79
static_ips:
80
- 10.0.0.7 # 수정
81
resource_pool: small
82
template: nats
83
- instances: 1
84
name: redis
85
networks:
86
- default:
87
- dns
88
- gateway
89
name: default
90
static_ips:
91
- 10.0.0.8 # 수정
92
resource_pool: small
93
template: redis
94
- instances: 1
95
name: blobstore
96
networks:
97
- default:
98
- dns
99
- gateway
100
name: default
101
static_ips:
102
- 10.0.0.9 # 수정
103
persistent_disk: 51200
104
resource_pool: small
105
template: blobstore
106
- instances: 1
107
name: registry
108
networks:
109
- default:
110
- dns
111
- gateway
112
name: default
113
static_ips:
114
- 10.0.0.10 # 수정
115
resource_pool: small
116
template: registry
117
- instances: 1
118
name: director
119
networks:
120
- default:
121
- dns
122
- gateway
123
name: default
124
static_ips:
125
- 10.0.0.11 # 수정
126
- name: elastic
127
static_ips:
128
- 52.99.999.999 # 수정: 디렉터의 경우 관리를 위해 외부에서 접속할 수 있는 아이피를 할당
129
persistent_disk: 4096
130
resource_pool: medium
131
templates:
132
- name: powerdns
133
release: bosh
134
- name: director
135
release: bosh
136
- instances: 1
137
name: health_monitor
138
networks:
139
- default:
140
- dns
141
- gateway
142
name: default
143
static_ips:
144
- 10.0.0.12 # 수정
145
resource_pool: small
146
template: health_monitor
147
148
properties:
149
blobstore:
150
address: 10.0.0.9 # 수정: blobstore에 할당한 아이피(job에서 설정한 아이피와 동일)
151
agent: # agent 설정 정보
152
password: agent # agent 비밀번호
153
user: agent # agent 사용자 아이디
154
director: # 디렉터 설정 정보
155
password: director # 디렉터 비밀번호
156
user: director # 디렉터 사용자 아이디
157
director:
158
address: 10.0.0.11 # 수정: 디렉터에 할당한 아이피(job에서 설정한 아이피와 동일)
159
db:
160
database: bosh # 데이터베이스 이름
161
host: 10.0.0.6 # 수정: postgres에 할당한 아이피(job에서 설정한 아이피와 동일)
162
password: postgres # 데이터베이스 접속 비밀번호
163
user: postgres # 데이터베이스 사용자 아이디
164
name: bosh # 디렉터 이름
165
dns:
166
address: 52.99.999.999 # 수정: PowerDNS에 할당한 아이피(job에서 설정한 아이피와 동일)
167
database:
168
name: powerdns
169
db:
170
database: bosh
171
host: 10.0.0.6 # 수정: postgres에 할당한 아이피(job에서 설정한 아이피와 동일)
172
password: postgres
173
user: postgres
174
password: powerdns
175
recursor: 52.99.9.999 # 수정: MicroBOSH에 할당한 아이피
176
replication:
177
basic_auth: replication:zxKDUBeCfKYX
178
password: powerdns
179
user: replication
180
user: powerdns
181
webserver:
182
password: powerdns
183
env: null
184
hm:
185
director_account:
186
password: admin
187
user: admin
188
email_notifications: false
189
event_nats_enabled: false
190
http:
191
password: hm
192
user: hm
193
pagerduty_enabled: false
194
tsdb_enabled: false
195
nats:
196
address: 10.0.0.7 # 수정: nats에 할당한 아이피(job에서 설정한 아이피와 동일)
197
password: nats
198
port: 4222
199
user: nats
200
postgres:
201
database: bosh
202
host: 10.0.0.6 # 수정: postgres에 할당한 아이피(job에서 설정한 아이피와 동일)
203
password: postgres
204
user: postgres
205
redis:
206
address: 10.0.0.8 # 수정: redis 에 할당한 아이피(job에서 설정한 아이피와 동일)
207
password: redis
208
registry:
209
address: 10.0.0.10 # 수정: registry에 할당한 아이피(job에서 설정한 아이피와 동일)
210
db:
211
database: bosh
212
host: 10.0.0.6 # 수정: postgres에 할당한 아이피(job에서 설정한 아이피와 동일)
213
password: postgres
214
user: postgres
215
http:
216
password: registry
217
user: registry
218
219
ntp: [1.kr.pool.ntp.org, 0.asia.pool.ntp.org, 1.asia.pool.ntp.org] # 수정: NTP 서버 설정
220
221
aws:
222
access_key_id: AKxxxxxxxxxxxxxxxx # 수정: aws access id
223
default_key_name: bosh # 수정: 기본 키 이름
224
default_security_groups: [bosh] # 수정: 기본 시큐리티 그룹명
225
region: us-east-1 # 수정: aws 지역
226
secret_access_key: oDxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 수정: aws access key
Copied!
※ VM의 vcap 아이디의 비밀번호는 다음의 절차를 통해 변경할 수 있다.
1
# 1. 암호화된 비밀번호 생성도구 설치
2
$ sudo apt-get install whois
3
4
# 2. vcap 비밀번호 생성
5
$ mkpasswd -m sha-512
6
Password: <PASSWORD>
7
$6$4A2jmWvsaYv2O37d$WtT5ul2L4IeRcYcGljeYpd9NHuA3dbdUWcHuDInLG9542g0sU.j4/fj.0uVfEQuutTxw3FW4DANgIqn1OGVTq1
8
9
# 3. 생성한 암호화된 비밀번호를 manifest의 env.bosh.password에 적용
Copied!

6.5. BOSH 배포

다음의 절차를 이용해서 BOSH를 배포한다.
  1. 1.
    터미널에서 작성한 BOSH 배포 Manifest파일을 CLI에 설정한다.
    1
    $ bosh deployment <작성한 manifest>
    Copied!
  2. 2.
    아래와 같이 bosh deploy명령어를 이용하여 배포를 실행한다.
    1
    $ bosh -n deploy
    Copied!
  3. 3.
    Target 설정하면서 기본 계정인 admin/admin으로 로그인한다.
    1
    $ bosh target <BOSH-ELASTIC-IP>
    Copied!
  4. 4.
    배포한 BOSH의 상태정보를 확인한다.
    1
    $ bosh status
    Copied!
  5. 5.
    BOSH를 삭제할 경우
    1
    $ bosh target <MicroBOSH-ELASTIC-IP>
    2
    $ bosh delete deployment <BOSH-DEPLOYMENT-NAME>
    Copied!
  6. 6.
    BOSH 배포에서 오류가 발생한 경우, 아래의 명령어를 이용하여 로그를 확인한다.
    1
    $ bosh task <BOSH 배포 task 번호> --debug > <로그 출력 경로>/<로그 파일명>
    Copied!

6.6. BOSH 배포 Troubleshooting

1
Stemcell does not contain an AMI for this region (us-west-2c)
Copied!
Region과 Availability_zone을 혼동하여 설정하거나 AWS에서 지원하지 않는 region을 설정한 경우에 발생한다. 올바른 Region(일반적으로 끝자리가 숫자로 되어있다.) 또는 Availability_zone(일반적으로 끝자리가 알파벳으로 되어있다.)을 설정한다.
1
Non-Windows instances with a virtualization type of 'hvm' are currently not supported for this instance type.
Copied!
hvm 타입의 stemcell을 지원하지 않는 region 또는 Availability_zone을 설정한 경우 발생한다. 해당 region에 배포해야 할 경우, hvm타입이 아닌 stemcell을 사용한다.
위 예제이외의 오류에 대해서는 https://bosh.io/docs/aws-cpi.html를 참조한다.
Last modified 1yr ago