본 문서는 BOSH2(이하 BOSH)의 설명 및 설치 가이드 문서로, BOSH를 실행할 수 있는 환경을 구성하고 사용하는 방법에 관해서 설명하였다.
1. 문서 개요
1.1 목적
클라우드 환경에 서비스 시스템을 배포할 수 있는 BOSH는 릴리즈 엔지니어링, 개발, 소프트웨어 라이프사이클 관리를 통합한 오픈소스 프로젝트로 본 문서에서는 Inception 환경(설치환경)에서 BOSH를 설치하는 데 그 목적이 있다.
1.2 범위
본 문서는 Linux 환경(Ubuntu 18.04)을 기준으로 BOSH 설치를 위한 패키지와 라이브러리를 설치 및 구성하고, 이를 이용하여 BOSH를 설치하는 것을 기준으로 작성하였다.
1.3 참고 자료
본 문서는 Cloud Foundry의 BOSH Document와 Cloud Foundry Document를 참고로 작성하였다.
2. BOSH
BOSH는 초기에 Cloud Foundry PaaS를 위해 개발되었지만, 현재는 Jenkins, Hadoop 등 Yaml 파일 형식으로 소프트웨어를 쉽게 배포할 수 있으며, 수백 가지의 VM을 설치할 수 있고, 각각의 VM에 대해 모니터링, 장애 복구 등 라이프 사이클을 관리할 수 있는 통합 프로젝트이다.
BOSH가 지원하는 IaaS는 VMware vSphere, Google Cloud Platform, Amazon Web Services EC2, Microsoft Azure, OpenStack, Alibaba Cloud가 있다.
PaaS-TA는 VMware vSphere, Google Cloud Platform, Amazon Web Services EC2, OpenStack, Microsoft Azure 등의 IaaS를 지원한다.
현재 PaaS-TA 5.5.0에서 검증한 IaaS 환경은 AWS, OpenStack 환경이다.
PaaS-TA 3.1 버전까지는 Cloud Foundry BOSH1을 기준으로 설치했지만, PaaS-TA 3.5 버전부터 BOSH2를 기준으로 설치하였다.
PaaS-TA 5.5.0는 Cloud Foundry에서 제공하는 bosh-deployment를 활용하여 BOSH를 설치한다.
BOSH2는 BOSH2 CLI를 통하여 BOSH와 PaaS-TA를 모두 생성한다.
bosh-deployment를 이용하여 BOSH를 생성한 후, paasta-deployment로 PaaS-TA를 설치한다.
PaaS-TA 3.1 버전까지는 PaaS-TA Container, Controller를 별도의 deployment로 설치했지만, PaaS-TA 3.5 버전부터는 paasta-deployment 하나로 통합되어 한 번에 PaaS-TA를 설치한다.
● BOSH 컴포넌트 구성
BOSH의 컴포넌트 구성은 다음과 같다.
Director: Director는 VM 생성 또는 수정 시 설정 정보를 레지스트리에 저장한다.
저장된 레지스트리 정보는 VM의 Bootstrapping Stage에서 이용된다.
Health Monitor: Health Monitor는 BOSH Agent로부터 클라우드 상태 정보를 수집한다.
클라우드로부터 특정 Alert이 발생하면, Resurrector를 하거나 Notification Plug-in을 통해 Alert Message를 전송할 수도 있다.
Blobstore: Blobstore는 Release, Compilation Package Data를 저장하는 저장소이다.
UAA: UAA는 BOSH 사용자 인증 인가 처리를 한다.
Database: Director가 사용하는 Postgres 데이터베이스로, Deployment에 필요한 Stemcell, Release, Deployment의 메타 정보를 저장한다.
Message Bus(Nats): Message Bus는 Director와 Agent 간 통신을 위한 Publish-Subscribe 방식의 Message System으로, VM 모니터링과 특정 명령을 수행하기 위해 사용된다.
Agent: Agent는 클라우드에 배포되는 모든 VM에 설치되고, Director로부터 특정 명령을 받고 수행하는 역할을 한다. Agent는 Director로부터 수신받은 Job Specification(설치할 패키지 및 구성 방법) 정보로 해당 VM에 Director의 지시대로 지정된 패키지를 설치하고, 필요한 구성 정보를 설정한다.
3. BOSH 설치 환경 구성 및 설치
3.1. BOSH 설치 절차
Inception(PaaS-TA 설치 환경)은 BOSH 및 PaaS-TA를 설치하기 위한 설치 환경으로, VM 또는 서버 장비이다.
OS Version은 Ubuntu 18.04를 기준으로 한다. IaaS에서 수동으로 Inception VM을 생성해야 한다.
Inception VM은 Ubuntu 18.04, vCPU 2 Core, Memory 4G, Disk 100G 이상을 권고한다.
3.2. Inception 서버 구성
Inception 서버는 BOSH 및 PaaS-TA를 설치하기 위해 필요한 패키지 및 라이브러리, Manifest 파일 등의 환경을 가지고 있는 배포 작업 실행 서버이다.
Inception 서버는 외부 통신이 가능해야 한다.
BOSH 및 PaaS-TA 설치를 위해 Inception 서버에 구성해야 할 컴포넌트는 다음과 같다.
BOSH2 CLI는 BOSH 설치 시, BOSH certificate 정보를 생성해 주는 기능이 있다.
Cloud Foundry의 기본 BOSH CLI는 인증서가 1년으로 제한되어 있다.
BOSH 인증서는 BOSH 내부 Component 간의 통신 시 필요한 certificate이다.
만약 BOSH 설치 후 1년이 지나면 BOSH를 다시 설치해야 한다.
BOSH2 CLI 6.1 이상 버전은 create-env의 config-server를 통해 생성된 인증서를 1년 이상 구성할 수 있다.
BOSH2 CLI 6.0 이하 버전 사용 시, 인증서 기간을 늘리고 싶다면 BOSH CLI 소스를 다운로드해 컴파일하여 사용해야 한다.
BOSH2 CLI 버전은 bosh -v로 확인이 가능하다.
소스 컴파일 방법은 다음 가이드를 참고한다.
소스 build 전제 조건 :: Ubuntu, go 1.9.2 버전 이상
$ mkdir -p ~/workspace/bosh-cli/src/
$ cd ~/workspace/bosh-cli
$ export GOPATH=$PWD
$ export PATH=$GOPATH/bin:$PATH
$ go get -d github.com/cloudfoundry/bosh-cli
$ cd $GOPATH/src/github.com/cloudfoundry/bosh-cli
$ git checkout v5.5.1
$ vi ./vendor/github.com/cloudfoundry/config-server/types/certificate_generator.go
func generateCertTemplate 함수에 아래 내용 중 365(일)을 원하는 기간만큼 수정한다.
- notAfter := now.Add(365 * 24 * time.Hour)
$ ./bin/build
$ cd out
$ sudo cp ./bosh /usr/local/bin/bosh
$ bosh -version
3.3.3. 설치 파일 다운로드
BOSH를 설치하기 위한 deployment가 존재하지 않는다면 다운로드 받는다
$ mkdir -p ~/workspace/paasta-5.5.0/deployment
$ cd ~/workspace/paasta-5.5.0/deployment
$ git clone https://github.com/PaaS-TA/paasta-deployment.git -b v5.5.0
# 공통 사용 부분이다. 다운로드 받는다.
$ cd ~/workspace/paasta-5.5.0/deployment
$ git clone -b {TagVersion} https://github.com/PaaS-TA/common.git
# monitoirng 을 위한 deployment 를 다운로드 받는다.
$ cd ~/workspace/paasta-5.5.0/deployment
$ git clone -b {TagVersion} https://github.com/PaaS-TA/monitoring-deployment.git
paasta/deployment/paasta-deployment 이하 폴더 확인
$ cd ~/workspace/paasta-5.5.0/deployment/paasta-deployment
$ ls
README.md bosh cloud-config paasta
bosh
BOSH 설치를 위한 manifest 및 설치 파일이 존재하는 폴더
cloud-config
PaaS-TA 설치를 위한 IaaS network, storage, vm 관련 설정 파일이 존재하는 폴더
paasta
PaaS-TA 설치를 위한 manifest 및 설치 파일이 존재하는 폴더
3.3.4. BOSH 설치 파일
~/workspace/paasta-5.5.0/deployment/paasta-deployment/bosh 폴더에는 BOSH 설치를 위한 IaaS별 Shell Script 파일이 존재한다.
Shell Script 파일을 이용하여 BOSH를 설치한다. 파일명은 deploy-{IaaS}-monitoring.sh 로 만들어졌다.
또한 {IaaS}-vars.yml을 수정하여 BOSH 설치시 적용하는 변수을 설정할 수 있다.
aws-vars.yml
AWS 환경에 BOSH 설치시 적용하는 변수 설정 파일
openstack-vars.yml
OpenStack 환경에 BOSH 설치시 적용하는 변수 설정 파일
deploy-aws-monitoring.sh
AWS 환경에 BOSH 설치를 위한 Shell Script 파일. 존재하지 않는다면 git clone 해두었던 .../monitoring-deployment/bosh-addon/ 에서 복사해 놓는다.
deploy-openstack-monitoring.sh
OpenStack 환경에 BOSH 설치를 위한 Shell Script 파일. 존재하지 않는다면 git clone 해두었던 .../monitoring-deployment/bosh-addon/ 에서 복사해 놓는다.
bosh.yml
BOSH를 생성하는 Manifest 파일
3.3.4.1. BOSH 설치 Variable File
● aws-vars.yml
# BOSH VARIABLE
bosh_client_admin_id: "admin" # Bosh Client Admin ID
private_cidr: "10.0.1.0/24" # Private IP Range
private_gw: "10.0.1.1" # Private IP Gateway
bosh_url: "10.0.1.6" # Private IP
releases_dir: "/home/ubuntu/workspace/paasta-5.5.0/release" # Release Directory (offline으로 릴리즈 다운받아 사용시 설정)
director_name: "micro-bosh" # BOSH Director Name
access_key_id: "XXXXXXXXXXXXXXX" # AWS Access Key
secret_access_key: "XXXXXXXXXXXXX" # AWS Secret Key
region: "ap-northeast-2" # AWS Region
az: "ap-northeast-2a" # AWS AZ Zone
default_key_name: "aws-paasta.pem" # AWS Key Name
default_security_groups: ["bosh"] # AWS Security-Group
subnet_id: "paasta-subnet" # AWS Subnet
private_key: "~/.ssh/aws-paasta.pem" # SSH Private Key Path (해당 IaaS에 접근권한을 가진 Private key의 경로)
# MONITORING VARIABLE(PaaS-TA Monitoring을 설치할 경우 향후 설치할 VM의 값으로 미리 수정)
metric_url: "xx.xx.xxx.xxx" # PaaS-TA Monitoring InfluxDB IP
syslog_address: "xx.xx.xxx.xxx" # Logsearch의 ls-router IP
syslog_port: "2514" # Logsearch의 ls-router Port
syslog_transport: "relp" # Logsearch Protocol
● openstack-vars.yml
# BOSH VARIABLE
bosh_client_admin_id: "admin" # Bosh Client Admin ID
releases_dir: "/home/ubuntu/workspace/paasta-5.5.0/release" # Release Directory (offline으로 릴리즈 다운받아 사용시 설정)
director_name: "micro-bosh" # BOSH Director Name
private_cidr: "10.0.1.0/24" # Private IP Range
private_gw: "10.0.1.1" # Private IP Gateway
bosh_url: "10.0.1.6" # Private IP
auth_url: "http://XX.XXX.XX.XX:XXXX/v3/" # Openstack Keystone URL
az: "nova" # Openstack AZ Zone
default_key_name: "paasta" # Openstack Key Name
default_security_groups: ["paasta"] # Openstack Security Group
net_id: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" # Openstack Network ID
openstack_password: "XXXXXX" # Openstack User Password
openstack_username: "XXXXXX" # Openstack User Name
openstack_domain: "XXXXXXX" # Openstack Domain Name
openstack_project: "PaaSTA" # Openstack Project
private_key: "~/.ssh/id_rsa.pem" # SSH Private Key Path (해당 IaaS에 접근권한을 가진 Private key의 경로)
region: "RegionOne" # Openstack Region
# MONITORING VARIABLE(PaaS-TA Monitoring을 설치할 경우 향후 설치할 VM의 값으로 미리 수정)
metric_url: "10.0.161.101" # PaaS-TA Monitoring InfluxDB IP
syslog_address: "10.0.121.100" # Logsearch의 ls-router IP
syslog_port: "2514" # Logsearch의 ls-router Port
syslog_transport: "relp" # Logsearch Protocol
3.3.4.2. BOSH 설치 Option 파일
● BOSH Optional 파일
파일명
설명
uaa.yml
UAA 적용
credhub.yml
CredHub 적용
jumpbox-user.yml
Jumpbox-user 적용
cce.yml
CCE 조치 적용
use-offline-release.yml
bosh.yml 에서 사용되는 릴리즈를 오프라인에 저장된 릴리즈로 사용
use-offline-release-{IaaS}.yml
{IaaS}/cpi.yml에서 사용되는 릴리즈를 오프라인에 저장된 릴리즈로 사용
use-offline-release-cce.yml
cce.yml에서 사용되는 릴리즈를 오프라인에 저장된 릴리즈로 사용
use-offline-release-jumpbox-user.yml
jumpbox-user.yml에서 사용되는 릴리즈를 오프라인에 저장된 릴리즈로 사용
use-offline-release-uaa.yml
uaa.yml에서 사용되는 릴리즈를 오프라인에 저장된 릴리즈로 사용
3.3.4.3. BOSH 설치 Shell Script
BOSH 설치 명령어는 create-env로 시작한다.
Shell이 아닌 BOSH Command로 실행 가능하며, 설치하는 IaaS 환경에 따라 Option이 달라진다.
BOSH 삭제 시 delete-env 명령어를 사용하여 설치된 BOSH를 삭제할 수 있다.
BOSH 설치 Option은 아래와 같다.
--state
BOSH 설치 명령어 실행 시 생성되는 파일로, 설치된 BOSH의 IaaS 설정 정보가 저장된다. (Backup 필요)
--vars-store
BOSH 설치 명령어 실행 시 생성되는 파일로, 설치된 BOSH의 내부 컴포넌트가 사용하는 인증서 및 인증정보가 저장된다. (Backup 필요)
-o
BOSH 설치 시 적용하는 Operation 파일을 설정할 경우 사용한다. IaaS별 CPI 또는 Jumpbox-user, CredHub 등의 설정을 적용할 수 있다.
-v
BOSH 설치 시 적용하는 변수 또는 Operation 파일에 변수를 설정할 경우 사용한다. Operation 파일 속성에 따라 필수 또는 선택 항목으로 나뉜다.
-l, --var-file
YAML파일에 작성한 변수를 읽어올때 사용한다.
파일명
설명
요구사항
paasta-addon/paasta-monitoring-agent.yml
PaaS-TA Monitoring Agent 적용. 존재하지 않는다면 git clone 해 두었던 .../monitoring-deployment/bosh-addon/paasta-addon/ 에서 복사해 온다.
컴파일 된 파일을 미리 다운로드 후 오프라인 방식으로 PaaS-TA Monitoring Agent의 설치. deploey-{IaaS}-monitoring.yml 파일과 use-compiled-releases-monitoring-agent.yml 내용 수정 필요. 존재하지 않는다면 git clone 해 두었던 .../monitoring-deployment/bosh-addon/paasta-addon/ 에서 복사해 온다.
PaaS-TA Monitoring Agent는 BOSH VM의 상태 정보(Metric data)를 paasta-monitoring의 InfluxDB에 전송한다. Syslog Agent는 BOSH VM의 log 정보를 logsearch의 ls-router에 전송하는 역할을 한다. BOSH 설치 전에 paasta-monitoring의 InfluxDB IP를 metric_url로 사용하기 위해 사전에 정의해야 한다. 마찬가지로 logsearch의 ls-router IP도 syslog_address로 연동하기 위해 사전에 정의해야 한다.
● deploy-aws-monitoring.sh
bosh create-env bosh.yml \
--state=aws/state.json \ # BOSH Latest Running State, 설치 시 생성, Backup 필요
--vars-store=aws/creds.yml \ # BOSH Credentials and Certs, 설치 시 생성, Backup 필요
-o aws/cpi.yml \ # AWS CPI 적용
-o uaa.yml \ # UAA 적용
-o cce.yml \ # CCE 조치 적용
-o credhub.yml \ # CredHub 적용
-o jumpbox-user.yml \ # Jumpbox-user 적용
-o syslog.yml \ # [MONITORING] Monitoring Logging Agent 적용
-o paasta-addon/paasta-monitoring-agent.yml \ # [MONITORING] Monitoring Metric Agent 적용
-l aws-vars.yml # AWS 환경에 BOSH 설치시 적용하는 변수 설정 파일
● deploy-openstack-monitoring.sh
bosh create-env bosh.yml \
--state=openstack/state.json \ # BOSH Latest Running State, 설치 시 생성, Backup 필요
--vars-store=openstack/creds.yml \ # BOSH Credentials and Certs, 설치 시 생성, Backup 필요
-o openstack/cpi.yml \ # Openstack CPI 적용
-o uaa.yml \ # UAA 적용
-o credhub.yml \ # CredHub 적용
-o jumpbox-user.yml \ # Jumpbox-user 적용
-o openstack/disable-readable-vm-names.yml \ # VM 명을 UUIDs로 적용
-o syslog.yml \ # [MONITORING] Monitoring Logging Agent 적용
-o paasta-addon/paasta-monitoring-agent.yml \ # [MONITORING] Monitoring Metric Agent 적용
-l openstack-vars.yml # OpenStack 환경에 BOSH 설치시 적용하는 변수 설정 파일
서비스 설치에 필요한 릴리즈 파일을 다운로드 받아 Local machine의 작업 경로로 위치시킨다.
# 릴리즈 다운로드 파일 위치 경로 생성
$ mkdir -p ~/workspace/paasta-5.5.0/release
# 릴리즈 파일 다운로드 및 파일 경로 확인
$ cd ~/workspace/paasta-5.5.0/release
$ wget http://45.248.73.44/index.php/s/fy83bkQQCcek2yk/download --content-disposition
$ unzip bosh.zip
$ cd ~/workspace/paasta-5.5.0/release/bosh
$ ls
bosh-271.2.0-PaaS-TA.tgz bosh-vsphere-cpi-release-54.1.1.tgz
bosh-271.2.0-ubuntu-xenial-621.93-20201130-224348-505837986-20201130224349.tgz bosh-warden-cpi-41-ubuntu-xenial-621.93-20201130-224003-395585274-20201130224004.tgz
bosh-aws-cpi-release-83.tgz bpm-1.1.9-ubuntu-xenial-621.93-20201130-224507-912672592-20201130224509.tgz
bosh-azure-cpi-release-37.3.0.tgz credhub-2.9.0-ubuntu-xenial-621.93-20201130-223813-836755462-20201130223815.tgz
bosh-dns-release-1.27.0.tgz garden-runc-1.19.17-ubuntu-xenial-621.93-20201202-140222-317108723-20201202140224.tgz
bosh-google-cpi-release-40.0.3.tgz light-bosh-stemcell-621.93-aws-xen-hvm-ubuntu-xenial-go_agent.tgz
bosh-openstack-cpi-release-44.tgz light-bosh-stemcell-621.93-google-kvm-ubuntu-xenial-go_agent.tgz
bosh-stemcell-621.93-azure-hyperv-ubuntu-xenial-go_agent.tgz os-conf-release-18.tgz
bosh-stemcell-621.93-openstack-kvm-ubuntu-xenial-go_agent.tgz os-conf-release-22.1.0.tgz
bosh-stemcell-621.93-vsphere-esxi-ubuntu-xenial-go_agent.tgz uaa-74.29.0-ubuntu-xenial-621.93-20201130-224014-789299918-20201130224017.tgz
bosh-virtualbox-cpi-release-0.2.0.tgz
서버 환경에 맞추어 Deploy 스크립트 파일의 설정을 수정한다.
$ vi ~/workspace/paasta-5.5.0/deployment/paasta-deployment/bosh/deploy-aws-monitoring.sh
BOSH가 설치되면, BOSH 설치 폴더 이하 {iaas}/creds.yml 파일이 생성된다.
creds.yml은 BOSH 인증정보를 가지고 있으며, creds.yml을 활용하여 BOSH에 로그인한다.
BOSH 로그인 후, BOSH CLI 명령어를 이용하여 PaaS-TA를 설치할 수 있다.
BOSH를 이용하여 VM를 배포하려면 반드시 BOSH에 로그인을 해야한다.
BOSH 로그인 명령어는 다음과 같다.
$ cd ~/workspace/paasta-5.5.0/deployment/paasta-deployment/bosh
$ export BOSH_CA_CERT=$(bosh int ./{iaas}/creds.yml --path /director_ssl/ca)
$ export BOSH_CLIENT=admin
$ export BOSH_CLIENT_SECRET=$(bosh int ./{iaas}/creds.yml --path /admin_password)
$ bosh alias-env {director_name} -e {bosh_url} --ca-cert <(bosh int ./{iaas}/creds.yml --path /director_ssl/ca)
$ bosh -e {director_name} env
3.3.8. CredHub
CredHub은 인증정보 저장소이다.
BOSH 설치 시 Operation 파일로 credhub.yml을 추가하였다.
BOSH 설치 시 credhub.yml을 적용하면, PaaS-TA 설치 시 PaaS-TA에서 사용하는 인증정보(Certificate, Password)를 CredHub에 저장한다.
PaaS-TA 인증정보가 필요할 때 CredHub을 사용하며, CredHub CLI를 통해 CredHub에 로그인하여 인증정보 조회, 수정, 삭제를 할 수 있다.
CredHub에 로그인하기 위해 BOSH를 설치한 bosh-deployment 디렉터리의 creds.yml을 활용하여 로그인한다.
$ cd ~/workspace/paasta-5.5.0/deployment/paasta-deployment/bosh
$ export CREDHUB_CLIENT=credhub-admin
$ export CREDHUB_SECRET=$(bosh int --path /credhub_admin_client_secret {iaas}/creds.yml)
$ export CREDHUB_CA_CERT=$(bosh int --path /credhub_tls/ca {iaas}/creds.yml)
$ credhub login -s https://{bosh_url}:8844 --skip-tls-validation
$ credhub find
CredHub 로그인 후 find 명령어로 조회하면 비어 있는 것을 알 수 있다.
PaaS-TA를 설치하면 인증 정보가 저장되어 조회할 수 있다.
uaa 인증정보 조회
$ credhub get -n /{director}/{deployment}/uaa_ca
3.3.9. Jumpbox
BOSH 설치 시 Operation 파일로 jumpbox-user.yml을 추가하였다.
Jumpbox는 BOSH VM에 접근하기 위한 인증을 적용하게 된다.
인증키는 BOSH에서 자체적으로 생성하며, 인증키를 통해 BOSH VM에 접근할 수 있다.
BOSH VM에 이상이 있거나 상태를 체크할 때 Jumpbox를 활용하여 BOSH VM에 접근할 수 있다.
$ cd ~/workspace/paasta-5.5.0/deployment/paasta-deployment/bosh
$ bosh int {iaas}/creds.yml --path /jumpbox_ssh/private_key > jumpbox.key
$ chmod 600 jumpbox.key
$ ssh jumpbox@{bosh_url} -i jumpbox.key
ubuntu@inception:~/workspace/paasta-5.5.0/deployment/paasta-deployment/bosh$ ssh jumpbox@10.0.1.6 -i jumpbox.key
Unauthorized use is strictly prohibited. All access and activity
is subject to logging and monitoring.
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.15.0-54-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Last login: Thu Oct 17 03:57:48 UTC 2019 from 10.0.0.9 on pts/0
Last login: Fri Oct 25 07:05:42 2019 from 10.0.0.9
bosh/0:~$
3.3.10. BOSH 로그인 생성 스크립트
PaaS-TA 5.5부터 BOSH 로그인을 하는 스크립트의 생성을 지원한다. 해당 스크립트의 BOSH_DEPLOYMENT_PATH, CURRENT_IAAS, BOSH_IP, BOSH_CLIENT_ADMIN_ID, BOSH_ENVIRONMENT, BOSH_LOGIN_FILE_PATH, BOSH_LOGIN_FILE_NAME를 BOSH 환경과 스크립트를 저장하고 싶은 위치로 변경 후 실행한다.
BOSH Login 생성 Script의 설정 수정
vi ~/workspace/paasta-5.5.0/deployment/paasta-deployment/bosh/create-bosh-login.sh