본문 바로가기
Tech/Openstack

Cloudfoundry 오픈스택에 설치하기

by 타이호 2017. 12. 24.
반응형

요즘 트렌드는 컨테이너나 PaaS가 대세인듯 하다.

오픈스택은 IaaS 서비스로도 훌륭하지만 오픈소스이다 보니 다양한 기능들을 제공해주는데, Cloudfoundry를 위한 Backend로써 역할을 해준다.

처음에는 국내에서 오픈소스로 배포하고 있는 PaaS-TA를 올려보려고 했지만, 이 부분은 추후 다시 글을 올릴 예정이며, PaaS-TA 역시 CF(CloudFoundry)를 기반으로 하고 있기 때문에 CF를 이해하기 위해 우선 CF를 구성해보았다.

 

1. 참고자료

https://bosh.io/docs/init-openstack.html#keypair

https://docs.cloudfoundry.org/deploying/openstack/

 

2. 준비사항

Ubuntu 14.04 서버 생성 : 처음에는 16.04로 시작했는데, ruby 및 가이드 문서가 14.04로 되어 있기 때문에 14.04로 변경하였다. 

 

3. 전체 배포 과정

a. Openstack 환경 구성 : Tenant 생성, 계정 생성(비번), 사용할 network 생성, 외부 접속용 floating ip 생성

b. bosh client 설치 : bosh라는 배포툴을 통해 CF가 Deploy가 된다. bosh 역시 Juju와 비슷한 역할을 하는데, Client에서 Bosh Director를 생성하고 그 Director는 전체 배포를 담당한다. Bosh는 CF 배포 이외에도 다양한 Application을 배포 할 수 있다.

c. CF 배포 : 배포를 위해서는 Openstack 환경 및 CF를 위한 yaml 파일을 생성해야 한다. 이 yaml을 만드는 작업이 제일 오래 걸린다.

 

4. 오픈스택 환경 구성

a. tenant : paasta 로 생성, paasta 계정 역시 생성

b. Network : network를 하나 생성하고 id를 기록해둔다. subnet은 10.10.0.0/16으로 생성했다.

c. External network : 기존에 사용하고 있던 external network에서 floating ip를 1개 생성해둔다.

d. Security 그룹 : group을 하나 생성해두고, rule을 추가한다. (22, 6868, 25555)


 

5. Bosh 설치

a. bosh는 크게 v1과 v2 버전이 있는데, 공식 매뉴얼에는 v2로 우선 가이드 하고 있다. v1과 v2는 명령이 틀리기 때문에 나중에 CF 디플로이를 할 때 명령어를 해당 버전에 맞게 수행하여야 한다.

b. 가이드 문서 : https://bosh.io/docs/cli-v2.html

c. Installation

ubuntu@mybastion:~$ wget https://s3.amazonaws.com/bosh-cli-artifacts/bosh-cli-2.0.28-linux-amd64

ubuntu@mybastion:~$ chmod +x bosh-cli-2.0.28-linux-amd64

ubuntu@mybastion:~$ sudo mv bosh-cli-2.0.28-linux-amd64 /usr/local/bin/bosh

ubuntu@mybastion:~$ bosh -v

version 2.0.28-cb77557-2017-07-11T23:04:21Z

Succeeded

d. 필요 패키지 설치

$ sudo apt-get install -y gcc make 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 unzip git

e. Bosh Director 설치를 위한 yaml  생성 : 여기엔 Openstack 환경 및 설정 등이 들어간다.

ubuntu@mybastion:~/bosh-1$ bosh create-env bosh-deployment/bosh.yml \

     --state=state.json \

     --vars-store=creds.yml \

     -o bosh-deployment/openstack/cpi.yml \

     -v director_name=bosh-1 \

     -v internal_cidr=10.10.0.0/16 \

     -v internal_gw=10.10.0.1 \

     -v internal_ip=10.10.0.11 \  --> bosh director ip를 넣어준다.

     -v auth_url=http://lab.openops.co.kr:5000/v3 \ --> Openstack Keystone Endpoint

     -v az=nova \

     -v default_key_name=bosh \ --> security key를 생성하고 아래 bosh.pem 파일을 가져와야 한다.

     -v default_security_groups=[bosh] \

     -v net_id=8eaf414d-2192-4136-9609-22f85c39e810 \

     -v openstack_password=qwer00 \

     -v openstack_username=paasta \

     -v openstack_domain=admin_domain \

     -v openstack_project=PaasTA \

     -v private_key=bosh.pem \

     -v region=RegionOne

f. Bosh Director 생성 결과

Deployment manifest: '/home/ubuntu/bosh-1/bosh-deployment/bosh.yml'

Deployment state: 'state.json'

Started validating

  Downloading release 'bosh'... Skipped [Found in local cache] (00:00:00)

  Validating release 'bosh'... Finished (00:00:01)

  Downloading release 'bosh-openstack-cpi'... Skipped [Found in local cache] (00:00:00)

  Validating release 'bosh-openstack-cpi'... Finished (00:00:00)

  Validating cpi release... Finished (00:00:00)

  Validating deployment manifest... Finished (00:00:00)

  Downloading stemcell... Skipped [Found in local cache] (00:00:00)

  Validating stemcell... Finished (00:00:03)

Finished validating (00:00:05)

Started installing CPI

  Compiling package 'ruby_openstack_cpi/6576c0d52231e773f4ad53f5c5a0785c4247696a'... Finished (00:00:00)

  Compiling package 'bosh_openstack_cpi/918abecbb3015ee383d5cb2af23e8dbfed6392d1'... Finished (00:00:00)

  Installing packages... Finished (00:00:04)

  Rendering job templates... Finished (00:00:00)

  Installing job 'openstack_cpi'... Finished (00:00:00)

Finished installing CPI (00:00:04)

Starting registry... Finished (00:00:00)

Uploading stemcell 'bosh-openstack-kvm-ubuntu-trusty-go_agent/3431.10'... Skipped [Stemcell already uploaded] (00:00:00)

Started deploying

  Deleting VM 'af74761c-97c9-48c9-a494-777e3a075a22'... Finished (00:00:01)

  Creating VM for instance 'bosh/0' from stemcell '96e46493-de68-4223-abd0-42d49727dd8b'... Finished (00:00:37)

  Waiting for the agent on VM 'b10d47dc-794e-4c37-bdef-ea5775ee731b' to be ready... Finished (00:00:34)

  Creating disk... Finished (00:00:08)

  Attaching disk '9d509940-6ea8-40dc-8cb6-3cbe2dbc28cd' to VM 'b10d47dc-794e-4c37-bdef-ea5775ee731b'... Finished (00:00:17)

  Rendering job templates... Finished (00:00:02)

  Compiling package 'ruby/c1086875b047d112e46756dcb63d8f19e63b3ac4'... Skipped [Package already compiled] (00:00:00)

  Compiling package 'mysql/b7e73acc0bfe05f1c6cbfd97bf92d39b0d3155d5'... Skipped [Package already compiled] (00:00:00)

  Compiling package 'libpq/661f5817afe24fa2f18946d2757bff63246b1d0d'... Skipped [Package already compiled] (00:00:00)

  Compiling package 'ruby_openstack_cpi/6576c0d52231e773f4ad53f5c5a0785c4247696a'...

 Finished (00:03:14)

  Compiling package 'verify_multidigest/8fc5d654cebad7725c34bb08b3f60b912db7094a'... Skipped [Package already compiled] (00:00:00)

  Compiling package 's3cli/bb1c1976d221fdadf13a6bc873896cd5e2433580'... Skipped [Package already compiled] (00:00:00)

  Compiling package 'health_monitor/e9317b2ad349f019e69261558afa587537f06f25'... Skipped [Package already compiled] (00:00:00)

  Compiling package 'registry/d81865cf0ad85fd79cb19aeb565bf622f2a17a83'... Skipped [Package already compiled] (00:00:00)

  Compiling package 'postgres/3b1089109c074984577a0bac1b38018d7a2890ef'... Skipped [Package already compiled] (00:00:00)

  Compiling package 'director/e9cd35786422e87bd0571a4423bc947e50fe97e6'... Skipped [Package already compiled] (00:00:00)

  Compiling package 'nginx/2ec2f63293bf6f544e95969bf5e5242bc226a800'... Skipped [Package already compiled] (00:00:00)

  Compiling package 'nats/63ae42eb73527625307ff522fb402832b407321d'... Skipped [Package already compiled] (00:00:00)

  Compiling package 'davcli/5f08f8d5ab3addd0e11171f739f072b107b30b8c'... Skipped [Package already compiled] (00:00:00)

  Compiling package 'bosh_openstack_cpi/918abecbb3015ee383d5cb2af23e8dbfed6392d1'... Finished (00:00:04)

  Compiling package 'postgres-9.4/ded764a075ae7513d4718b7cf200642fdbf81ae4'... Skipped [Package already compiled] (00:00:00)

  Updating instance 'bosh/0'... Finished (00:00:17)

  Waiting for instance 'bosh/0' to be running... Finished (00:00:22)

  Running the post-start scripts 'bosh/0'... Finished (00:00:00)

Finished deploying (00:05:48)

Deleting unused stemcell 'a05ab725-8810-438a-ba44-d1e1d43ada29'... Finished (00:00:01)

Stopping registry... Finished (00:00:00)

Cleaning up rendered CPI jobs... Finished (00:00:00)

Succeeded

 

6. Bosh 환경 셋팅

a. Bosh Env를 설정한다.

ubuntu@mybastion2:~/bosh-1$ bosh alias-env bosh-1 -e 10.10.0.11 --ca-cert <(bosh int ./creds.yml --path /director_ssl/ca)

Using environment '10.10.0.8' as anonymous user

Name      bosh-1

UUID      d395e296-bf1d-4780-8fe9-b4288679ab77

Version   262.3.0 (00000000)

CPI       openstack_cpi

Features  compiled_package_cache: disabled

          config_server: disabled

          dns: disabled

          snapshots: disabled

User      (not logged in)

Succeeded

ubuntu@mybastion2:~/bosh-1$ bosh envs

URL        Alias

10.10.0.8  bosh-1

1 environments

Succeeded

b. Bosh Director로 접속 확인

ubuntu@mybastion2:~/bosh-1$ export BOSH_CLIENT=admin

ubuntu@mybastion2:~/bosh-1$ export BOSH_CLIENT_SECRET=`bosh int ./creds.yml --path /admin_password`

ubuntu@mybastion2:~/bosh-1$ bosh -e bosh-1 env

Using environment '10.10.0.8' as client 'admin'

Name      bosh-1

UUID      d395e296-bf1d-4780-8fe9-b4288679ab77

Version   262.3.0 (00000000)

CPI       openstack_cpi

Features  compiled_package_cache: disabled

          config_server: disabled

          dns: disabled

          snapshots: disabled

User      admin

Succeeded

 

7. CloudFoundry 배포

a. 참조 문서

https://docs.cloudfoundry.org/deploying/openstack/cf-stub.html (이건 v1 인듯)

https://bosh.io/docs/basic-workflow.html (v2 설명)

b. 배포 : CF를 배포하기 위해서 stub yaml 파일 (여기에는 cert나 key, openstack 정보들을 저장) 생성하고, 생성된 stub 파일을 가지고 CF용 manifest 파일을 생성한다.

http://docs.cloudfoundry.org/deploying/common/deploy.html

manifest 파일이 생성되면 그 이후에는 upload stemcell, upload cf-release를 하면 된다.

bosh -e bosh-1 upload-stemcell https://s3.amazonaws.com/bosh-core-stemcells/openstack/bosh-stemcell-3421.9-openstack-kvm-ubuntu-trusty-go_agent.tgz

bosh -e bosh-1 upload-release https://bosh.io/d/github.com/cloudfoundry/cf-release?v=269 --sha1 3f7f0e600e2711315df2cb57a3e4edad52f2f713

c. stub 파일 생성

https://docs.cloudfoundry.org/deploying/openstack/cf-stub.html

d. 위의 stub 파일을 생성할 때 필요한 패키지들을 설치 한다.

Spiff 설치

wget https://github.com/cloudfoundry-incubator/spiff/releases/download/v1.0.8/spiff_linux_amd64.zip

sudo apt install -y unzip

unzip spiff_linux_amd64.zip

sudo mv spiff /usr/local/bin/

Go언어 설치 : sudo apt-get install golang-go (낮은버전이라 이걸 하면 에러 )

sudo curl -O https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gz

sudo tar -xvf go1.6.linux-amd64.tar.gz

sudo mv go /usr/local

mkdir ~/go

.bashrc 추가

export GOPATH=$HOME/go

export PATH=$PATH:/usr/local/go/bin

https://www.digitalocean.com/community/tutorials/how-to-install-go-1-6-on-ubuntu-14-04

Certstrap 설치 :

$ git clone https://github.com/square/certstrap
$ cd certstrap
$ ./build

 

8. Trouble Shooting

https://docs.cloudfoundry.org/running/troubleshooting.html

 

반응형