Ubuntu14.04とVirtualBoxを使用してBOSHからCloud Foundryの構築

<h1>前提環境</h1>
Ubuntu 14.04 64bit

Memory: 8G 以上推奨

CPU:4コア以上推奨
<h1>はじめに</h1>
<ol>
<li>Ubuntu14.04をインストールする</li>
<li>Git、Curlをインストール</li>
<li>VirtualBoxをインストール</li>
<li>Cloud FoundryのCLIをインストール</li>
<li>OS再起動</li>
</ol>

<h1>BOSHのインストール</h1>
<h2>Director動作要件</h2>
マシンに8GB以上のRAMと100GB以上の空きディスク容量
<h2>手順</h2>
<h2>BOSH CLIのインストール</h2>
http://bosh.io/docs/cli-v2-install/
<ol>
 	<li>Download the binary (this example is using Linux):</li>
        <pre>curl -Lo ./bosh https://s3.amazonaws.com/bosh-cli-artifacts/bosh-cli-3.0.1-linux-amd64</pre>
        <li>Make the bosh binary executable:</li>
        <pre>chmod +x ./bosh</pre>
        <li>Move the binary to your PATH:</li>
        <pre>sudo mv ./bosh /usr/local/bin/bosh</pre>
        <li>Verify that bosh -v shows the installed version and a Succeeded message:</li>
        <pre>$ bosh -v
        version 3.0.1-712bfd7-2018-03-13T23:26:42Z

        Succeeded
        </pre>
        <li>Ubuntu 14.04用の追加インストール</li>
        <pre>sudo -E apt-get install -y build-essential zlibc zlib1g-dev ruby ruby-dev openssl libxslt-dev libxml2-dev libssl-dev libreadline6 libreadline6-dev libyaml-dev libsqlite3-dev sqlite3
        </pre>
</ol>

<h2>ホストOS上のVirtualBox上に構築</h2>
http://bosh.io/docs/bosh-lite/

BOSH Lite v2は、VirtualBoxで動作するDirector VM（通常はローカル）です。 CLI v2を介して管理されます。内部的にCPIはコンテナを使用してVMをエミュレートします。

IaaSを構成するための時間とリソースを費やさずに一般的なBOSHの探索
リリース（BOSH自体を含む）の開発
リリースをローカルまたはCIでテストする

# VirtualBoxをゲストOS内にインストール
https://www.virtualbox.org/wiki/Downloads
から入手します。

既知の作業バージョン：
<pre>$ VBoxManage --version
5.1...
</pre>
*注意：VirtualBoxネットワークで問題が発生した場合は、問題202で示唆されているように、Oracle VM VirtualBox Extension Packをインストールしてください。
また、以前のバージョンでネットワーク接続のバグがあったため、VirtualBox 5.1+を使用していることを確認してください。*

<ol>
    <li>Director VMのインストール</li>
    <pre>$ git clone https://github.com/cloudfoundry/bosh-deployment ~/workspace/bosh-deployment
$ mkdir -p ~/deployments/vbox

$ cd ~/deployments/vbox
Below command will try automatically create/enable Host-only network 192.168.50.0/24 (details) and NAT network 'NatNetwork' with DHCP enabled (details).
    </pre>

<pre>$ bosh create-env ~/workspace/bosh-deployment/bosh.yml \
--state ./state.json \
-o ~/workspace/bosh-deployment/virtualbox/cpi.yml \
-o ~/workspace/bosh-deployment/virtualbox/outbound-network.yml \
-o ~/workspace/bosh-deployment/bosh-lite.yml \
-o ~/workspace/bosh-deployment/bosh-lite-runc.yml \
-o ~/workspace/bosh-deployment/uaa.yml \
-o ~/workspace/bosh-deployment/credhub.yml \
-o ~/workspace/bosh-deployment/jumpbox-user.yml \
-o ~/workspace/bosh-deployment/misc/proxy.yml -v http_proxy=${http_proxy} -v https_proxy=${https_proxy} -v no_proxy=${no_proxy} \
--vars-store ./creds.yml \
-v director_name=bosh-lite \
-v internal_ip=192.168.50.6 \
-v internal_gw=192.168.50.1 \
-v internal_cidr=192.168.50.0/24 \
-v outbound_network_name=NatNetwork
</pre>

    <li>最後に、入力する量を減らすためにbosh環境エイリアスといくつかの環境変数を作成しています。また、新しいシェルを作成する場合は、これらの変数を再作成する必要があります。</li>
<pre>sudo route add -net 10.244.0.0/16 gw 192.168.50.6</pre>
<pre>$ bosh alias-env vbox -e 192.168.50.6 --ca-cert &lt;(bosh int ./creds.yml --path /director_ssl/ca)
$ export BOSH_CLIENT=admin
$ export BOSH_CLIENT_SECRET=`bosh int ./creds.yml --path /admin_password`
</pre>
     <li>動作することを確認する</li>
<pre>$ bosh -e vbox env
Using environment '192.168.50.6' as '?'

Name: ...
User: admin

Succeeded
Optionally, set up a local route for bosh ssh commands or accessing VMs directly
</pre>

<pre>$ sudo route add -net 10.244.0.0/16 192.168.50.6 # Mac OS X
$ sudo ip route add 10.244.0.0/16 via 192.168.50.6 # Linux (using iproute2 suite)
$ sudo route add -net 10.244.0.0/16 gw 192.168.50.6 # Linux (using DEPRECATED route command)
$ route add 10.244.0.0/16 192.168.50.6 # Windows
</pre>
</ol>

<h3>参考</h3>
* Installing Cloud Foundry Bosh on VirtualBox.
https://www.youtube.com/watch?v=Kv0iKE2JaJ4

* BOSH Director構築時に、作ったVMがProxy設定を見るようにするもの
https://lists.cloudfoundry.org/g/cf-bosh/topic/6331946?p=Created,,,20,2,0,0::,,,0,0,0,6331946

<h1>Cloud Foundryのインストール</h1>
<h2>Cloud Foundryの構築</h2>
<pre>bosh -e 192.168.50.6 --ca-cert &lt;(bosh int ~/deployments/vbox/creds.yml --path /director_ssl/ca) alias-env vbox

export BOSH_CA_CERT=$(bosh int ~/deployments/vbox/creds.yml --path /director_ssl/ca)
export BOSH_CLIENT=admin
export BOSH_CLIENT_SECRET=$(bosh int ~/deployments/vbox/creds.yml --path /admin_password)
export BOSH_ENVIRONMENT=vbox
</pre>

<h2>Cloud Foundryのデプロイ</h2>
Cloud Foundryの導入にはcf-deploymentを使用します。リポジトリはまだ初期段階ですが、簡単な手順でDiegoを使用してCloud Foundryを簡単に導入することができます。 cf-releaseとdiego-releaseの後継となるようです。

最初にリポジトリを複製しています
<pre>git clone https://github.com/cloudfoundry/cf-deployment ~/workspace/cf-deployment
cd ~/workspace/cf-deployment
</pre>
bosh interpolateを使用して、stemcellのバージョンを抽出してアップロードすることができます
<pre>export STEMCELL_VERSION=$(bosh int ~/workspace/cf-deployment/cf-deployment.yml --path /stemcells/alias=default/version)
bosh -e vbox upload-stemcell https://bosh.io/d/stemcells/bosh-warden-boshlite-ubuntu-trusty-go_agent?v=$STEMCELL_VERSION
</pre>
より新しいクラウド設定モデルを使用しています。これにより、IaaS固有の設定を展開マニフェストから分離することができます。
<pre>bosh -e vbox update-cloud-config ~/workspace/cf-deployment/iaas-support/bosh-lite/cloud-config.yml
</pre>
最後のステップは、クラウドファウンドリリリースを作成して展開することです。これは、主にインターネット接続に応じて、時間がかかることがあります。
<pre>bosh -e vbox -d cf deploy ~/workspace/cf-deployment/cf-deployment.yml -o ~/workspace/cf-deployment/operations/bosh-lite.yml --vars-store ~/deployments/vbox/deployment-vars.yml -v system_domain=bosh-lite.com
</pre>
デプロイメントを高速化するには、次の操作ファイルを追加して、プリコンパイルされたリリースを使用できます。
（■今回は使用しません■）
<pre>-o ~/workspace/cf-deployment/operations/use-compiled-releases.yml
</pre>
何も失敗しなければ、Cloud Foundryを正常に導入しました！ Yey！
最後のステップは、ホストからCloud Foundry Environmentにアクセスできるようにローカルルートを作成することです。
<pre>sudo s route add -net 10.244.0.0/16 gw 192.168.50.6
</pre>
<h2>Cloud Foundryのクライアントのインストール</h2>
Cloud Foundryを操作するためのクライアント(CLI)をインストールします。
https://github.com/cloudfoundry/cli#downloads
よりダウンロードして取り込みます。
これで、以降で、cfコマンドが使用可能になります。
<h2>Cloud Foundryの設定</h2>
まず、クラウドファウンドリにログインする必要があります。
デフォルトのユーザ名はadminで、パスワードはdeployment-vars.ymlにあります。
これは前の手順でbosh deployによって生成されたものです。
次のコマンドを実行すると、ログインしてファイルからパスワードを読み取ります。
ログインするときのドメイン名も、bosh deploy時に構築したドメイン名になります。
<pre>cf login -a https://api.bosh-lite.com --skip-ssl-validation -u admin -p $(bosh interpolate ~/deployments/vbox/deployment-vars.yml --path /cf_admin_password)
</pre>
最後に、組織とスペースを作成する必要があります。
<pre>cf create-org cloudfoundry
cf target -o cloudfoundry
cf create-space development
cf target -o cloudfoundry -s development
</pre>
!{width:500px}cf-target.jpg!

最初のアプリを展開する準備が整いました

<h2>Cloud Foundryへのサンプルアプリのデプロイ</h2>

テストに使用できる非常に単純なPythonアプリケーションを作成しました。
cf push時に必要なPythonのバージョンが無い場合は、cf-helloworld内のファイルを更新します。
<pre>git clone https://github.com/vchrisb/cf-helloworld ~/workspace/cf-helloworld
cd ~/workspace/cf-helloworld
cf push
</pre>
これで、　http://cf-helloworld.bosh-lite.com　を介してローカルにアプリにアクセスできるようになります。

!{width:500px}cfサンプルアプリ動作確認.jpg!

Dockerサポートを試すには、最初にdockerサポートを有効にして、dockerイメージをプッシュする必要があります。
<pre>cf enable-feature-flag diego_docker
cf push test-app -o cloudfoundry/test-app
</pre>

<h2> Cloud Foundry環境のサスペンド</h2>
BOSH Director VMを再起動しないでください。
状態を保存できるようにするには、次のコマンドを使用してBOHSディレクターを一時停止してから再開することができます。
決して、VirtualBoxから直接操作はしないでください。（OS再インストールになります）
<pre>vboxmanage controlvm $(bosh int ~/deployments/vbox/state.json --path /current_vm_cid) savestate
vboxmanage startvm $(bosh int ~/deployments/vbox/state.json --path /current_vm_cid) --type headless
</pre>
<h2>Cloud Foundry環境の削除</h2>
bosh create-env をした時のコマンドをそのまま持ってきて、bosh delete-envにして実行します。