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 관련 설정 파일이 존재하는 폴더
컴파일 된 파일을 미리 다운로드 후 오프라인 방식으로 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 설치시 적용하는 변수 설정 파일
# 릴리즈 다운로드 파일 위치 경로 생성
$ 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