Є 2 найпростіші способи спробувати Cloud Foundry на локальній системі: PCF Dev та BOSH Lite. У цій статті буде розглянуто останній варіант, як більш гнучкий, проте і складніший. У якості хост-системи буде використано macOS, але звісно з установкою на інших операційних системах проблем не має бути. У кінцевому рахунку це все рівно буде віртуальна машина VirtualBox з Ubuntu 14.04 всередині. Головне - це мати систему з мінімальною кількістю оперативної пам'яті, що рівна 8ГБ.
1. BOSH LITE INSTALLATION (BOSH DIRECTOR)
Отже, до діла. Перш за все установимо BOSH, систему, котра розгортає вузли Cloud Foundry. У випадку Lite-версії, BOSH розповсюджується у вигляді готового образу віртуальної машини, тому Vagrant та VirtualBox мають бути установлені:
$ vagrant --version
Vagrant 1.9.1
$ VBoxManage --version
5.1.18r114002
Для VirtualBox варто також проінсталювати Oracle VM VirtualBox Extension Pack, адже інакше можливі проблеми з мережею між майбутніми компонентами.
Установимо BOSH CLI клієнт, котрий розповсюджується як ruby gem-пакет:
# gem install bosh_cli --no-ri --no-rdoc
$ bosh --version
BOSH 1.3215.4.0
Клонуємо репозиторій BOSH Lite. Тут є все що необхідно для його старту:
$ mkdir ~/workspace
$ cd ~/workspace
$ git clone https://github.com/cloudfoundry/bosh-lite
$ cd bosh-lite
Перебуваючи в директорії bosh-lite запустимо створення BOSH Lite серверу (Director-а):
$ vagrant up --provider=virtualbox
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'cloudfoundry/bosh-lite' could not be found. Attempting to find and install...
default: Box Provider: virtualbox
default: Box Version: 9000.137.0
==> default: Loading metadata for box 'cloudfoundry/bosh-lite'
default: URL: https://atlas.hashicorp.com/cloudfoundry/bosh-lite
==> default: Adding box 'cloudfoundry/bosh-lite' (v9000.137.0) for provider: virtualbox
default: Downloading: https://atlas.hashicorp.com/cloudfoundry/boxes/bosh-lite/versions/9000.137.0/providers/virtualbox.box
==> default: Successfully added box 'cloudfoundry/bosh-lite' (v9000.137.0) for 'virtualbox'!
==> default: Importing base box 'cloudfoundry/bosh-lite'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'cloudfoundry/bosh-lite' is up to date...
==> default: Setting the name of the VM: bosh-lite_default_1493413924803_26266
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
==> default: Forwarding ports...
default: 22 (guest) => 2200 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
default: /vagrant => /Users/yuby/workspace/bosh-lite
Vagrant створить окрему віртуальну мережу 192.168.50.0/24 в якій з адресою 192.168.50.4 і буде працювати остання стабільна версія образу BOSH Lite з Vagrant Cloud. З виводу видно, що для роботи мережі, Vagrant створить у Virtualbox-i 2 інтерфейси: один в режимі nat, а інший - в режимі hostonly.
Прив’яжемо клієнта bosh, до щойно створеного сервера, для чого використаємо пароль і логін по-замовчуванню, admin/admin:
$ bosh target 192.168.50.4 lite
Target set to `Bosh Lite Director'
Your username: admin
Enter password: *****
Logged in as `admin'
Додамо нові маршрути на хост машині до підмережі BOSH Lite та майбутньої підмережі контейнерів Cloud Foundry (10.244.0.0/16):
$ bin/add-route
+ old_ips=10.244.0.0/19
+ ips=10.244.0.0/16
+ gw=192.168.50.4
+ echo 'Adding the following route entry to your local route table to enable direct container access: 10.244.0.0/16 via 192.168.50.4. Your sudo password may be required.'
++ uname
+ '[' Darwin = Darwin ']'
+ sudo route delete -net 10.244.0.0/19 192.168.50.4
Password:
route: writing to routing socket: not in table
delete net 10.244.0.0: gateway 192.168.50.4: not in table
+ sudo route delete -net 10.244.0.0/16 192.168.50.4
route: writing to routing socket: not in table
delete net 10.244.0.0: gateway 192.168.50.4: not in table
+ sudo route add -net 10.244.0.0/16 192.168.50.4
add net 10.244.0.0: gateway 192.168.50.4
Інакше, підмережі 10.244.0.0/16 та 192.168.50.0/24 доступними з хост-машини не будуть.
Домени *.bosh-lite.com власником на рівні DNS прив’язані до локальних IP-адрес, тому краще просто погодитись з набором мереж для BOSH Lite.
Якщо установка BOSH Director не пройшла успішно, то можна переглянути вирішення найбільш типових проблем за наступним посиланням https://github.com/cloudfoundry/bosh-lite/blob/master/docs/troubleshooting.md.
2. DEPLOYING CLOUD FOUNDRY
Перейдемо у вже створену на попередньому етапі директорію workspace та зклонуємо репозиторій Cloud Foundry:
$ cd ~/workspace
$ git clone https://github.com/cloudfoundry/cf-release.git
Дозволимо перенаправлення для клонування коду go-пакетів:
$ cd cf-release
$ git config --global http.https://gopkg.in.followRedirects true
Інакше, можна отримати наступну помилку:
...
error: RPC failed; HTTP 301 curl 22 The requested URL returned error: 301
fatal: The remote end hung up unexpectedly
fatal: clone of 'https://gopkg.in/yaml.v2' into submodule path
'/Users/engrun/Development/git-repos/cf-release/src/loggregator/src/
gopkg.in/yaml.v2' failed
...
Зклонуємо всі сабмодулі, що необхідні для компіляції Cloud Foundry:
$ cd cf-release
$ ./scripts/update
===> Uncommitted submodules changes will be clobbered <===
===> Unversioned changes will be clobbered <===
+ git rev-parse '@{u}'
+ git pull
Already up-to-date.
+ git submodule sync --recursive
Synchronizing submodule url for 'src/binary-buildpack-release'
Synchronizing submodule url for 'src/capi-release'
...
Entering 'src/routing-release/src/gopkg.in/yaml.v2'
Entering 'src/ruby-buildpack-release'
Entering 'src/smoke-tests'
Entering 'src/staticfile-buildpack-release'
Entering 'src/uaa-release'
Entering 'src/uaa-release/src/uaa'
+ git clean -ffd
+ set +x
CF Release has been updated
Це може зайняти час, адже їхня кількість дуже серйозна.
Для компіляції релізу Cloud Foundry також необхідний Bundler та Spiff:
# gem install bundler
$ cd /tmp
$ wget https://github.com/cloudfoundry-incubator/spiff/releases/download/v1.0.8/spiff_darwin_amd64.zip
$ unzip https://github.com/cloudfoundry-incubator/spiff/releases/download/v1.0.8/spiff_darwin_amd64.zip
# cp spiff /usr/local/bin
Spiff - це програма командного рядка, спеціально створена для генерації маніфестів розгортання (deployment manifests) BOSH. У релізі BOSH 2, її вже замінено на Spruce.
Створимо маніфест розгортання та призначимо його як поточний маніфест для BOSH:
$ cd cf-release
$ ./scripts/generate-bosh-lite-dev-manifest
Deployment set to '/Users/yuby/workspace/cf-release/bosh-lite/deployments/cf.yml'
Після чого cf.yml буде відображений, як deployment manifests в BOSH:
$ bosh status
Config
/Users/yuby/.bosh_config
Director
Name Bosh Lite Director
URL https://192.168.50.4:25555
Version 260.0.0 (00000000)
User admin
UUID 63ddb6a6-d6fe-40e1-b16b-2ff6b2034c79
CPI warden_cpi
dns disabled
compiled_package_cache enabled (provider: local)
snapshots disabled
Deployment
Manifest /Users/yuby/workspace/cf-release/bosh-lite/deployments/cf.yml
У cf.yml описано купу параметрів, серед яких адреси вузлів майбутньої Cloud Foundry інсталяції (вони були визначені заздалегіть власником репозиторію), параметри цих же вузлів, домени і т.п.
Завантажимо Stemcell. Stemcell - це мінімальний образ операційної системи Linux, котрий використовує BOSH для розгортання всіх вузлів Cloud Foundry. Переглянути список усіх доступних stemcell-ів можна за наступним посиланням https://bosh.io/stemcells. Для нашого випадку (VirtualBox) нам необхідний BOSH Lite Warden stemcell:
$ cd /tmp
$ wget https://s3.amazonaws.com/bosh-core-stemcells/warden/bosh-stemcell-3363.20-warden-boshlite-ubuntu-trusty-go_agent.tgz
Завантажимо його в BOSH:
$ bosh upload stemcell /tmp/bosh-stemcell-3363.20-warden-boshlite-ubuntu-trusty-go_agent.tgz
Acting as user 'admin' on 'Bosh Lite Director'
Verifying stemcell...
File exists and readable OK
Verifying tarball...
Read tarball OK
Manifest exists OK
Stemcell image file OK
Stemcell properties OK
Stemcell info
-------------
Name: bosh-warden-boshlite-ubuntu-trusty-go_agent
Version: 3363.20
Checking if stemcell already exists...
No
Uploading stemcell...
bosh-stemcell: 96% |oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo | 348.3MB 42.6MB/s ETA: 00:00:00
Director task 1
Started update stemcell
Started update stemcell > Extracting stemcell archive. Done (00:00:03)
Started update stemcell > Verifying stemcell manifest. Done (00:00:00)
Started update stemcell > Checking if this stemcell already exists. Done (00:00:00)
Started update stemcell > Uploading stemcell bosh-warden-boshlite-ubuntu-trusty-go_agent/3363.20 to the cloud. Done (00:00:11)
Started update stemcell > Save stemcell bosh-warden-boshlite-ubuntu-trusty-go_agent/3363.20 (cd1193a8-a46f-46e1-5ab1-56a935d4b231). Done (00:00:00)
Done update stemcell (00:00:14)
Task 1 done
Started 2017-02-21 15:58:44 UTC
Finished 2017-02-21 15:58:58 UTC
Duration 00:00:14
bosh-stemcell: 96% |ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo | 349.1MB 15.4MB/s Time: 00:00:22
Нарешті можемо приступити до завантаження пакетів, необхідних для установки Cloud Foundry. У процесі створення релізу, BOSH запитає яку назву потрібно для нього обрати (наведено жирним шрифтом). Необхідно просто натиснути Enter, адже назва 'cf' вже активована попереднім скриптом generate-bosh-lite-dev-manifest.
$ cd ~/workspace/cf-release
$ bosh create release
Syncing blobs...
debian_nfs_server/nfs-kernel-server_1%3a1... downloaded
uaa/cloudfoundry-identity-varz-1.0.2.war downloaded
...
java-buildpack/java-buildpack-offline-v3.... downloaded
Please enter development release name: |cf| <just type Enter>
Building DEV release
---------------------------------
Release artifact cache: /Users/yuby/.bosh/cache
Building license
----------------
Building license...
Using final version '4e1a2befc59356ae086af33a56949bdb6d4f95ef'
Downloading from blobstore (id=48626067-cd8a-4da9-9c44-01ec785c08d7)...
Building packages
-----------------
Building acceptance-tests...
Using final version '211610bf8ba4e024fe595602ebaa441abd1a040b'
Downloading from blobstore (id=55cbf83f-7b46-41dc-837f-595cb183a86e)...
...
Building warden...
Using final version '9c26e453d63bceb97e4b87c11526e8854a5b63e4'
Downloading from blobstore (id=02e14781-7d4a-4e9d-ba93-5c4e83edb887)...
Resolving dependencies
----------------------
Dependencies resolved, correct build order is:
- binary-buildpack
- capi_utils
...
- warden
Building jobs
-------------
Building acceptance-tests...
Using final version 'd3bc77d74e3b6584a82cbb7be392cc0d484f03ff'
...
Building uaa...
Using final version 'e0a7ce76682be8a4c732473e053402098b0904d1'
Building release
----------------
Generating manifest...
----------------------
Writing manifest...
Release summary
---------------
License
+---------+------------------------------------------+-------+
| Name | Version | Notes |
+---------+------------------------------------------+-------+
| license | 4e1a2befc59356ae086af33a56949bdb6d4f95ef | |
+---------+------------------------------------------+-------+
Packages
+-------------------------------+------------------------------------------+-------+
| Name | Version | Notes |
+-------------------------------+------------------------------------------+-------+
| acceptance-tests | 211610bf8ba4e024fe595602ebaa441abd1a040b | |
| binary-buildpack | d9dc7ff39da8a7ee2157e91c2cedb4dfb3508ba8 | |
...
| tps | 0eace0b29d9c2a177c5e2ae36c7b3c1e5628f96b | |
| uaa | c90e18bfa8ab9ac7c71fc89ab6b3f2d83aa3abc3 | |
| uaa_utils | 20557445bf996af17995a5f13bf5f87000600f2e | |
| warden | 9c26e453d63bceb97e4b87c11526e8854a5b63e4 | |
+-------------------------------+------------------------------------------+-------+
Jobs
+-------------------------------+------------------------------------------+-------+
| Name | Version | Notes |
+-------------------------------+------------------------------------------+-------+
| acceptance-tests | d3bc77d74e3b6584a82cbb7be392cc0d484f03ff | |
| binary-buildpack | e2753ad7c384717801a27475b99bdea16669685d | |
| blobstore | 9448f84995133f1f742136d7b51644a018d6a985 | |
...
| tps | 696f332e29ccd2d1f5488d3035cb574a6aefd81c | |
| uaa | e0a7ce76682be8a4c732473e053402098b0904d1 | |
+-------------------------------+------------------------------------------+-------+
Release name: cf
Release version: 258+dev.1
Release manifest: /Users/yuby/workspace/cf-release/dev_releases/cf/cf-258+dev.1.yml
Виконання цієї команди також може зайняти дуже пристойну кількість часу (біля 2 годин на Intel Core i7). Реліз маніфест - це список пакетів та їх версій, що підуть в реліз Cloud Foundry.
Завантажуємо щойно згенерований реліз до BOSH Director:
$ bosh upload release
Acting as user 'admin' on 'Bosh Lite Director'
Copying packages
----------------
acceptance-tests
binary-buildpack
blobstore_url_signer
...
syslog_drain_binder
tps
uaa
uaa_utils
warden
Copying jobs
------------
acceptance-tests
binary-buildpack
blobstore
cc_uploader
...
stager
staticfile-buildpack
statsd-injector
syslog_drain_binder
tps
uaa
Copying license
---------------
license
Generated /var/folders/5x/5rzfjp5x6b17wb9rk_j85p8w0000gp/T/d20170222-34548-1y2nco7/d20170222-34548-1q87khk/release.tgz
Release size: 2.9G
Verifying manifest...
Extract manifest OK
Manifest exists OK
Release name/version OK
Uploading release
release.tgz: 96% |ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo | 2.8GB 44.6MB/s ETA: 00:00:02
Director task 2
Started extracting release > Extracting release. Done (00:00:25)
Started verifying manifest > Verifying manifest. Done (00:00:00)
Started resolving package dependencies > Resolving package dependencies. Done (00:00:00)
Started creating new packages
Started creating new packages > acceptance-tests/211610bf8ba4e024fe595602ebaa441abd1a040b. Done (00:00:01)
Started creating new packages > binary-buildpack/d9dc7ff39da8a7ee2157e91c2cedb4dfb3508ba8. Done (00:00:00)
...
Done creating new packages (00:01:31)
...
Started creating new jobs > tps/696f332e29ccd2d1f5488d3035cb574a6aefd81c. Done (00:00:00)
Started creating new jobs > uaa/e0a7ce76682be8a4c732473e053402098b0904d1. Done (00:00:00)
Done creating new jobs (00:00:00)
Started release has been created > cf/258+dev.1. Done (00:00:00)
Task 2 done
Started 2017-02-22 10:36:26 UTC
Finished 2017-02-22 10:38:22 UTC
Duration 00:01:56
release.tgz: 96% |oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo | 2.8GB 15.7MB/s Time: 00:03:02
Release uploaded
Після успішного завантаження, запускаємо деплой Cloud Foundry (компіляцію, раніше завантажених пакетів):
$ bosh deploy
Acting as user 'admin' on deployment 'cf-warden' on 'Bosh Lite Director'
Getting deployment properties from director...
Detecting deployment changes
----------------------------
resource_pools:
- cloud_properties:
name: random
env:
bosh:
...
Please review all changes carefully
Deploying
---------
Are you sure you want to deploy? (type 'yes' to continue): yes
Director task 3
Deprecation: Ignoring cloud config. Manifest contains 'networks' section.
Started preparing deployment > Preparing deployment. Done (00:00:01)
Started preparing package compilation > Finding packages to compile > Downloading 'consul/43cd9f9edb9b3929902b2bf0ca081ec2dd3f31a1' from global cache > Downloading 'confab/d2e83a5470f84c960be9152a25039862463f9136' from global cache > Downloading 'golang1.7/46105d4480ca083a6cafb8ca307d5e5084c655c4' from global cache > Downloading 'loggregator_common/0fce24a169a51b745965d683f436121c2086c9bd' from global cache > Downloading 'nats-common/6b42bb6d70f8fb60a8e097162259f0df7100b903' from global cache > ...
Done preparing package compilation > Finding packages to compile (00:00:07)
Started compiling packages
Started compiling packages > acceptance-tests/edccb45bc514973fb76f5ff9f97d87b273f11d4f
Started compiling packages > gorouter/0cc2bc843d45b6bd9af484bc94af6ce46a4227d2
Started creating missing vms > blobstore_z1/4167ff32-a00a-47b5-afcd-6449855e017d (0)
...
Started updating instance router_z1 > router_z1/c68c1027-5b4d-4913-be29-dbcc13c867de (0) (canary)
...
Done updating instance router_z1 > router_z1/c68c1027-5b4d-4913-be29-dbcc13c867de (0) (canary) (00:00:55)
Task 8 done
Started 2017-04-29 07:34:36 UTC
Finished 2017-04-29 07:53:27 UTC
Duration 00:18:51
Deployed 'cf-warden' to 'Bosh Lite Director'.
Врешті-решт можна переглянути всі контейнери вузлів Cloud Foundry. Ці вузли емулюються на VirtualBox машині BOSH Lite за допомогою контейнеризації Warden, яка в свою чергу також використовується для розмежовування додатків в Cloud Foundry:
$ bosh vms
Acting as user 'admin' on 'Bosh Lite Director'
Deployment `cf-warden'
Director task 15
Task 15 done
+-------------------------------------+---------+-----+-----------+--------------+
| VM | State | AZ | VM Type | IPs |
+-------------------------------------+---------+-----+-----------+--------------+
| api_z1/0 | running | n/a | large_z1 | 10.244.0.138 |
| blobstore_z1/0 | running | n/a | medium_z1 | 10.244.0.130 |
| consul_z1/0 | running | n/a | small_z1 | 10.244.0.54 |
| doppler_z1/0 | running | n/a | medium_z1 | 10.244.0.146 |
| etcd_z1/0 | running | n/a | large_z1 | 10.244.0.42 |
| ha_proxy_z1/0 | running | n/a | router_z1 | 10.244.0.34 |
| hm9000_z1/0 | running | n/a | medium_z1 | 10.244.0.142 |
| loggregator_trafficcontroller_z1/0 | running | n/a | small_z1 | 10.244.0.150 |
| nats_z1/0 | running | n/a | medium_z1 | 10.244.0.6 |
| postgres_z1/0 | running | n/a | medium_z1 | 10.244.0.30 |
| router_z1/0 | running | n/a | router_z1 | 10.244.0.22 |
| runner_z1/0 | running | n/a | runner_z1 | 10.244.0.26 |
| uaa_z1/0 | running | n/a | medium_z1 | 10.244.0.134 |
+-------------------------------------+---------+-----+-----------+--------------+
VMs total: 13
$ bosh releases
Acting as user 'admin' on 'Bosh Lite Director'
+------+------------+-------------+
| Name | Versions | Commit Hash |
+------+------------+-------------+
| cf | 258+dev.1* | 6851f46a |
+------+------------+-------------+
(*) Currently deployed
Releases total: 1
Це інсталяція вузлів DEA-архітектури: runner - DEA-агенти, hm9000 - підсистема Health Manager і т.д. Про призначення інших вузлів можна прочитати у статті, на котру я вже посилався
Надалі ці вузли можна маштабувати до більшої кількості, звісно за допомогою BOSH-a. Останній також веде історію всіх операцій, котрі можна вивести наступною командою:
$ bosh tasks recent
Всі активні задачі також можна переглянути, прибравши аргумент 'recent':
$ bosh tasks
У разі наявності проблемної задачі - її роботу можна припинити:
$ bosh cancel task task_id
де 'task_id' - номер задачі, з виводу 'bosh task'. Проте попередньо краще спробувати розібратись, чому задача зависла:
$ bosh task task_id --debug
Команда вище покаже debug журнал задачі з вказаним id.
Зробимо базові перевірки коректності виливки Cloud Foundry, для чого запитаємо сервісну інформацію через API-вузол:
$ curl -s api.bosh-lite.com/info | jq .
{
"allow_debug": true,
"token_endpoint": "https://uaa.bosh-lite.com",
"authorization_endpoint": "https://login.bosh-lite.com",
"description": "",
"version": 0,
"support": "http://support.cloudfoundry.com",
"build": "",
"name": ""
}
$ curl -s api.bosh-lite.com | jq .
{
"links": {
"self": {
"href": "https://api.bosh-lite.com"
},
"cloud_controller_v2": {
"href": "https://api.bosh-lite.com/v2",
"meta": {
"version": "2.80.0"
}
},
"cloud_controller_v3": {
"href": "https://api.bosh-lite.com/v3",
"meta": {
"version": "3.15.0"
}
},
"uaa": {
"href": "https://uaa.bosh-lite.com"
}
}
}
Посилання https://uaa.bosh-lite.com та https://login.bosh-lite.com відкриваються в браузері, але за ними, насправді, не знаходиться нічого цікавого:
Більш детальну перевірку нового релізу можна провести, виконавши acceptance чи smoke тести, доступ до яких відбувається через меню "run errand":
$ bosh run errand
1. acceptance_tests
2. smoke_tests
Choose an errand: 2
Acting as user 'admin' on deployment 'cf-warden' on 'Bosh Lite Director'
...
Errand 'smoke_tests' completed successfully (exit code 0)
Після чого буде створений новий вузол, з якого і будуть проходити тестування.
Доступ і управління вузлами Cloud Foundry, деплой додатків та управління ними відбувається через клієнт cf_cli. Його необхідно проінсталювати, приклад його установки для усіх популярних ОС описаний за посиланням https://docs.cloudfoundry.org/cf-cli/install-go-cli.html
$ cf -v
cf version 6.26.0+9c9a261fd.2017-04-06
Використовуючи логін/пароль admin/admin, пройдемо аутентифікацію Cloud Foundry:
$ cf login -a https://api.bosh-lite.com --skip-ssl-validation -u admin -p admin
API endpoint: https://api.bosh-lite.com
Authenticating...
OK
Targeted org system
API endpoint: https://api.bosh-lite.com (API version: 2.80.0)
User: admin
Org: system
Space: No space targeted, use 'cf target -s SPACE'
Cтворимо нову організацію (org) та простір (space) в CF:
$ cf create-org org
Creating org org as admin...
OK
Assigning role OrgManager to user admin in org org ...
OK
TIP: Use 'cf target -o org' to target new org
$ cf create-space space -o org
Creating space space in org org as admin...
OK
Assigning role RoleSpaceManager to user admin in org org / space space as admin...
OK
Assigning role RoleSpaceDeveloper to user admin in org org / space space as admin...
OK
TIP: Use 'cf target -o "org" -s "space"' to target new space
Як і порадили, перемикаємось в новостворений space та org:
$ cf target -o org -s space
api endpoint: https://api.bosh-lite.com
api version: 2.80.0
user: admin
org: org
space: space
Ці поняття необхідні для управління правами користувачів, що можуть, наприклад, володіти доступом лише до окремих просторів/організацій, читати сервісну інформацію додатків і т.п. Детальніше з темою доступів можна ознайомитись за наступним посиланням https://docs.cloudfoundry.org/concepts/roles.html
Наразі все готово для деплою додатків. Зклонуємо репозиторій тестового додатку spring-music:
$ cd ~/workspace
$ git clone https://github.com/cloudfoundry-samples/spring-music.git
$ cd spring-music
Проінсталюємо Java на хост-машині.
$ java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
Правила, за якими буде вилито додаток spring-music, описані в manifest.yml, котрий і буде читати CF cli:
$ cat manifest.yml
---
applications:
- name: spring-music
memory: 1G
random-route: true
path: build/libs/spring-music.jar
Отже, додатку буде виділено 1Gb оперативної пам'яті, завдяки опції 'random-route: true', додаток отримає випадкове доменне ім'я (його можна буде побачити вже після створення додатку), а 'path' вказує на адресу jar-файлу. Сюди ж одразу можна додати інформацію про кількість необхідних одиниць програми.
Про подробиці написання маніфестів деплою додатків можна прочитати в офіційній документації Cloud Foundry.
Наразі лишилось скомпілювати spring-music.jar, для чого і потрібно було інсталювати Java-у:
$ ./gradlew clean assemble
Запуститимо деплой цього додатку в Cloud Foundry:
$ cf push
Using manifest file /Users/yuby/workspace/spring-music/manifest.yml
Creating app spring-music in org org / space space as admin...
OK
Creating route spring-music-stratocratic-bronzite.bosh-lite.com...
OK
Binding spring-music-stratocratic-bronzite.bosh-lite.com to spring-music...
OK
Uploading spring-music...
Uploading app files from: /var/folders/5x/5rzfjp5x6b17wb9rk_j85p8w0000gp/T/unzipped-app148108414
Uploading 38.9M, 234 files
Done uploading
OK
Starting app spring-music in org org / space space as admin...
-----> Downloaded app package (39M)
-----> Java Buildpack Version: v3.16 | https://github.com/cloudfoundry/java-buildpack.git#2110750
-----> Downloading Open Jdk JRE 1.8.0_131 from https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_131.tar.gz (28.3s)
Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre (1.1s)
-----> Downloading Open JDK Like Memory Calculator 2.0.2_RELEASE from https://java-buildpack.cloudfoundry.org/memory-calculator/trusty/x86_64/memory-calculator-2.0.2_RELEASE.tar.gz (0.4s)
Memory Settings: -Xmx681574K -XX:MaxMetaspaceSize=104857K -Xss349K -Xms681574K -XX:MetaspaceSize=104857K
-----> Downloading Container Certificate Trust Store 2.1.0_RELEASE from https://java-buildpack.cloudfoundry.org/container-certificate-trust-store/container-certificate-trust-store-2.1.0_RELEASE.jar (0.8s)
Adding certificates to .java-buildpack/container_certificate_trust_store/truststore.jks (0.4s)
-----> Downloading Spring Auto Reconfiguration 1.10.0_RELEASE from https://java-buildpack.cloudfoundry.org/auto-reconfiguration/auto-reconfiguration-1.10.0_RELEASE.jar (2.6s)
-----> Uploading droplet (85M)
0 of 1 instances running, 1 starting
1 of 1 instances running
App started
OK
App spring-music was started using this command `CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-2.0.2_RELEASE -memorySizes=metaspace:64m..,stack:228k.. -memoryWeights=heap:65,
...
org.springframework.boot.loader.JarLauncher`
Showing health and status for app spring-music in org org / space space as admin...
OK
requested state: started
instances: 1/1
usage: 1G x 1 instances
urls: spring-music-stratocratic-bronzite.bosh-lite.com
last uploaded: Sat Apr 29 20:10:58 UTC 2017
stack: cflinuxfs2
buildpack: container-certificate-trust-store=2.1.0_RELEASE java-buildpack=v3.16-https://github.com/cloudfoundry/java-buildpack.git#2110750 java-main open-jdk-like-jre=1.8.0_131 open-jdk-like-memory-calculator=2.0.2_RELEASE spring-auto-reconfiguration=1.10.0_RELEASE
state since cpu memory disk details
#0 running 2017-04-29 11:12:23 PM 231.4% 570.5M of 1G 0 of 1G
Додаток spring-music буде працювати за посиланням http://spring-music-stratocratic-bronzite.bosh-lite.com.
Всі додатки та базову сервісну інформацію про їх роботу в Cloud Foundry можна переглянути наступним чином:
$ cf apps
Getting apps in org org / space space as admin...
OK
name requested state instances memory disk urls
spring-music started 1/1 1G 1G spring-music-stratocratic-bronzite.bosh-lite.com
Масштабувати spring-music також неважка справа, виконаємо наступне:
$ cf scale spring-music -m 2G -k 2G -i 2
$ cf apps
Getting apps in org org / space space as admin...
OK
name requested state instances memory disk urls
spring-music started 2/2 2G 2G spring-music-stratocratic-bronzite.bosh-lite.com
Перейшовши за URL-адресою цього додатку, можна побачити його веб-інтерфейс:
Наразі spring-music працює в режимі 'in-memory', адже поки відсутня будь-яка база даних в нашому релізі CF. Щоб виправити цю прогалину, ми встановимо Redis і налаштуємо цей додаток на його використання.
3. INSTALLATION REDIS BROKER/SERVICE
Для установки Redis спершу необхідно зклонувати репозиторій:
$ cd ~/workspace
$ git clone https://github.com/pivotal-cf/cf-redis-release
Для успішного відпрацювання подальших скриптів необхідні: ruby 2.3.0 (ця версія, чомусь, захардкожена в Gemfile), Qt-фреймворк версії не вище за 5.5 (інакше можуть бути проблеми з установкою capybara-webkit), ruby bundler.
Для установки Ruby ліпше за все скористатись rbenv, детальніше про це можна почитати за наступним посиланням https://gorails.com/setup/osx/10.12-sierra.
Qt/Qmake можна встановити з репозиторіїв brew:
$ brew install qt@5.5
$ cd /usr/local/Cellar/qt@5.5/5.5.1_1/bin
$ PATH=`pwd`:$PATH
Після чого базово перевіримо роботу qmake:
$ qmake -v
QMake version 3.0
Using Qt version 5.5.1 in /usr/local/Cellar/qt@5.5/5.5.1_1/lib
Оновлюємо/завантажуємо сабмодулі, необхідні для збірки Redis-релізу, скориставшись update-release скриптом, що поширюється в тому ж репозиторії:
$ cd ~/workspace/cf-redis-release
$ ./scripts/update-release
+ git submodule update --init --recursive
+ bundle install
Using rake 11.1.2
Using CFPropertyList 2.3.2
Using i18n 0.7.0
Using json 1.8.3
Using minitest 5.9.0
...
Using bosh_cli 1.3215.4.0
Using ops_manager_ui_drivers 2.10.9
Using ruby_vcloud_sdk 0.7.4
Using vm_shepherd 3.1.7
Using opsmgr 0.34.20
Using prof 0.31.11
Bundle complete! 13 Gemfile dependencies, 125 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
Реліз Redis-у залежить від релізу cf-routing, його ми встановимо вже у готовому зібраному вигляді:
$ bosh upload release https://bosh.io/d/github.com/cloudfoundry-incubator/cf-routing-release\?v\=0.143.0
Acting as user 'admin' on 'Bosh Lite Director'
Using remote release `https://bosh.io/d/github.com/cloudfoundry-incubator/cf-routing-release?v=0.143.0'
Director task 40
Started downloading remote release > Downloading remote release. Done (00:00:33)
Started extracting release > Extracting release. Done (00:00:01)
...
Started creating new jobs > tcp_router/c8ba8ed129c93d4329a2acbe42938624103d5e73. Done (00:00:00)
Done creating new jobs (00:00:00)
Started processing 1 existing job > Processing 1 existing job. Done (00:00:00)
Started release has been created > routing/0.143.0. Done (00:00:00)
Task 40 done
Started 2017-03-22 10:25:16 UTC
Finished 2017-03-22 10:25:50 UTC
Duration 00:00:34
Release uploaded
Виключно для прикладу збільшимо кількість майбутніх вузлів redis, що будуть тримати корисні дані:
$ vim templates/sample_stubs/meta-warden.yml
...
redis:
broker:
name: redis
subdomain: redis-broker
...
dedicated_plan:
instance_count: 3
Тепер згенеруємо deployment маніфест:
$ ./scripts/generate-deployment-manifest warden templates/sample_stubs/infrastructure-warden.yml > cf-redis-lite.yml
Укажемо uuid BOSH інстансу:
$ vim cf-redis-lite.yml
...
director_uuid: 63ddb6a6-d6fe-40e1-b16b-2ff6b2034c79
...
Uuid можна дізнатись, виконавши команду:
# bosh status --uuid
63ddb6a6-d6fe-40e1-b16b-2ff6b2034c79
Зробимо його активним в BOSH:
$ bosh deployment cf-redis-lite.yml
Deployment set to `/Users/yuby/workspace/cf-redis-release/cf-redis-lite.yml'
Завантажимо реліз Redis:
$ bosh upload release releases/cf-redis/cf-redis-429.0.0.yml
Acting as user 'admin' on 'Bosh Lite Director'
...
Downloading from blobstore (id=c0e06e06-64ab-4ee9-8fe9-f54288e7d568)...
Copying packages
----------------
cf-cli
cf-redis-broker
cf-redis-nginx
cf-redis-smoke-tests
ginkgo
go
redis-common
redis
ruby
Copying jobs
------------
broker-deregistrar
broker-registrar
cf-redis-broker
dedicated-node
smoke-tests
syslog-configurator
Copying license
---------------
license
Generated /var/folders/5x/5rzfjp5x6b17wb9rk_j85p8w0000gp/T/d20170430-65736-zas9d7/d20170430-65736-1ez2coj/release.tgz
Release size: 109.5M
Verifying manifest...
Extract manifest OK
Manifest exists OK
Release name/version OK
Uploading release
release.tgz: 96% |oooooooooooooooooooooooooooooooooooooooooooooooo | 105.1MB 27.0MB/s ETA: 00:00:00
Director task 46
Started extracting release > Extracting release. Done (00:00:00)
Started verifying manifest > Verifying manifest. Done (00:00:00)
Started resolving package dependencies > Resolving package dependencies. Done (00:00:00)
Started creating new packages
Started creating new packages > cf-cli/33a64fb1b0ca68b3403fe5b0254e86ec7d672dba. Done (00:00:00)
...
Started creating new packages > ruby/9b59d2f2700da81a98c38c73cd27b6ccf26f188c. Done (00:00:00)
Done creating new packages (00:00:02)
Started creating new jobs
Started creating new jobs > broker-deregistrar/fd74f060a430d793ed734328638db0a5fee34395. Done (00:00:00)
...
Started creating new jobs > syslog-configurator/d0da02b5001631bd43b90bd86af093f2cd695aab. Done (00:00:00)
Done creating new jobs (00:00:00)
Started release has been created > cf-redis/429.0.0. Done (00:00:00)
Task 46 done
Started 2017-04-30 12:54:33 UTC
Finished 2017-04-30 12:54:35 UTC
Duration 00:00:02
release.tgz: 96% |oooooooooooooooooooooooooooooooooooooooooooooooooo | 105.3MB 14.9MB/s Time: 00:00:07
Release uploaded
У разі успішного виконання попередніх команд, деплоїмо реліз Redis для BOSH Lite:
$ bosh deploy
Acting as user 'admin' on deployment 'bosh-lite-redis' on 'Bosh Lite Director'
Getting deployment properties from director...
Unable to get properties list from director, trying without it...
Detecting deployment changes
----------------------------
resource_pools:
- cloud_properties:
name: bosh-lite-redis
ram: 1024
...
syslog_aggregator:
address: "<redacted>"
port: "<redacted>"
Please review all changes carefully
Deploying
---------
Are you sure you want to deploy? (type 'yes' to continue): yes
Director task 47
Deprecation: Ignoring cloud config. Manifest contains 'networks' section.
Started preparing deployment > Preparing deployment. Done (00:00:00)
Started preparing package compilation > Finding packages to compile. Done (00:00:00)
Started compiling packages
Started compiling packages > cf-redis-smoke-tests/6aec054413f46621d3bd6130203509da36bdeec7
Done compiling packages > cf-redis-smoke-tests/6aec054413f46621d3bd6130203509da36bdeec7 (00:00:09)
...
Started compiling packages > cf-redis-broker/9a6e7f1aede494f7bf50910bb3958028f7f077fa. Done (00:00:16)
Done compiling packages (00:01:53)
Started creating missing vms
Started creating missing vms > cf-redis-broker/aa7b6e0e-24e0-44cb-8399-92a736531b16 (0)
...
Done updating instance dedicated-node > dedicated-node/b61fd4a4-1943-4f0e-a929-a52b20d5b4b3 (2) (00:01:05)
Done updating instance dedicated-node (00:02:10)
Task 47 done
Started 2017-04-30 13:09:45 UTC
Finished 2017-04-30 13:15:07 UTC
Duration 00:05:22
Deployed `bosh-lite-redis' to `Bosh Lite Director'
Після успішного деплою, новий реліз redis має з’явитись у меню 'bosh vms'.
$ bosh vms 'bosh-lite-redis'
Acting as user 'admin' on deployment 'bosh-lite-redis' on 'Bosh Lite Director'
Director task 57
Task 57 done
+--------------------+---------+-----+----------+-------------+
| VM | State | AZ | VM Type | IPs |
+--------------------+---------+-----+----------+-------------+
| cf-redis-broker/0 | running | n/a | redis_z1 | 10.244.3.2 |
| dedicated-node/0 | running | n/a | redis_z1 | 10.244.3.6 |
| dedicated-node/1 | running | n/a | redis_z1 | 10.244.3.10 |
| dedicated-node/2 | running | n/a | redis_z1 | 10.244.3.14 |
+--------------------+---------+-----+----------+-------------+
VMs total: 4
Реліз складається із 3-ох вузлів Redis (dedicated-node), як і було вказано в meta-warden.yml, та одного брокера. Коректність його роботи можна перевірити запустивши вже інтегровані в реліз тести.
Як альтернатива, можна скористатись 'scripts/deploy-release' для виливки релізу (як і радить офіційна документація), котрий виконує всі ті ж дії, разом зі зборкою cf-networking.
Зареєструємо новий сервіс:
$ bosh run errand broker-registrar
Acting as user 'admin' on deployment 'bosh-lite-redis' on 'Bosh Lite Director'
Director task 14
Started preparing deployment > Preparing deployment. Done (00:00:01)
Started preparing package compilation > Finding packages to compile. Done (00:00:00)
Started creating missing vms > broker-registrar/33b0f475-c49d-40aa-a43a-9ff885c3c64f (0). Done (00:00:07)
Started updating instance broker-registrar > broker-registrar/33b0f475-c49d-40aa-a43a-9ff885c3c64f (0) (canary). Done (00:00:47)
Started running errand > broker-registrar/0. Done (00:00:07)
Started fetching logs for broker-registrar/33b0f475-c49d-40aa-a43a-9ff885c3c64f (0) > Finding and packing log files. Done (00:00:01)
Started deleting errand instances broker-registrar > broker-registrar/33b0f475-c49d-40aa-a43a-9ff885c3c64f (0). Done (00:00:02)
Task 14 done
Started 2017-05-01 19:27:12 UTC
Finished 2017-05-01 19:28:17 UTC
Duration 00:01:05
[stdout]
cf version 6.21.1+6fd3c9f-2016-08-10
Setting api endpoint to https://api.bosh-lite.com...
OK
API endpoint: https://api.bosh-lite.com (API version: 2.80.0)
Not logged in. Use 'cf login' to log in.
API endpoint: https://api.bosh-lite.com
Authenticating...
OK
Use 'cf target' to view or set your target org and space
Creating service broker redis as admin...
OK
Disabling access to all plans of service redis for all orgs as admin...
OK
Enabling access to all plans of service redis for all orgs as admin...
OK
...
Errand `broker-registrar' completed successfully (exit code 0)
Як і планували, використаємо redis у якості бекенду для додатку spring-music, котрий ми задеплоїли раніше.
Переглянемо, чи присутній сервіс redis-у в marketplace:
$ cf marketplace
Getting services from marketplace in org org / space space as admin...
OK
service plans description
redis shared-vm, dedicated-vm Redis service to provide a key-value store
TIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.
Створимо новий інстанс сервісу redis для додатку spring-music:
$ cf create-service redis shared-vm spring_music_redis
Creating service instance spring_music_redis in org org / space space as admin...
OK
Переглянемо всі наявні інстанси сервісів і з якими додатками вони пов’язані:
$ cf services
Getting services in org org / space space as admin...
OK
name service plan bound apps last operation
spring_music_redis redis shared-vm create succeeded
Щойно створений інстанс spring_music_redis поки не пов’язаний із жодним додатком, про що і свідчить пусте поле навпроти 'bound apps'. Виконаємо цю прив’язку:
$ cf bind-service spring-music spring_music_redis
Binding service spring_music_redis to app spring-music in org org / space space as admin...
OK
TIP: Use 'cf restage spring-music' to ensure your env variable changes take effect
Щоб зміни вступили в силу необхідно зробити restage вже працюючому додатку:
$ cf restage spring-music
Restaging app spring-music in org org / space space as admin...
0 of 1 instances running, 1 starting
1 of 1 instances running
App started
OK
App spring-music was started
...
Showing health and status for app spring-music in org org / space space as admin...
OK
requested state: started
instances: 1/1
usage: 1G x 1 instances
urls: spring-music-uneternized-torridness.bosh-lite.com
last uploaded: Tue Mar 21 12:43:30 UTC 2017
stack: cflinuxfs2
buildpack: container-certificate-trust-store=2.0.0_RELEASE java-buildpack=v3.13-https://github.com/cloudfoundry/java-buildpack.git#03b493f java-main open-jdk-like-jre=1.8.0_121 open-jdk-like-memory-calculator=2.0.2_RELEASE spring-auto-reconfiguration=1.10.0_RELEASE
state since cpu memory disk details
#0 running 2017-03-22 12:58:42 PM 239.9% 570M of 1G 0 of 1G
І вже після вивід команди 'cf services' виглядатиме наступним чином:
$ cf services
Getting services in org org / space space as admin...
OK
name service plan bound apps last operation
spring_music_redis redis shared-vm spring-music create succeeded
Тестовий додаток spring-music також відображає, що наразі він використовує сервіс spring_music_redis у якості бази даних:
Посилання:
https://mariash.github.io/learn-bosh/#introduction
https://www.slideshare.net/gwennetourneau/bosh-20reloaded
https://github.com/cloudfoundry-community/bosh-lite-demo
http://docs.cloudfoundry.org/deploying/boshlite/index.html
http://stackoverflow.com/a/36757764/2971192
http://www.starkandwayne.com/blog/running-cloud-foundry-locally-with-bosh-lite/
https://vyatkins.wordpress.com/2015/02/13/how-to-deploy-cloud-foundry-on-your-local-machine/
https://specify.io/how-tos/install-cloud-foundry-with-bosh
https://www.altoros.com/blog/how-to-install-cloud-foundry-locally-with-bosh-lite/
https://www.evoila.de/2015/04/27/howto-fix-bosh-lite-deployment-with-error-error-100-permission-denied-dir_s_mkdir-vagranttmp/?lang=en
https://github.com/cloudfoundry-samples/test-app
https://github.com/cloudfoundry-samples/spring-music
https://github.com/pivotal-cf/cf-redis-release
https://github.com/cloudfoundry-community/redis-boshrelease
https://github.com/pivotal-cf/pcfdev
https://pivotal.io/platform/pcf-tutorials/getting-started-with-pivotal-cloud-foundry/introduction
https://github.com/cloudfoundry/bosh-lite/blob/master/docs/bosh-cck.md
https://github.com/cloudfoundry/bosh-lite/blob/master/docs/troubleshooting.md
Немає коментарів:
Дописати коментар