mac でローカル Cloud Foundry (PCF Dev) を動かしてみた 

## はじめに

3 年ほど前に Cloud Foundry ネタで社外イベントに登壇したのですが、ひょんなことから社内勉強会でリバイバル発表することになりました。さすがに 3 年前とは成熟度の面で差があると思い、最新情報をキャッチアップするために Cloud Foundry 環境構築に踏み切りました。

本格的に取り組むのであれば、BOSH を AWS あたりに展開すると思いますが、今回はあくまで「やってみた」ですので、PCF Dev を macbook pro (16GB) にインストールしました。実は当初、Surface Laptop (8GB) 上の Ubuntu on WSL でチャレンジしていたのですが、メモリ不足で起動せず、諦めた経緯があります。その顛末については「[Ubuntu on WSL で Cloud Foundry を動かそうとしてみた](https://qiita.com/syamamotorhead/items/c9871a62ffe88071897c)」にまとめています。

一筋縄ではいかなかったのですが、最終的にはなんとか mac でローカル Cloud Foundry を動かせましたので、ご紹介させていただきます。

### 実行環境

- macOS Catalina 10.15.6
- MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)

## Cloud Foundry CLI のインストール

以下、Cloud Foundry 公式改め VMware Tanzu 公式にアクセスします。基本的にこちらの手順に従って進めていきます。
https://docs.pivotal.io/pcf-dev/install-osx.html

Prerequisites 手順 1 の [Download](https://cli.run.pivotal.io/stable?release=macosx64&source=github) リンクをクリックして、パッケージインストーラをダウンロードします。[Cloud Foundry CLIの公式 github](https://github.com/cloudfoundry/cli) には、執筆時点で最新版の v7.0.2 が公開されていますが、今回は v6.51.0 を採用します。

- cf-cli-installer_6.51.0_osx.pkg

パッケージインストーラを実行すると、以下のような警告メッセージが表示される場合があります。
![Screen Shot 2020-08-15 at 11.40.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/d5b77178-9894-0fe6-8e4e-819f8be2607e.png)

警告メッセージが表示された場合は、System Preferences... から Security & Privacy を開き、`App Store and identified developers` を選択し、`Open Anyway` をクリックします。
![Screen Shot 2020-08-15 at 11.42.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/2caed47e-fdda-f82d-66b8-08039654c4d4.png)

再度、パッケージインストーラを起動し、今度は　`Open` をクリックしてください。あとは、ポチポチでインストールが完了します。
![Screen Shot 2020-08-15 at 11.52.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/8aa263a2-1d7b-1748-0392-ed28e5c9de5d.png)

インストールが終わったら、先ほどの Security & Privacy の設定を `App Store` に戻しておくことをおすすめします。

CF CLI のバージョンを確認してみました。確かに V6 がインストールされたようです。

```zsh
% cf version
cf バージョン 6.51.0+2acd15650.2020-04-07

```

ちなみに パッケージインストーラではなく brew でインストールしたい方は、以下となります。

```ｚｓｈ
brew install cloudfoundry/tap/cf-cli
```

## Cloud Foundry (PCF) Dev の入手

Install PCF Dev 手順 1 の [Pivotal Network](https://network.pivotal.io/) をクリックし、ページ下の方の ``PCF Dev`` タイルをクリックするか、以下の URL に直接アクセスします。
https://network.pivotal.io/products/pcfdev

現時点の最新バージョンは v1.3.1 で、linux 向けのファイルは以下の 2 ファイルのようです。合計 24.5 GB、結構ゴツいですね、、、。実は、v1.3.1 では何度トライしても起動できなかったため、少しサイズの小さい v1.2.0 を選択しました。右の Release Details に　*This release is compatible with CF Dev plugin version v0.0.15.* とあることを覚えておきます。

- pcfdev-v1.2.0-darwin.tgz (19.1 GB, v1.2.0)

![screenshot-network.pivotal.io-2020.08.15-12_08_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/f138f9d3-0120-18ed-8ed5-d794a807fe70.png)

Pivotal Network へのサインアップなどの詳細手順は「[Ubuntu on WSL で Cloud Foundry を動かそうとしてみた](https://qiita.com/syamamotorhead/items/c9871a62ffe88071897c)」を参考にしてください。なお、v1.3.1 と違い、v1.2.0 は 1 ファイルのみですので、ファイルをコンカチする手順は不要です。

## CF Dev プラグインのインストール

Install PCF Dev 手順 2 に従い、以下コマンドを実行すると、**先ほど確認した v0.0.15 ではなく v0.0.18 がインストールされてしまいます。**果たして、CF Dev プラグインは下位互換性を保証してくれるのでしょうか、、、。

```zsh:最新版である&nbsp;v0.0.18&nbsp;がインストールされてしまう
cf install-plugin cfdev
```
もしかしたら v0.0.18 でも動作するのかも知れませんが（＝未確認です）、不安が先行したので v0.0.15 をインストールすることにしました。CF Dev プラグインの v0.0.15 にアクセスし、Download セクションの [OSX](https://d3p1cc0zb2wjno.cloudfront.net/cfdev/cfdev-v0.0.15-rc.54-darwin) をクリックします。
https://github.com/cloudfoundry-incubator/cfdev/releases/tag/v0.0.15

ダウンロードされたファイルを ``-f`` オプションで指定し、CF Dev プラグインをインストールします。

```zsh
% cf install-plugin -f Downloads/cfdev-v0.0.15-rc.54-darwin 
注意: プラグインは必ずしも信頼できない作成者によって書かれたバイナリーです。
プラグインのインストールと使用は自らの責任で行ってください。
プラグイン cfdev をインストールしています...
OK

プラグイン cfdev 0.0.15 は正常にインストールされました。
```

CF Dev プラグインのバージョンを確認してみました。確かに v0.0.15 がインストールされたようです。

```ｚｓｈ
% cf dev version
CLI: 0.0.15
BUILD: 54 (35368e4)

pas: 2.4.4
p.mysql: 2.5.3-build.7
p.redis: 2.0.1
p.rabbitmq: 1.15.5
p.spring-cloud-services: 2.0.7
```

## Cloud Foundry の起動

プラグインをインストールしたので cf dev コマンドが利用できるようになったはずです。早速、Cloud Foundry を起動してみましょう。v1.3.1 同様、起動できませんでした、、、。

```zsh:何度起動しても途中でエラーが発生してしまうデフォルト設定
cf dev start -f Downloads/pcfdev-v1.2.0-darwin.tgz
```

ここで「[Ubuntu on WSL で Cloud Foundry を動かそうとしてみた](https://qiita.com/syamamotorhead/items/c9871a62ffe88071897c)」に記載した PowerShell のエラーを思い出しました。単にメモリが足りないのではないかと。

[公式ドキュメント](https://docs.pivotal.io/pcf-dev/configuring.html) をよく読んでみると、cf dev start コマンドはデフォルトでは CPU 4 コア、メモリ 8GB で動作するような記述がみつかりました。さらに、上記 cf dev start コマンドの実行中のメモリ使用状況を確認してみると、hyperkit プロセスが 15GB 以上のメモリを専有し、大量のスワップ I/O が発生しているではありませんか！

cf dev start コマンドにオプションを与えることにより、仮想化で利用する CPU コア数とメモリ容量を指定できるようです。物理メモリ 16 GB しかないマシンで 15GB 専有というのは異常事態ですので、推奨の 8GB よりも小さいサイズでの起動を試みることにしました。パフォーマンスは犠牲になりますが、起動しないよりはマシです。

```zsh:やっと起動した設定（メモリ&nbsp;6GB&nbsp;を指定）
cf dev start -f pcfdev-v1.2.0-darwin.tgz -c 4 -m 6144 
```
出力結果は以下の通りです。*WARNING: It is recommended that you run PCF Dev with at least 8192 MB of RAM.*という警告メッセージが表示されています。4GB（``-m 4096``）でも試してみましたが、メモリ不足でデプロイ途中でエラーが発生してしまいました。わたしの環境では、6GB というのが PCF Dev が起動し、スワップが発生しないギリギリのラインのようです。

```
% cf dev start -f pcfdev-v1.2.0-darwin.tgz -c 4 -m 6144          
Downloading Network Helper...
Progress: |====================>| 100.0%
Installing cfdevd network helper (requires administrator privileges)...
Password:
Setting up IP aliases for the BOSH Director & CF Router (requires administrator privileges)
Downloading Resources...
Progress: |====================>| 100.0%
Setting State...
WARNING: It is recommended that you run PCF Dev with at least 8192 MB of RAM.
Creating the VM...
Starting VPNKit...
Waiting for the VM...
Deploying the BOSH Director...
Deploying PAS...
  Done (18m18s)
Deploying Apps-Manager...
  Done (2m19s)
 	
 	 ██████╗  ██████╗███████╗██████╗ ███████╗██╗   ██╗
 	 ██╔══██╗██╔════╝██╔════╝██╔══██╗██╔════╝██║   ██║
 	 ██████╔╝██║     █████╗  ██║  ██║█████╗  ██║   ██║
 	 ██╔═══╝ ██║     ██╔══╝  ██║  ██║██╔══╝  ╚██╗ ██╔╝
 	 ██║     ╚██████╗██║     ██████╔╝███████╗ ╚████╔╝
 	 ╚═╝      ╚═════╝╚═╝     ╚═════╝ ╚══════╝  ╚═══╝
 	             is now running!
 	
 	To begin using PCF Dev, please run:
 	    cf login -a https://api.dev.cfdev.sh --skip-ssl-validation
 	
 	Admin user => Email: admin / Password: admin
 	Regular user => Email: user / Password: pass
 	
 	To access Apps Manager, navigate here: https://apps.dev.cfdev.sh
 	
 	To deploy a particular service, please run:
 	    cf dev deploy-service <service-name> [Available services: mysql,redis,rabbitmq,scs]
```
やっと、この起動画面を見ることができました。もし、物理メモリを 32GB 搭載していれば、なんの問題もなくスムーズにインストールされるんだろうなと思うと、なんだか悲しくなってきました。

## Cloud Foundry にアクセス

推奨メモリ以下で動作しているローカル Cloud Foundry にログインしてみます。

```zsh
cf login -a https://api.dev.cfdev.sh --skip-ssl-validation
```

先ほどの起動画面に表示されている通り、Email：``admin``, パスワード：``admin`` でログインします。組織は ``1. cfdev-org`` を選択しました。無事にログインできたようです。

```
% cf login -a https://api.dev.cfdev.sh --skip-ssl-validation
API エンドポイント: https://api.dev.cfdev.sh

Your CF API version (2.125.0) is no longer supported. Upgrade to a newer version of the API (minimum version 2.128.0). Please refer to https://github.com/cloudfoundry/cli/wiki/Versioning-Policy#cf-cli-minimum-supported-version

Email: admin

パスワード: 
認証中です...
OK

Select an org:
1. cfdev-org
2. system

組織 (enter to skip): 1
Targeted org cfdev-org

Targeted space cfdev-space



API エンドポイント:   https://api.dev.cfdev.sh (API version: 3.60.0)
ユーザー:             admin
組織:                 cfdev-org
スペース:             cfdev-space
```

続いて、Apps Manager にアクセスしてみます。こちらも先ほどと同様に、Email：``admin``, パスワード：``admin`` でログインします。
https://apps.dev.cfdev.sh
![screenshot-login.dev.cfdev.sh-2020.08.15-13_48_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/7fb755fa-5e1f-b660-4e22-e5427c475060.png)

こちらも無事にアクセスできました。
![screenshot-apps.dev.cfdev.sh-2020.08.15-13_50_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319241/361f1b6f-2f17-cfbc-8524-1094209e222f.png)

ここから先の ``cf push`` は純粋な Cloud Foundry の世界なので、「mac でローカル Cloud Foundry (PCF Dev) を動かしてみた 」としては、ここまでとなります。

## さいごに

3 年前、SAP Cloud Platform の Cloud Foundry エディションによるマルチクラウド対応が発表されたことにより、個人的な Cloud Foundry への期待感は大いに高まっていました。その後、Kubernetes の大躍進や商用 Cloud Foundry の雄であった Pivotal の VMware による巨額買収など、色々なことがあって Cloud Foundry とは少し距離を置いていました。

今回、久しぶりに Cloud Foundry に再会し、（Surface Laptop での起動は断念したものの）「やっぱ Cloud Foundry いいな」と改めて強く感じました。3 年前の「スゲーいいのに、なんで流行らないんだろ？」という想いは、いまも続いています。こうした「縁の下の力持ち」プラットフォームは、より開発者に近い IDE の Extension などで隠蔽されてしまい、あまり意識しなくてもいい方向に進んでいくのが正常進化なのかも知れませんが、シェルから ``cf push`` したいのが開発者というものです。

これからも Cloud Foundry の行く末を見守っていきたいと思います。

### 参考リンク

https://qiita.com/Esfahan/items/30fd720d37f645028c7d
https://docs.pivotal.io/pcf-dev/install-osx.html
https://github.com/cloudfoundry/cli
https://github.com/cloudfoundry-incubator/cfdev/releases/tag/v0.0.15