More Related Content
Similar to cf-containers-broker を使ってローカル環境もサービスの恩恵をうける (20)
cf-containers-broker を使ってローカル環境もサービスの恩恵をうける
- 1. Copyright© 2016 NTT Software Corporation
cf-containers-brokerを使った
簡単サービス作成
NTTソフトウェア株式会社
クラウド&セキュリティ事業部
クラウド事業ユニット
森川 健
- 2. Copyright© 2016 NTT Software Corporation 2
自己紹介
• 氏名
• 森川 健(Takeshi Morikawa)
• 所属
• NTTソフトウェア株式会社
クラウド&セキュリティ事業部
クラウド事業ユニット
• 担当業務
• 2012年3月~2016年2月 Cloud Foundry担当
※NTTソフトウェアは2012年2月の日本Cloud Foundryグループ設立時より参加
NTTソフトウェアOSS(オープンソースソフトウェア)の活用ページ
- 3. Copyright© 2016 NTT Software Corporation 3
主な活動
• Cloud Foundry v2向けのコアコンポーネントの機能改善
• Implementation of High Availability of Application instances by NTT
• 日本Cloud Foundryグループブログ百日行執筆
• 47日目:Shout
• 52日目:Tracks
• 68日目:spring-boot-cf-service-broker-mongo
• 69日目:Let’s Chat
• 81日目:Rocket.Chat
• 82日目:Wekan
• 86日目:GroupSession
• 92日目:webcrontab
• 96日目:NicoNico SPEENYA
• 99日目:SHIRASAGI
- 4. Copyright© 2016 NTT Software Corporation 4
百日行の投稿によって
Cloud Foundry OSS版の公式ML(コミュニティ)
にてmongo brokerについて質問に貢献
This is excellent.
I think your blog post outlines
exactly what I was looking for.
Thank you for the help.
http://cf-dev.70369.x6.nabble.com/cf-dev-Provided-service-broker-API-version-is-not-
supported-Expected-Version-2-4-Provided-Version-nul-td2905.html#a2932
- 7. Copyright© 2016 NTT Software Corporation 7
PaaSでDBに接続する際は
以下のように
環境変数で接続情報を使われる事が多い
DATABASE_URL=postgres://foo:foopass@hogehoge.com:5432/test123db
- 8. Copyright© 2016 NTT Software Corporation 8
Cloud Foundryでは
PostgreSQLやMySQL等をサービスと呼び
CLIからAPIを経由して以下の操作が可能
• サービス作成と削除
• サービスのアプリと紐付けと解除
アプリを紐付ける事で環境変数からサービスの接続情報が取得可能になる
- 9. Copyright© 2016 NTT Software Corporation 9
サービスの接続情報
サービスによって接続情報作成のタイミングや
作成のされ方が異なる場合がある
• 作成タイミング
• サービスの作成時(create-service)
• アプリとの紐付け時(bind-service)
• 作成のされ方
• 1つのサービスインスタンスで複数ユーザ分のサービスを載せる
(マルチテナント型)
• 1つのサービスインスタンスで1ユーザ分のサービスを載せる
- 11. Copyright© 2016 NTT Software Corporation 11
Cloud Foundryでは
通常Service Brokerを個別に1種類ずつ作成
するのが一般的
• PostgreSQL用
• https://github.com/cloudfoundry-community/postgresql-cf-
service-broker
• MySQL用
• https://github.com/cloudfoundry/cf-mysql-broker
• MongoDB用
• https://github.com/spring-cloud-samples/cloudfoundry-
service-broker
- 12. Copyright© 2016 NTT Software Corporation 12
複数のサービス用の
Service Brokerを
メンテするのが大変
&
パブリックな
Cloud Foundryサービスと
同じサービスを簡単に作りたい
- 14. Copyright© 2016 NTT Software Corporation 14
cf-containers-brokerとは
dockerの仕組みを使って
サービスを簡単に作成可能になるbroker
• cloudfoundry-communityで管理されている
• https://github.com/cloudfoundry-community/cf-containers-broker
• DockerImageを使う
• Rails製
• サービスの追加はYAMLの設定ファイルで行う
- 15. Copyright© 2016 NTT Software Corporation 15
メリット
パブリックなCloud Foundryサービスで用意されて
いるような、豊富なサービスと同じ利便性をプライ
ベートな開発環境向けに使用する事が可能
※『商用環境でそのまま利用可能か?』については、docker-boshreleaseのDisclaimer(免責事項)に以下のよう
に記載
『This is not presently a production ready Docker BOSH release. This is a work in progress. It is
suitable for experimentation and may not become supported in the future.』
- 16. Copyright© 2016 NTT Software Corporation 16
利用方法
大きく分けて2つ
• docker-boshreleaseを使ってboshでデプロイして利用する
• https://github.com/cloudfoundry-community/docker-boshrelease
• cf-containers-broker自体をdockerで利用する
※Railsなのでローカルでrubyを入れて動かす事も可能
• https://github.com/cloudfoundry-community/cf-containers-broker
- 17. Copyright© 2016 NTT Software Corporation 17
manifestの種類(環境)
• githubからcloneするとexampleディレクトリの下に
• bosh-lite
• google
• openstack
• aws
• bosh用manifestのサンプルが存在
• 4種類の環境それぞれ用に更に4種類の構成用manifest
が用意されている
- 18. Copyright© 2016 NTT Software Corporation 18
manifestの種類(構成)
Manifest名 特徴
docker-〇〇〇.yml
• manifestの中でdocker imageを指定してboshでデプロイ可能になる
• Dockerfile相当の記述をmanifest内部に記述する事も可能
• 起動したDocker imageのプロセスは他のコンポーネントと同様にmonitで管理され
る
• 基本的にはデプロイ後上げたままで共通的に使うような用途向け(credentialを個々
に分けるものではないのでサービスとしてはあまり向かない)
docker-broker-
〇〇〇.yml
• cf-containers-brokerをboshでデプロイする用
• docker images及びserviceのcatalog情報をmanifestで指定する事でデプロイ可能
• docker image側でcredential情報を環境変数を使って生成する仕組みになっているも
のであればcreate-service毎に異なるcredentialでサービスが作成可能になる
• 1サービスインスタンスにつき1dockerコンテナ
• 基本的には1broker:1dockerになる
• 一部サンプルの中にはcatalog情報の値としてmetadataでPCF向けの値があるが必須
ではない
docker-swarm-
〇〇〇.yml
• dockerとdocker swarmをデプロイする用のmanifest
• この後に説明するmanifestの構成を作る前段階のサンプル的なmanifest
docker-swarm-
broker-〇〇〇.yml
• docker-broker-〇〇〇〇.ymlのswarm対応版で複数のvm上のdockerに対応可能
• elasticsearchやetcd,rabittmq,nats,etcd等の様々なサービスが利用可能なexample
• 1サービスインスタンスにつき1dockerコンテナ
- 19. Copyright© 2016 NTT Software Corporation 19
docker-swarm-brokerのmanifestに
記述されているサービス一覧
arangodb22 mysql56
consul nats
couchdb16 neo4j21
elasticsearch13 postgresql93
etcd rabbitmq33
logstash14 redis28
memcached14
128mb,512m,1GB rethinkdb
mongodb26
- 21. Copyright© 2016 NTT Software Corporation 21
当初の予定では...
docker-boshreleaseを説明する予定でしたが
最新版のbosh-lite用サンプルで検証した所、
以下の問題が発生(それ以外のexampleは環境が準備できず未確認)
※以前過去に検証したのはv16のタグ、今回はcf-release v230 + docker-broker v22 or v23で検証
• 10.244.0.6のIPが指定されているがcf用構築のrelease
(cf-release)側でNATS用で使われていてデプロイに失敗
• errandによるbrokerのregisterがエラーが出て正常動作しな
かった
- 23. Copyright© 2016 NTT Software Corporation 23
事前準備
事前に以下の準備を行う
• Dockerを使うので事前に準備
今回はbosh-liteを起動させているホスト側にdockerをインストールを実施
• Cloud Foundry環境の構築
• 今回の検証ではbosh-liteでcf-release v230を事前にデプロイ済み
- 24. Copyright© 2016 NTT Software Corporation 24
イメージのビルド
$ git clone https://github.com/cloudfoundry-community/cf-containers-broker.git
$ cd cf-containers-broker/
$ sudo docker build -t frodenas/cf-containers-broker .
検証時コミット
https://github.com/cloudfoundry-community/cf-containers-broker/tree/3b6cdac3c34059e2f22ab456354f0bc285a791dc
- 25. Copyright© 2016 NTT Software Corporation 25
設定ファイルの準備
$ mkdir -p /tmp/cf-containers-broker/config
$ mkdir -p /tmp/cf-containers-broker/logs
$ cp config/settings.yml /tmp/cf-containers-broker/config
$ cp config/unicorn.conf.rb /tmp/cf-containers-broker/config
- 26. Copyright© 2016 NTT Software Corporation 26
settings.ymlの修正
$ git diff
diff --git a/config/settings.yml b/config/settings.yml
cookie_secret: 'e7247dae-a252-4393-afa3-2219c1c02efd‘
session_expiry: 86400
cc_api_uri: 'http://api.vcap.me‘
- external_ip: 127.0.0.1
- external_host: 'containers.vcap.me‘
+ cc_api_uri: 'http://api.bosh-lite.com‘
+ external_ip: 192.168.15.82
+ external_host: 'containers.192.168.15.82.xip.io‘
ssl_enabled: false
skip_ssl_validation: true
修正箇所のdiff
- 27. Copyright© 2016 NTT Software Corporation 27
settings.ymlの修正ポイント
事前に以下の準備を行う
• cc_api_uriはbosh-liteで起動したccngのapiのuri
• extarnal_ipはdockerでcf-container-broekrを起動している場合はホスト
側のIP
• external_host部分はcontainers+ホスト側のIPにxipでアドレス解決可能
にしたもの
※この修正が必須かは不明
デフォルトのPostgreSQL以外をサービス化する場合はdocker-boshreleaseのexampleのdocker-swarm-
brokerから移植するのがお勧め
- 28. Copyright© 2016 NTT Software Corporation 28
起動※必要に応じてdocker-compose.ymlに書いた方がお勧めです
$ sudo docker run -d --name cf-containers-broker ¥
--publish 80:80 ¥
--volume /var/run:/var/run ¥
--volume /tmp/cf-containers-broker/logs:/app/log ¥
--volume /tmp/cf-containers-broker/config:/config ¥
frodenas/cf-containers-broker
- 29. Copyright© 2016 NTT Software Corporation 29
Service Broker登録と確認
(create-service-brokerとenable-service-access)
$ cf create-service-broker docker-broker containers secret http://192.168.15.82
while read p __; do
cf enable-service-access "$p";
done < <(cf service-access | awk '/orgs/{y=1;next}y && NF' | sort | uniq)
登録
Cloud FoundryのAPIサーバであるCloud ControllerにService Brokerとして登録する
• デフォルトのユーザ名はcontainersでパスワードがsecret
• 192.168.15.82は起動の手順の際に”docker run”でリッスンしたアドレスを入力する
登録確認
$ cf marketplace
Getting services from marketplace in org admin / space admin as admin...OK
service plans description
postgresql93 free PostgreSQL 9.3 service for application development and testing
TIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.
- 30. Copyright© 2016 NTT Software Corporation 30
サービス作成とアプリとの紐付け
(create-serviceとbind-service)
$ cf create-service postgresql93 free dora-pg
Creating service instance dora-pg in org admin / space admin as admin...OK
作成
以下の内容を入力しサービスを作成する
• cf create-service <service名> <plan名> <任意のサービスインスタンス名>
$ cf bind-service dora dora-pg
アプリとの紐付け
以下の内容を入力しアプリとの紐付けを行う
• cf bind-service <アプリ名><作成時に入力したサービスインスタンス名>
- 31. Copyright© 2016 NTT Software Corporation 31
サービスの接続情報確認
(env)
$ cf env dora
Getting env variables for app dora in org admin / space admin as admin...
OK
System-Provided:
{
"VCAP_SERVICES": {
"postgresql93": [
{
"credentials": {
"dbname": "hnae3b9lntbijl2y",
"hostname": "192.168.15.82",
"password": "io7we2q8vjtfeevz",
"port": "32768",
"ports": {
"5432/tcp": "32768“
},
"uri": "postgres://vnbchxzfrnmtujwi:io7we2q8vjtfeevz@192.168.15.82:32768/hnae3b9lntbijl2y",
"username": "vnbchxzfrnmtujwi“
},
"label": "postgresql93",
"name": "dora-pg",
"plan": "free",
"tags": [
"postgresql93",
"postgresql",
"relational“
]
}
]
}
}
サービスの接続情報を確認
- 32. Copyright© 2016 NTT Software Corporation 32
psqlで接続確認
$ psql -U vnbchxzfrnmtujwi -p 32768 -h 192.168.15.82 -d hnae3b9lntbijl2y
Password for user vnbchxzfrnmtujwi:
psql (9.1.13, server 9.4.5)
WARNING: psql version 9.1, server version 9.4.
Some psql features might not work.
Type "help" for help.hnae3b9lntbijl2y=#
psqlで接続確認を行う
- 33. Copyright© 2016 NTT Software Corporation 33
コンテナの状態チェック
$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
19b0d2c2323f frodenas/postgresql:latest “/scripts/run.sh ” 41 hours ago Up 41 hours
0.0.0.0:32768->5432/tcp cf-f418dd0f-3e76-4cf4-95fa-d1f9ad33ad05
5d61ef75398a frodenas/cf-containers-broker "/app/bin/run.sh bun 41 hours ago Up 41 hours
0.0.0.0:80->80/tcp cf-containers-broker
docker psの状態を確認すると以下のようになっている
- 34. Copyright© 2016 NTT Software Corporation 34
動作の仕組み
(containers-broker側)
credentials:
username:
key: 'MONGODB_USERNAME‘
password:
key: 'MONGODB_PASSWORD‘
dbname:
key: 'MONGODB_DBNAME'
uri:
prefix: 'mongodb‘
port: '27017/tcp'
create-service毎に異なるcredentialsに対応させるにはsetting.yml側の
cledentialsに固定値orランダム値を使用するかの定義を記述する
• https://github.com/cf-platform-eng/cf-containers-broker#bindings
• https://github.com/cf-platform-eng/cf-containers-broker/blob/master/CREDENTIALS.md
• http://docs.cloudfoundry.org/services/binding-credentials.html
usernameを自動生成する場合
credentials:
username:
key: 'MONGODB_USERNAME‘
value: ‘admin‘
password:
key: 'MONGODB_PASSWORD‘
dbname:
key: 'MONGODB_DBNAME'
uri:
prefix: 'mongodb‘
port: '27017/tcp'
usernameを“admin”に固定する場合
- 35. Copyright© 2016 NTT Software Corporation 35
動作の仕組み
(DockerImage側)
#!/bin/bash
USER=${MONGODB_USERNAME:-mongo}
PASS=${MONGODB_PASSWORD:-$(pwgen -s -1 16)}
DB=${MONGODB_DBNAME:-admin}
cf-containers-brokerがdocker runのオプションで-eを使って環境変数が渡ってくるので、起動時のス
クリプト内(run.sh等)でその値を使って
credential情報を起動時に変更させるようにする
• https://github.com/frodenas/docker-mongodb/blob/master/scripts/first_run.sh
first_run.sh
- 36. Copyright© 2016 NTT Software Corporation 36
動作の仕組み
(イメージ)
Cloud Controller
USER=${MONGODB_USERNAME:-mongo}
PASS=${MONGODB_PASSWORD:-$(pwgen -s -
1 16)}
DB=${MONGODB_DBNAME:-admin}
first_run.sh
docker run ¥
-e “MONGODB_USEDRNAME=admin“ ¥
-e “MONGODB_PASS WORD=RANDOM_PASS” ¥
-e “MONGODB_DBNAME=RANDOM_DBNAME”
$ create-service mongo free mongo1
create-serviceにつき1dockerコンテナ
cf-containers-broker
- 37. Copyright© 2016 NTT Software Corporation 37
• cf-containers-brokerは
• Dockerの仕組みを使ってサービス化が可能になるので活
用する事で開発しやすくなる
• Service Brokerの挙動を把握する参考になる
まとめ
- 39. Copyright© 2016 NTT Software Corporation 39
商標及び登録商標について
• Cloud Foundryは、米国およびその他の国におけるPivotal Software, Inc.の商標ま
たは登録商標です。
• Dockerは、米国およびその他の国におけるDocker, Inc.の登録商標または商標です。
• Twitterの名称およびそのロゴ、Twitterの「T」ロゴ、Tweet、Twitterの青い鳥は、
米国およびその他の国におけるTwitter, Inc.の登録商標または商標です。
• MySQLは、MySQL, Inc.および米国Sun Microsystems, Inc.の米国およびその他の
国における登録商標または商標です。
• PostgreSQLは、PostgreSQLの米国およびその他の国における登録商標または商標で
す。
• Mongo, MongoDB及びMongoDB leaf logoはMongoDB Inc.の登録商標
です。