雜夫's Blog development architecture integration operation

linux on dex 소개

갤럭시탭s4에 dex on linux 설치 및 사용기

Shell Programming 가이드

  • 쉘 프로그래밍 작성시 주의해야 할 부분, 어떻게 작성해야 하는지
  • Linux에 익숙하지 않은 개발자가 Devops환경에 적당히 적응하기 위한 쉘 사용법

Bosh 소개

Bosh 소개

bosh란?

  • Chef, puppet, ansible과 유사한 기능을 하는 대규모 분산 환경에서 사용하는 management, deployment 도구
  • BOSH can provision and deploy software over hundreds of VMs. It also performs monitoring, failure recovery, and software updates with zero-to-minimal downtime.
  • BOSH is an open source tool for release engineering, deployment, lifecycle management and monitoring of distributed systems (chef on steroids)
  • 다음과 같은 종류가 있음 : (Full)Bosh, Direct-VM(micro-bosh), BOSH-lite
어플리케이션을 릴리즈하고, VM을 생성하고 종료하는 등 다양한 작업이 가능하나, 주로 CF등 PaaS와 연계하여 사용하므로, 기존의 다른 도구들(Chef등) 과는 그 개념이 많이 다른편이다. CF외 다른 플랫폼에도 사용할 수 있을 것 같으나, 생각보다 러닝커브가 큰 편임. 기본적으로 다른 도구와 달리 OS의 명령을 사용하지 않으며, ssh등으로 명령을 전송하기 어렵다.(할 수는 있으나, 번거로움)

bosh 아키텍처

기본적으로 관리자가 CLI를 통해 명령을 수행하며, 해당 명령은 Director를 통해 CF 상의 VM에서 실행되고 수행된다. https://bosh.io/docs/images/bosh-architecture.png 디플로이 절차 https://bosh.io/docs/images/deploy-sequence.png

bosh 내부용어

  • release : 어플리케이션을 빌드하고 디플로이 하기 위한 버전 관리되는 설정 프로퍼티, 템플릿, 스크립트, 소스코드, 바이너리 파일 등의 집합
  • deployment : stemcell로 부터 생성된 VM의 집합, 특정 release로 부터 생성되고, 디스크에 데이터를 저장한다. Director라고 하는 중앙 서버의 배치 manifest에 의해 생성되고 관리된다.
  • stemcell : BOSH(CF)에서 사용하는 VM이미지, Director와 연결되는 agent를 기본적으로 가지고 있는 OS 이미지인 듯 하다. Director를 통해서만 VM을 생성할 수 있다.

bosh 테스트

bosh-lite를 통해 로컬의 Virtualbox상의 VM에 테스트 환경을 구성하고, 어플리케이션을 릴리즈, CF를 디플로이 하는 방법을 테스트 해 본다. 테스트는 Ubuntu 16.04 LTS에서 수행하였으며, 설치된 bosh의 버전은 3.x임.(테스트 시점은 2018.04)

테스트 환경 구성

설치는 그렇게 어렵지 않으나, 원래 대규모 서비스용으로 개발된 도구이다 보니, 개발용으로는 작게 만들어진 bosh-lite를 써야 한다. bosh-lite 설치 : 공식 문서(https://bosh.io/docs/bosh-lite.html) 참고 bosh-cli 설치
wget https://s3.amazonaws.com/bosh-cli-artifacts/bosh-cli-3.0.1-linux-amd64
# 다운로드 후
$ chmod +x ~/Downloads/bosh-cli-*
$ sudo mv ~/Downloads/bosh-cli-* /usr/local/bin/bosh
# 버전을 확인
$ bosh -v
version 3.0.1-712bfd7-2018-03-13T23:26:43Z
Succeeded
# git clone 및 작업 디렉토리 생성(사전에 ruby, virtualbox 설치 필요함)
$ git clone https://github.com/cloudfoundry/bosh-deployment
$ mkdir -p ~/dev/bosh/vbox
생성한 vbox 디렉토리에서 아래와 같이 실행하면 bosh-director인 VM하나와 실제 환경을 제공하는 VM하나가 생성된다.(파일 경로 주의)
# 환경 생성
$ bosh create-env ~/dev/bosh/vbox/bosh-deployment/bosh.yml \
--state ./state.json \
-o ~/dev/bosh/vbox/bosh-deployment/virtualbox/cpi.yml \
-o ~/dev/bosh/vbox/bosh-deployment/virtualbox/outbound-network.yml \
-o ~/dev/bosh/vbox/bosh-deployment/bosh-lite.yml \
-o ~/dev/bosh/vbox/bosh-deployment/bosh-lite-runc.yml \
-o ~/dev/bosh/vbox/bosh-deployment/jumpbox-user.yml \
--vars-store ./creds.yml \
-v director_name="Bosh Lite Director" \
-v internal_ip=192.168.50.6 \
-v internal_gw=192.168.50.1 \
-v internal_cidr=192.168.50.0/24 \
-v outbound_network_name=NatNetwork


# alias 설정(이후 해당 env명으로 접근)
$ bosh alias-env vbox -e 192.168.50.6 --ca-cert <(bosh int ./creds.yml --path /director_ssl/ca)
# 아래 입력한 값으로 인증, 로그인쉘에 export되도록 해 놓는게 좋음
$ export BOSH_CLIENT=admin
$ export BOSH_CLIENT_SECRET=`bosh int ~/dev/bosh/vbox/creds.yml --path /admin_password`


#login
$ bosh -e vbox login
# show env info
$ bosh -e vbox env


# 환경 삭제
$ bosh delete-env ~/dev/bosh/vbox/bosh-deployment/bosh.yml \
--state ./state.json \
-o ~/dev/bosh/vbox/bosh-deployment/virtualbox/cpi.yml \
-o ~/dev/bosh/vbox/bosh-deployment/virtualbox/outbound-network.yml \
-o ~/dev/bosh/vbox/bosh-deployment/bosh-lite.yml \
-o ~/dev/bosh/vbox/bosh-deployment/bosh-lite-runc.yml \
-o ~/dev/bosh/vbox/bosh-deployment/jumpbox-user.yml \
--vars-store ./creds.yml \
-v director_name="Bosh Lite Director" \
-v internal_ip=192.168.50.6 \
-v internal_gw=192.168.50.1 \
-v internal_cidr=192.168.50.0/24 \
-v outbound_network_name=NatNetwork
생성된 env의 경우 그냥 virtualbox를 통해 관리되는데, 이상하게 종료 후 재시작하면 create-env 해도 연결이 제대로 되지 않는다. bosh-agent를 제어하는 뭔가가 있을 것 같은데, 그걸 구동해줘야 할 것 같음. 편의상 그냥 vm 상태를 저장해서 다시 불러오는 방법으로 쓰고 있다.

릴리즈 테스트

bosh를 이용해 어플리케이션을 릴리즈 해 보는 테스트이며, bosh 사이트의 다음 샘플을 참고하여 수행해 본다. http://mariash.github.io/learn-bosh –> ruby로 만든 웹 앱을 릴리즈 해 보는 테스트

디플로이 테스트(CF)

최소 디스크 용량(50GB) 및 Ram (4GB) 필요 참고 : Running Cloud Foundry with BOSH 2.0 https://starkandwayne.com/blog/running-cloud-foundry-locally-on-bosh-lite-with-bosh2/ 위 내용을 참고하여 수행한다.
# cf git repository clone
$ git clone https://github.com/cloudfoundry/cf-deployment

$ cd cf-deployment
# base image upload
$ bosh -e vbox upload-stemcell https://bosh.io/d/stemcells/bosh-warden-boshlite-ubuntu-trusty-go_agent
# update config info
$ bosh -e vbox update-cloud-config iaas-support/bosh-lite/cloud-config.yml

# deploy CF - 네트워크 상태에 따라 다르나, 두시간 이상 소요된다.
$ bosh -e vbox -d cf deploy cf-deployment.yml \
-o operations/bosh-lite.yml \
--vars-store deployment-vars.yml \
-v system_domain=bosh-lite.com

# 설치 후 정보 조회
$ bosh -e vbox -d cf instances
Using environment '192.168.50.6' as client 'admin'

Task 26. Done

Deployment 'cf'

Instance                                                  Process State  AZ  IPs
adapter/c6a605d5-b777-48a9-b9f9-31664cabf218              running        z1  10.244.0.130
api/6317c9e4-2cda-4cf2-a8ec-4f3b9aa8ca21                  running        z1  10.244.0.135
cc-worker/d00c04a8-5c08-451c-9967-84e897769e5c            running        z1  10.244.0.136
consul/d9904ce2-ea4b-46b7-ba15-bf6b793ebe6c               running        z1  10.244.0.128
database/4a4a9bfd-5de9-4837-9717-d8941fbed299             running        z1  10.244.0.131
diego-api/e8bb46d6-2bce-46d8-9c97-b4d9f5fb6003            running        z1  10.244.0.132
diego-cell/c55fdaf6-0f93-4671-a692-deb76ea5349b           running        z1  10.244.0.140
doppler/48c8e0b3-220a-42c5-aed5-ddce20b46e8c              running        z1  10.244.0.139
log-api/a1a53808-bf13-4952-b567-8b20871374e7              running        z1  10.244.0.141
nats/0f84e789-6d69-4dce-ab3e-caa295713044                 running        z1  10.244.0.129
router/a324daaf-41b9-46c9-a2e4-50ee3b72b628               running        z1  10.244.0.34
scheduler/21b1431b-652f-4d53-ba75-69e3a55f7701            running        z1  10.244.0.138
singleton-blobstore/eebce960-e864-4974-a3ec-57d3560b3138  running        z1  10.244.0.134
smoke-tests/f43bec96-19a6-4a3c-921b-1980fcb94807          -              z1  -
tcp-router/1bd08bd2-66b7-4516-a1ee-1c01c9c1e737           running        z1  10.244.0.137
uaa/b4e10908-de76-4fb8-a211-de0314a1e163                  running        z1  10.244.0.133

16 instances

Succeeded


#인스턴스 별도 제어하기
# stop all instances
bosh -e vbox -d cf stop --hard
# start all instances
bosh -e vbox -d cf start

Cloud Foundry

Cloud Foundry에 관한 정리

Docker commands

Docker-mastery 과정에서 정리한 Docker commands 모음(from udemy)