Skip to content

Instantly share code, notes, and snippets.

@nota-ja
Last active August 29, 2015 14:20
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nota-ja/7c79b80d34d457e85ebc to your computer and use it in GitHub Desktop.
Save nota-ja/7c79b80d34d457e85ebc to your computer and use it in GitHub Desktop.
Major Updates of Cloud Foundry in the Last (approx.) One Year (1/3)

ここ1年ほどの Cloud Foundry の更新 前編

【この記事は, 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) までについて記します。

◆ v164 (2014/03/27)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v164

▷ Gorouter の X-Vcap-Request-Id サポート

 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

◆ v165 (2014/04/02)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v165

▷ 40 件の pull request マージ

 どうやら pull request 対応週間だったようで,40 の p-r がマージされたようですが,詳細情報のリンク先にアクセスできなくなっているようなので,どんな p-r がマージされたのかは分かりませんでした

▷ gnatsd クラスター対応

 このリリースから,gnatsd がクラスター(但し単一ノード構成)でデプロイ可能になりました。

◆ v166 (2014/04/08)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v166

▷ Buildpack デプロイの DEA からの独立

 これまで DEA の一部としてデプロイされていた buildpack が,DEA から独立した形でデプロイされるようになりました。

▷ アプリの最大メモリーサイズの拡大(予告)

 この次以降のリリースで,アプリの最大メモリーサイズを 256MB から 1GB に変更するという予告があったのですが,おそらくその変更が入った v167 リリースがなんらかの問題ありということで削除されてしまったため,いつその変更が入ったのかはあまり明確ではありません。

 → Git のログを検索してみたところ, このコミット がそれに関連するものと思われるので,v168 で入ったと考えてよさそうです。

◆ v167

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v167

 リリースされたものの,問題が見つかってタグが削除されました。こうした例はこの後にも何度か見られます。頻繁なリリースの良い点でもあり,悪い点でもあると言えそうです。

◆ v168 (2014/04/14)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v168

▷ Collector の gnatsd サポート

 Collector で gnatsd がサポートされました。Collector は CF のコンポーネントのログを収集する仕組みですが,最近のリリースではこの機能は metron / NOAA という新しい仕組みに移行しつつあります。

▷ HTTPボディ/パッケージのサイズ拡大

 メモリー 1GB のアプリ向けに,HTTPボディのサイズやパッケージのサイズが拡大されました。おそらくこれが v166 のところで述べた「アプリの最大メモリーサイズの変更」に関連する更新と思われます。

◆ v169 (2014/04/22)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v169

▷ gnatsd クラスター化

 gnatsd がクラスター化され,非クラスター用の NATS コードが削除されました。これで CF のコンポーネントが全て冗長化されました。

 アプリのアップロード・サイズが 1.5GB に拡大されました。

▷ Java Buildpack 2.1

 Java Buildpack のバージョンが 2.1 になりました。
https://github.com/cloudfoundry/java-buildpack/releases/tag/v2.1

 Java Buildpack 2.1 には,以下のような更新が含まれています。

◆ v170 (2014/05/01)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v170

▷ Java Buildpack 2.1.2

 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 クラスター化

 gnatsd のクラスター化及び非クラスター用の NATS コードの削除が,前のリリースに引き続き行われています。とすると前のリリースではこの作業は完全に終わっていなかったのかもしれません。ただこの後はもう出てこないので,本リリースでこの作業は完了したと考えられます。

◆ v171 (2014/05/14)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v171

▷ クラスター化 gnatsd のデフォルト化

 前リリースで gnatsd のクラスター化は完了しましたが,まだデフォルトのデプロイは非クラスター版でした。このリリースでクラスター版 gnatsd がデフォルトになりました。

▷ Restage API endpoint の追加

 アプリを再アップロードせずに再ステージングする Cloud Controller (以下 "CC") の API が追加されました。これにより,ソースコードには変更がないが再ステージングが必要なケース(例:サービスや環境変数の追加/変更)での処理が効率的に行えるようになりました。

▷ Go-buildpack の追加

 Go 言語用 buildpack が追加されました。

◆ v172 (2014/05/21)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v172

 バグ修正やリファクタリングが主で,目立った機能追加/更新はありませんでした。

◆ v173 (2014/06/12)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v173

▷ Application Security Group 機能の完成

 このリリースの目玉は Application Security Group 機能の導入です。この機能により,CF 上のアプリ から 接続できる (= outbound の) IP アドレス/ポートを設定により絞ることができるようになりました。

▷ Python Buildpack のリリース編入

 Python Buildpack を CF の一部として構築時にデプロイできるようになりました。これまでも Python Buildpack は利用できましたが,このリリースから CF を構築したら Python buildpack が既にある状態にできるようになったということです。

▷ Ubuntu 14.04 stemcell 開発の開始

 v170 でも少し触れましたが,Ubuntu 14.04 対応の stemcell の開発がはじまりました。これは2015年4月の Ubuntu 10.04 のサポート終了を見据えてのことで,まだこの時点では 14.04 サポートは完成していません。

▷ CC API ドキュメントの整備

 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

◆ v174

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v174

 問題が見つかってタグが削除されました。

◆ v175 (2014/07/17)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v175

▷ PHP Buildpack の更改

 PHP Buildpack が新設計のものに切り替わりました。これにより,キャッシュが droplet に含まれなくなり,サイズも(hello world droplet を例にとると 1/6 以下に)削減されて,アプリのデプロイが60秒かからなくなりました。

▷ Application Security Group の正式リリース

 Application Security Group が正式にリリースされ,API や CF CLI から操作できるようになりました。

◆ v176 (2014/07/25)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v176

▷ UAA クライアントの必須化

 CF の deployment manifest に,UAA クライアントの設定が必須になりました。これは開発中の notification 機能からの要件によるものです。

▷ CC の HM9000 の bulk app state API 活用

 CC がアプリ状態の取得に HM9000 の bulk app state API を使うようになりました。これにより,特にアプリをたくさん持つ space の処理が効率化されます。

▷ アプリの特定インスタンスの削除

 /v2/apps/:guid/instances/:index という API endpoint が追加され,あるアプリの特定インデックスのインスタンスを削除できるようになりました。

▷ /v2/info endpoint への独自フィールドの追加

 CF 管理者が /v2/info endpoint に独自のフィールドを追加できるようになりました。

◆ v177 (2014/08/07)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v177

▷ Python, Ruby, Go の buildpack が v1.0.1 に

 Python, Ruby, Go の buildpack が v1.0.1 になりました。主な変更は offline buildpack の作成に共通 framework を使うようになった点です。また Ruby Buildpack では,環境変数 BUNDLE_GEMFILE を指定することで,アプリで使う Gemfile を指定できるようになりました。

◆ v178 (2014/08/12)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v178

 目立った更新はありませんでした。 Login server が v1.8.4 になったりしているのですが,これも特筆すべき更新は入ってないようだったので..。

◆ v179 (2014/08/18)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v179

▷ Space Quota 機能

 このリリースの目玉は,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 のアクセス・ログへの追加

 アクセス・ログに X-Forwarded-For が記録されるようになりました。これでアクセスログを元にアクセス元の解析を行うことが可能になりました。

▷ CC エラーメッセージの I18N サポート

 地味ですが CC のエラーメッセージに I18N サポートが入ったようです。

◆ v180 (2014/08/20)

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v180

 このリリースでは,開発中の機能の修正/更新が主で,目立った機能追加等はありませんでした。

◆ v181

URL: https://github.com/cloudfoundry-community/cf-docs-contrib/wiki/v181

 問題が見つかってタグが削除されました。

◆ 前編まとめ

 大きな feature の追加としては,

  • Application Security Group
  • Space Quota

の2つでしょうか。

 その他は,全般的な使い勝手や安定性の向上が中心となっている印象です。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment