【この記事は, Cloud Foundry 情報発信強化週間 の記事の一つです】
この記事では, https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/All-CF-Releases (※0) に基づいて,ここ1年くらい (※1) に Cloud Foundry (以下"CF") のソースコードに入った更新を簡単に (※2) まとめます。
※1 最初は2014年5月 (v170) 〜2015年4月 (v207) の1年間を扱おうと思っていたのですが,※0のページを見ると最古が 2014年3月27日 (v164) だったので,それなら大して変わらないと考え,最初からさらうことにしました。
※2 全てを扱うのは時間もないし大変なので,個人的に主要と判断したもののみを取り上げます。悪しからず。
この前編では,2014年3月27日の v164 から,2014年8月20日の v180 (正確には削除された v181) までについて記します。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v164
Gorouter が X-Vcap-Request-Id
をサポートしました。これは従来 Cloud Controller に実装されていた機能で,Cloud Controller へのHTTPリクエスト (即ちCFの操作要求) を識別するために使われていたのですが,Gorouter に実装されることで,CF上のアプリへのHTTPリクエストの識別にも使えるようになりました。
ちなみに,v207のCF上のアプリで試してみたところ,
- HTTPヘッダーとしては
X-Cf-Requestid
が使われており
$ curl -v rv.10.244.0.34.xip.io
* Rebuilt URL to: rv.10.244.0.34.xip.io/
* Hostname was NOT found in DNS cache
* Trying 10.244.0.34...
* Connected to rv.10.244.0.34.xip.io (10.244.0.34) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.37.1
> Host: rv.10.244.0.34.xip.io
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 16
< Content-Type: text/html;charset=utf-8
< Date: Mon, 04 May 2015 06:39:55 GMT
* Server WEBrick/1.3.1 (Ruby/2.0.0/2014-11-13) is not blacklisted
< Server: WEBrick/1.3.1 (Ruby/2.0.0/2014-11-13)
< X-Cf-Requestid: 97d66346-c0a5-46d5-58cb-d82939a96229
< X-Content-Type-Options: nosniff
< X-Frame-Options: SAMEORIGIN
< X-Xss-Protection: 1; mode=block
<
Ruby 2.0.0-p598
* Connection #0 to host rv.10.244.0.34.xip.io left intact
- Gorouter のログでは
vcap_request_id
が使われていました
2015-05-04T15:39:55.83+0900 [RTR/0] OUT rv.10.244.0.34.xip.io - [04/05/2015:06:39:55 +0000] "GET / HTTP/1.1" 200 16 "-" "curl/7.37.1" 10.0.2.15:50831 x_forwarded_for:"192.168.50.1, 10.0.2.15" vcap_request_id:3421d7a1-b604-4fde-6182-27378b97c261 response_time:0.063181234 app_id:7d03e5a8-c1b7-4012-9193-2400db8b262b
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v165
どうやら pull request 対応週間だったようで,40 の p-r がマージされたようですが,詳細情報のリンク先にアクセスできなくなっているようなので,どんな p-r がマージされたのかは分かりませんでした
このリリースから,gnatsd がクラスター(但し単一ノード構成)でデプロイ可能になりました。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v166
これまで DEA の一部としてデプロイされていた buildpack が,DEA から独立した形でデプロイされるようになりました。
この次以降のリリースで,アプリの最大メモリーサイズを 256MB から 1GB に変更するという予告があったのですが,おそらくその変更が入った v167 リリースがなんらかの問題ありということで削除されてしまったため,いつその変更が入ったのかはあまり明確ではありません。
→ Git のログを検索してみたところ, このコミット がそれに関連するものと思われるので,v168 で入ったと考えてよさそうです。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v167
リリースされたものの,問題が見つかってタグが削除されました。こうした例はこの後にも何度か見られます。頻繁なリリースの良い点でもあり,悪い点でもあると言えそうです。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v168
Collector で gnatsd がサポートされました。Collector は CF のコンポーネントのログを収集する仕組みですが,最近のリリースではこの機能は metron / NOAA という新しい仕組みに移行しつつあります。
メモリー 1GB のアプリ向けに,HTTPボディのサイズやパッケージのサイズが拡大されました。おそらくこれが v166 のところで述べた「アプリの最大メモリーサイズの変更」に関連する更新と思われます。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v169
gnatsd がクラスター化され,非クラスター用の NATS コードが削除されました。これで CF のコンポーネントが全て冗長化されました。
アプリのアップロード・サイズが 1.5GB に拡大されました。
Java Buildpack のバージョンが 2.1 になりました。
https://github.com/cloudfoundry/java-buildpack/releases/tag/v2.1
Java Buildpack 2.1 には,以下のような更新が含まれています。
- Offline buildpacks 従来インターネットから取ってきていた様々なリソースを buildpack 内に格納し,ダウンロードに要する時間を大幅に削減→ステージング時間を短縮
- Tomcat 向けのセッション共有 共有 session store として Redis を使ったセッション情報の共有 アプリが複数インスタンスある場合でもセッション維持を可能に
- Ratpack のサポート (Groovy) Ratopack については http://grimrose.bitbucket.org/blog/html/2014/12/06/g_advent_calendar_2014_ratpack_01.html を参照
- distZip スタイルのアプリケーション
distZip は Gradle で使われるアプリケーション配布形式(?)
私はあまりよく知らないので,詳しくはこの辺をご覧ください
- http://gradle.monochromeroad.com/docs/userguide/application_plugin.html
- http://qiita.com/opengl-8080/items/4c1aa85b4737bd362d9e#%E3%82%BD%E3%83%BC%E3%82%B9%E4%BB%A5%E5%A4%96%E3%81%AE%E4%BB%BB%E6%84%8F%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB%E5%90%AB%E3%82%81%E3%82%8B
- Oracle JRE のサポート CF Java buildpack は OpenJDK が前提だったのですが,Oracle JRE も追加されました
- AppDynamics 用のカスタム・リソースのサポート AppDynamics は New Relic の競合に当たるパフォーマンス測定サービス企業 申し訳ありませんがカスタム・リソースがどのようなものかはわかっていません/調べていません
- Amazon CloudFront cache 依存ライブラリーの取り込み
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v170
Java Buildpack が 2.1.2 になりました。 https://github.com/cloudfoundry/java-buildpack/releases/tag/v2.1.2
Java Buildpack 2.1.2 の主な更新は Ubuntu 14.04 (Trusty Tahr) のサポートです。但し,この時点では CF 上のアプリ実行環境の OS (rootfs) は Ubuntu 10.04 (Lucid Lynx) だったので,実効上の意味はなかったのではないかと思われます。もしかしたら先進的なユーザーが独自に Trusty rootfs を作っていた可能性はありますが。
gnatsd のクラスター化及び非クラスター用の NATS コードの削除が,前のリリースに引き続き行われています。とすると前のリリースではこの作業は完全に終わっていなかったのかもしれません。ただこの後はもう出てこないので,本リリースでこの作業は完了したと考えられます。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v171
前リリースで gnatsd のクラスター化は完了しましたが,まだデフォルトのデプロイは非クラスター版でした。このリリースでクラスター版 gnatsd がデフォルトになりました。
アプリを再アップロードせずに再ステージングする Cloud Controller (以下 "CC") の API が追加されました。これにより,ソースコードには変更がないが再ステージングが必要なケース(例:サービスや環境変数の追加/変更)での処理が効率的に行えるようになりました。
Go 言語用 buildpack が追加されました。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v172
バグ修正やリファクタリングが主で,目立った機能追加/更新はありませんでした。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v173
このリリースの目玉は Application Security Group 機能の導入です。この機能により,CF 上のアプリ から 接続できる (= outbound の) IP アドレス/ポートを設定により絞ることができるようになりました。
Python Buildpack を CF の一部として構築時にデプロイできるようになりました。これまでも Python Buildpack は利用できましたが,このリリースから CF を構築したら Python buildpack が既にある状態にできるようになったということです。
v170 でも少し触れましたが,Ubuntu 14.04 対応の stemcell の開発がはじまりました。これは2015年4月の Ubuntu 10.04 のサポート終了を見据えてのことで,まだこの時点では 14.04 サポートは完成していません。
CC API のドキュメント化が進みました。CC API は rspec でドキュメントを出力することができるようになっていましたが,v172 の段階では全 API 294 (※3) 件中ドキュメント化された API が 91 件(※4)で十分とは言えない状態だったと思います。v173 では,これが 288 (※5) 件中 113 (※6) 件とそこそこ向上しました。ちなみに v192 以降の API ドキュメントは ここ で見られます。
※3 https://gist.github.com/nota-ja/a9fbe604612d443f5bc9
※4 以下の方法でカウント
$ cd ~/repos/cloud_controller_ng
$ git checkout v172
$ git submodule sync --recursive; git submodule update --init --recursive
$ bundle install --path vendor/bundle
$ DB=sqlite bundle exec rspec spec/api/documentation --format RspecApiDocumentation::ApiFormatter
$ grep '</li>' doc/api/index.html | wc -l
91
※5 https://gist.github.com/nota-ja/868901f46d3715675b72
※6 以下の方法でカウント
$ cd ~/repos/cloud_controller_ng
$ git checkout v173
$ git submodule sync --recursive; git submodule update --init --recursive
$ bundle install --path vendor/bundle
$ DB=sqlite DB=sqlite bundle exec rake spec:api
$ grep '</li>' doc/api/index.html | wc -l
113
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v174
問題が見つかってタグが削除されました。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v175
PHP Buildpack が新設計のものに切り替わりました。これにより,キャッシュが droplet に含まれなくなり,サイズも(hello world droplet を例にとると 1/6 以下に)削減されて,アプリのデプロイが60秒かからなくなりました。
Application Security Group が正式にリリースされ,API や CF CLI から操作できるようになりました。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v176
CF の deployment manifest に,UAA クライアントの設定が必須になりました。これは開発中の notification 機能からの要件によるものです。
CC がアプリ状態の取得に HM9000 の bulk app state API を使うようになりました。これにより,特にアプリをたくさん持つ space の処理が効率化されます。
/v2/apps/:guid/instances/:index という API endpoint が追加され,あるアプリの特定インデックスのインスタンスを削除できるようになりました。
CF 管理者が /v2/info endpoint に独自のフィールドを追加できるようになりました。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v177
Python, Ruby, Go の buildpack が v1.0.1 になりました。主な変更は offline buildpack の作成に共通 framework を使うようになった点です。また Ruby Buildpack では,環境変数 BUNDLE_GEMFILE を指定することで,アプリで使う Gemfile を指定できるようになりました。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v178
目立った更新はありませんでした。 Login server が v1.8.4 になったりしているのですが,これも特筆すべき更新は入ってないようだったので..。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v179
このリリースの目玉は,Space に対して quota をかける機能の導入でした。これまで,Org に対して quota を設定することはできたのですが,この機能により,より細かい粒度で quota の制御が可能になりました。
v207 版の CF 環境で試してみたところ,以下のようになりました。
現状の org にかかっているデフォルトの quota です。
$ cf quotas
Getting quotas as demo...
OK
name memory limit instance memory limit routes service instances paid service plans
default 10G unlimited 1000 100 allowed
Space に quota を設定してみます。
コマンドのヘルプ。設定できる項目は [-i INSTANCE_MEMORY]
: 1インスタンスあたりのメモリー割り当て, [-m MEMORY]
: space で使えるトータルのメモリー量, [-r ROUTES]
: space で使えるURLの総数, [-s SERVICE_INSTANCES]
: space で使えるサービス・インスタンスの総数, [--allow-paid-service-plans]
: 有料サービスを使えるかどうか,の5つです。
$ cf create-space-quota
FAILED
Incorrect Usage.
NAME:
create-space-quota - Define a new space resource quota
USAGE:
cf create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [--allow-paid-service-plans]
OPTIONS:
-i Maximum amount of memory an application instance can have(e.g. 1024M, 1G, 10G). -1 represents an unlimited amount. (Default: unlimited)
-m Total amount of memory a space can have(e.g. 1024M, 1G, 10G)
-r Total number of routes
-s Total number of service instances
--allow-paid-service-plans Can provision instances of paid service plans (Default: disallowed)
demo-quota
という名前で space quota を作成。
$ cf create-space-quota demo-quota -i 384M -m 1G
Creating quota demo-quota for org demo as demo...
OK
nota@NotaBookPro:~/repos/My/cf-example-ruby-ver[2015-05-05T17:28:41]!2022$ cf space-quotas
Getting space quotas as demo...
OK
name memory limit instance memory limit routes service instances paid service plans
demo-quota 1G 384M 0 0 disallowed
routes と service instances の上限が 0
になってしまっているので,更新します。
$ cf update-space-quota demo-quota -r 100 -s 10
Updating space quota demo-quota as demo...
OK
nota@NotaBookPro:~/repos/My/cf-example-ruby-ver[2015-05-05T17:31:30]!2031$ cf space-quotas
Getting space quotas as demo...
OK
name memory limit instance memory limit routes service instances paid service plans
demo-quota 1G 384M 100 10 disallowed
アプリの1インスタンスあたりのメモリー割り当てを,quota を超える 512MB に変更してみます。
$ cf scale rv -m 512M
This will cause the app to restart. Are you sure you want to scale rv?> y
Scaling app rv in org demo / space demo as demo...
FAILED
Server error, status code: 400, error code: 310004, message: You have exceeded the instance memory limit for your space's quota.
Quota を超えているため失敗したというメッセージが返ってきました。
今度は space のメモリー総量を超えるまでインスタンス数を増やしてみます。
$ cf scale rv -i 5
Scaling app rv in org demo / space demo as demo...
FAILED
Server error, status code: 400, error code: 310003, message: You have exceeded your space's memory limit.
こちらも quota を超えているので正しく失敗しました。
アクセス・ログに X-Forwarded-For
が記録されるようになりました。これでアクセスログを元にアクセス元の解析を行うことが可能になりました。
地味ですが CC のエラーメッセージに I18N サポートが入ったようです。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v180
このリリースでは,開発中の機能の修正/更新が主で,目立った機能追加等はありませんでした。
URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v181
問題が見つかってタグが削除されました。
大きな feature の追加としては,
- Application Security Group
- Space Quota
の2つでしょうか。
その他は,全般的な使い勝手や安定性の向上が中心となっている印象です。