로즈마리

글 작성자: daily_zi






아래에 설명하는 내용은 bosh cli 버전 3.0.1 이상에서 적용되며, 

저의 설치 경험과 Cloud Foundry BOSH( https://bosh.io/docs/cli-v2/#create-release ) 를 참조하여 작성하였습니다.


  • Init-Release 

bosh init-release [--git] [--dir=dir]

사용자가 입력한 디렉토리(dir)에 release 생성에 필요한 기본 구조가 생성됩니다. 


$ mkdir -p workspace/releases

$ cd ~/workspace/releases

$ bosh init-release --git --dir test-release

$ ls -al test-release


total 36

drwxrwxr-x 8 heunji heunji 4096  2월 11 16:08 ./

drwxrwxr-x 3 heunji heunji 4096  2월 11 15:47 ../

drwxrwxr-x 2 heunji heunji 4096  2월 11 15:47 config/

drwxrwxr-x 7 heunji heunji 4096  2월 11 18:15 .git/

-rw-rw-r-- 1 heunji heunji  174  2월 11 15:47 .gitignore

drwxrwxr-x 3 heunji heunji 4096  2월 11 15:58 jobs/

drwxrwxr-x 2 heunji heunji 4096  2월 11 16:08 manifests/

drwxrwxr-x 2 heunji heunji 4096  2월 11 15:47 packages/

drwxrwxr-x 2 heunji heunji 4096  2월 11 15:47 src/


  • Generate-Job
bosh generate-job name [--dir=dir]
job 생성에 필요한 기본 구조(monit, spec, templates)가 생성됩니다.

$ cd test-release

$ bosh generate-job haproxy

$ ls test-release/jobs

$ tree jobs

jobs

└── haproxy

    ├── monit

    ├── spec

    └── templates


    • monit

- 모든 job은 시작하고 멈출 수 있는 방법이 필요하다. control 스크립트를 작성하고 monit 파일을 수정한다.

- job에 대한 프로세스 ID(pid) 파일을 지정

- job에 대한 템플릿에서 제공하는 각 명령을 참조

- job이 vcap 그룹에 속하도록 지정

# 기본 monit

check process web_ui
  with pidfile /var/vcap/sys/run/web_ui/pid
  start program "/var/vcap/jobs/web_ui/bin/ctl start"
  stop program "/var/vcap/jobs/web_ui/bin/ctl stop" 

  group vcap

    • templates

- 각 작업에 대해 /var/vcap/sys/log/{JOB_NAME}에 로그를 저장하도록 작업을 구성하는 control 스크립트를 만든다.

  이 스크립트를 해당 job의 templates 디렉토리에 ctl.erb로 저장한다.


#기본 ctl.erb

#!/bin/bash

RUN_DIR=/var/vcap/sys/run/web_ui
LOG_DIR=/var/vcap/sys/log/web_ui
PIDFILE=${RUN_DIR}/pid

case $1 in

  start)
    mkdir -p $RUN_DIR $LOG_DIR
    chown -R vcap:vcap $RUN_DIR $LOG_DIR

    echo $$ > $PIDFILE

    cd /var/vcap/packages/ardo_app

    export PATH=/var/vcap/packages/ruby_1.9.3/bin:$PATH

    exec /var/vcap/packages/ruby_1.9.3/bin/bundle exec \
      rackup -p <%= p('port') %> \
      >>  $LOG_DIR/web_ui.stdout.log \
      2>> $LOG_DIR/web_ui.stderr.log

    ;;

  stop)
    kill -9 `cat $PIDFILE`
    rm -f $PIDFILE

    ;;

  *)
    echo "Usage: ctl {start|stop}" ;;
 

esac


    • spec

컴파일시 BOSH는 템플릿을 파일로 변환 한 다음 작업 VM에서 복제



  • Generate-Package

bosh generate-package name

패키지 생성에 필요한 기분 구조(spec, packaging)이 생성됩니다.

    • spec

- 패키지 명

- 패키지들의 dependencies

- 패키지가 컴파일 할 때 필요로하는 바이너리 및 기타 파일들을 BOSH가 찾을 수 있는 위치

    • packaging
- 컴파일 시 BOSH는 package spec에서 참조하는 소스 파일을 가져 와서 배포 된 작업에 필요한 실행 가능 바이너리 및 스크립트로 렌더링한다.
- BOSH에게 해당 작업을 수행하도록 지시하는 스크립트 파일이다.
- 각 스크립트는 set -e -x 행으로 시작한다. 이렇게하면 명령이 0이 아닌 종료 코드로 종료 될 때 스크립트가 즉시 종료되도록 하여 컴파일 시간에 디버깅을 돕는다.

#spec

---

name: haproxy


dependencies: []


files:

- haproxy/haproxy-1.8.17.tar.gz

- haproxy/pcre-8.42.tar.gz


#packaging

set -e


# Detect # of CPUs so make jobs can be parallelized

CPUS=`grep -c ^processor /proc/cpuinfo`


HAPROXY_VERSION=1.8.17


echo "Extracting pcre..."

tar xzf haproxy/pcre-8.42.tar.gz

pushd pcre-8.42

  ./configure

  make -j${CPUS}

  make install

popd


tar xzf haproxy/haproxy-${HAPROXY_VERSION}.tar.gz

pushd haproxy-${HAPROXY_VERSION}

  make TARGET=linux2628 USE_OPENSSL=1 USE_STATIC_PCRE=1 USE_ZLIB=1 -j${CPUS}

  mkdir ${BOSH_INSTALL_TARGET}/bin

  cp haproxy ${BOSH_INSTALL_TARGET}/bin/

  chmod 755 ${BOSH_INSTALL_TARGET}/bin/haproxy

popd


'클라우드 > CloudFoundry' 카테고리의 다른 글

[OpenStack] BOSH 설치 및 환경설정  (0) 2019.06.24
[BOSH-LITE] CF 설치  (0) 2019.02.15
BOSH-LITE 설치  (0) 2019.02.11