---
title: Cloud Foundry Container Runtime(a.k.a Kubo / Kubernetes on BOSH) 0.11.0をBOSH-Liteにデプロイ
tags: ["Kubo", "BOSH", "Kubernetes", "BOSH-Lite", "CFCR"]
categories: ["Dev", "CaaS", "Kubernetes", "CFCR"]
date: 2018-01-06T14:20:53Z
updated: 2018-01-07T02:12:14Z
---
**目次**
### Cloud Foundry Container Runtimeとは
[Cloud Foundry Container Runtime](https://docs-cfcr.cfapps.io/)(以降、CFCR)は、KubernetesのBOSH Releaseです。[BOSH](https://bosh.io)でKubernetesクラスタを管理できるようになります。
かつてはKuboと呼ばれていましたが、リブランディングにより改名されました。
[Certified Kubernetes Conformance Program](https://www.cncf.io/announcement/2017/11/13/cloud-native-computing-foundation-launches-certified-kubernetes-program-32-conformant-distributions-platforms/)の一つです。
BOSHを使うことで、Kubernetesクラスタのデプロイを容易になるだけではなく、クラスタの自動復旧、ローリングアップデートやセキュリティパッチ当てなども運用負荷も軽減されます。
> CFCRはいわゆる"PaaSのCloud Foundry"とは別物で、BOSHが共通基盤となっているという意味で"Cloud Foundry"という冠が付いているように見えます。
> "PaaSのCloud Foundry"はCFAR(Cloud Foundry Application Runtime)という名前になりました。
### CFCR on BOSH-Lite
CFCR自体は執筆時点では
* GCP
* vSphere
* AWS
* OpenStack
しかサポートしていませんが、BOSH Releaseは基本的にはIaaS非依存なので、BOSH Liteにもデプロイは可能です。ただし、当然Cloud Providerのサポートはありません。
CFCRをBOSH-Lite on VirtualBoxにデプロイできることで、気軽に開発環境におけるKubernetesを管理できるようになることがメリットです。
CFCRは基本的にはGKEにバージョンを2週間以内で追従することを目指しています(ただし、メンテナンスバージョンが0のものは除く)。
例えば、本番環境ではGKEやCFCR on vSphere/OpenStackあるいはCFCRの商用版である[PKS (Pivotal Container Service)](https://pivotal.io/platform/pivotal-container-service)を利用する場合に、
検証環境あるいは開発環境としてそのへんのUbuntuマシン上にCFCR on BOSH-Liteにセットアップできるとリソース消費の観点でお得です。
私の場合、このブログは本番環境としてGKEで動していますが、検証は自宅サーバーのUbuntu上のVirtualBoxにセットアップしたBOSH-LiteにデプロイしたCFCRを使用しています。
GitHubの`develop`ブランチがCFCR on BOSH-Liteにデプロイされ、`master`ブランチがGKEにデプロイされています。

Minikubeと比べるとバージョンアップの度にreinstallする必要がないのが便利です。
> ただし、CFCRも1.0になるまでは非互換なアップデートが含まれる可能性があります。またMinikubeに比べて、デプロイ対象イメージをDocker Registryにpushしないといけない点がデメリットです。(頑張れば直接Worker VM上のDockerに直接つなげれられると思いますが...)
### CFCRのデプロイ
CFCRのデプロイ方法は次の2パターンがあります。
* 用意されたスクリプトを使ってBOSHから順番にインストールしていくCFCR独自の方法
* [`cfcr.yml`](https://github.com/cloudfoundry-incubator/kubo-deployment/blob/master/manifests/cfcr.yml)と[operation files](https://github.com/cloudfoundry-incubator/kubo-deployment/tree/master/manifests/ops-files)を使って既存のBOSHに`bosh deploy`でデプロイしていく普通のBOSHの方法
CFCRとしては前者をオフィシャルな方法として提供しており、[ドキュメント](https://docs-cfcr.cfapps.io/installing/)に書かれているのもこの方法です。
前者ではBOSH Liteへのデプロイ方法は提供されていません。
後者はBOSH界のLegend、[Dr. Nic](https://twitter.com/drnic)の[Pull Request](https://github.com/cloudfoundry-incubator/kubo-deployment/pull/237)により導入されました。BOSHユーザーには馴染みのあるデプロイ方法です。
公式ドキュメントとは別に[こちら](https://github.com/cloudfoundry-incubator/kubo-deployment/blob/master/manifests/README.md)にインストール方法が記載されています。
こちらもBOSH-Liteはサポートしていないのですが、試したところ一部制約はありますが利用可能でした。
#### 事前準備
次のソフトウェアのインストールが必要です。
* VirtualBox ... https://www.virtualbox.org/wiki/Downloads
* BOSH CLI ... https://bosh.io/docs/cli-v2.html#install
* CredHub CLI ... https://github.com/cloudfoundry-incubator/credhub-cli#installing-the-cli
* Kubernetes CLI ... https://kubernetes.io/docs/tasks/tools/install-kubectl/
#### BOSH-Liteのセットアップ
CFCRはBOSH Director + UAA + CredHub構成を必須としています。
セットアップ方法は、次の記事
* https://blog.ik.am/entries/415 (BOSH Director単体のデプロイ)
* https://blog.ik.am/entries/428 (BOSH Director + UAAのデプロイ)
* https://blog.ik.am/entries/429 (BOSH Director + UAA + CredHubのデプロイ)
と基本的に同じですが、一応簡単に再掲します。
ちなみに、CFCR 0.11.0を使う場合は、StemcellのバージョンをBOSH側とCFCR側で合わせないとflanneldがエラーになりました。
記事執筆時点ではbosh-deploymentは[`ca97795d4e12dc423247b4add70dbc79bc77b1af`](https://github.com/cloudfoundry/bosh-deployment/tree/ca97795d4e12dc423247b4add70dbc79bc77b1af)を使いました。
この時点でのStemcellは3468.13が前提(compiled-releaseで使われているバージョン)となっていますので、CFCRでも3468.13を使うようにします。
```
mkdir ~/bosh-manifests
cd ~/bosh-manifests
git submodule add git@github.com:cloudfoundry/bosh-deployment.git
cd bosh-deployment
git checkout ca97795d4e12dc423247b4add70dbc79bc77b1af
cd ..
```
次に、BOSH Director VMに割り当てるCPUコア数、メモリサイズを大きくするためのops-fileを`ops-files/director-size-lite.yml`に作成します。このサイズを大きくすれば快適なKubernetes環境ができます。
次の例は私の環境(6cpu、28GBメモリ)です。自分の環境に合わせて変更してください。デフォルトは2cpu、4GBメモリで、`bosh-deployment/virtualbox/cpi.yml`に設定されています。
``` yaml
mkdir ~/bosh-manifests/ops-files
cat < ~/bosh-manifests/ops-files/director-size-lite.yml
- type: replace
path: /resource_pools/name=vms/cloud_properties/cpus
value: 6
- type: replace
path: /resource_pools/name=vms/cloud_properties/memory
value: 28_674
EOF
```
あとは`bosh create-env`でBOSH Director VMを立ち上げればセットアップ環境です。
```
cd ~/bosh-manifests
bosh create-env bosh-deployment/bosh.yml \
-o bosh-deployment/virtualbox/cpi.yml \
-o bosh-deployment/virtualbox/outbound-network.yml \
-o bosh-deployment/bosh-lite.yml \
-o bosh-deployment/bosh-lite-runc.yml \
-o bosh-deployment/uaa.yml \
-o bosh-deployment/credhub.yml \
-o bosh-deployment/jumpbox-user.yml \
-o ops-files/director-size-lite.yml \
--vars-store bosh-lite-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 \
--state bosh-lite-state.json
```
BOSH Directorが立ち上がったら、次の環境変数を設定します。
```
export BOSH_ENVIRONMENT=192.168.50.6
export BOSH_CLIENT=admin
export BOSH_CLIENT_SECRET=`bosh int ~/bosh-manifests/bosh-lite-creds.yml --path /admin_password`
export BOSH_CA_CERT=`bosh int ~/bosh-manifests/bosh-lite-creds.yml --path /director_ssl/ca`
```
これで`bosh login`できることを確認してください。
```
$ bosh login
Successfully authenticated with UAA
Succeeded
```
また、`bosh env`でVersionが264.5.0になっていることを確認してください。
```
$ bosh env
Using environment '192.168.50.6' as client 'admin'
Name bosh-lite
UUID 7c35f11d-c3f8-4f22-8619-b92d50f9cc23
Version 264.5.0 (00000000)
CPI warden_cpi
Features compiled_package_cache: disabled
config_server: enabled
dns: disabled
snapshots: disabled
User admin
Succeeded
```
#### Cloud Configの設定
`cfcr.yml`はデフォルトで[bosh-bootloader](https://github.com/cloudfoundry/bosh-bootloader)あるいは[cf-deployment](https://github.com/cloudfoundry/cf-deployment)のCloud Configで動くように作られているので、
cf-deploymentで用意されているBOSH Lite用のCloud Configを使用します。
```
bosh update-cloud-config <(curl -L https://github.com/cloudfoundry/cf-deployment/raw/master/iaas-support/bosh-lite/cloud-config.yml)
# 検証したファイルは https://github.com/cloudfoundry/cf-deployment/raw/488e24dd8a2551e3a9e8695147c748e1e9d7d951/iaas-support/bosh-lite/cloud-config.yml です。
```
#### Stemcellのアップロード
BOSHでプロビジョニングされるVM(BOSH Liteの場合はコンテナ)のベースとなるイメージであるStemcellをアップロードします。
CFCRの場合はMasterとWorkerがStemcellから作られます。
前述の通り、v0.11.0をBOSH Liteで動かすにはBOSH VMを作成する際に使ったStemcellと同じバージョンにしないとflanneldのKernel Moduleロードの関係でエラーになりました。
今回は3468.13を使用します。BOSH LiteがどのバージョンのStemcellを使っているかは[こちら](https://github.com/cloudfoundry/bosh-deployment/blob/ca97795d4e12dc423247b4add70dbc79bc77b1af/virtualbox/cpi.yml#L10-L14)で確認できます。
```
bosh upload-stemcell https://bosh.io/d/stemcells/bosh-warden-boshlite-ubuntu-trusty-go_agent?v=3468.13
```
#### CFCRのデプロイ
いよいよCFCR(まだ名前は[kubo-release](https://github.com/cloudfoundry-incubator/kubo-release))をデプロイします。
マニフェストは[kubo-deployment](https://github.com/cloudfoundry-incubator/kubo-deployment)で管理されています。
この記事の内容はv0.11.0でしか動かないので、`v0.11.0`タグに切り替えます。
```
cd ~/bosh-manifests
git submodule add git@github.com:cloudfoundry-incubator/kubo-deployment.git
cd kubo-deployment
git checkout v0.11.0
cd ..
```
`kubo-deployment/manifests/cfcr.yml`がメインなのですが、BOSH Liteでv0.11.0を動かすために次の5つのops-fileを作成します。
1. Stemcellのバージョンを3468.13に固定するops-file (デフォルトで`latest`が指定されているが、cfcr以外で使うstemcellと衝突しないように明示する)
1. `kubo-release`のバージョンを0.11.0に固定するops-file
1. masterにStatic IPを指定するためのops-file
1. workerにStatic IPを指定するためのops-file (Serviceで`type: LoadBalancer`は使用できないので、`type: NodePort`を便利に使うためworkerのIPを固定する)
1. workerのインスタンス数(デフォルトで3)を1に減らすops-file (BOSH Liteは1 VMで動くのでworkerを複数台にする意味があまりない)
> CFCR v0.11.0はControllerとEtcdを1つのMasterノードに同居させます。またMasterのMulti-AZには対応していません。
まとめたファイルを作ってもいいですが、用途別に作って取捨選択できるようにするのがops-fileを作る上で良い作法です。
"Stemcellのバージョンを3468.13に固定するops-file"は次の通り。以下、コピペでファイル作成できます。
``` yaml
cat < ~/bosh-manifests/ops-files/use-specific-stemcell.yml
- type: replace
path: /stemcells/0/version
value: ((stemcell_version))
EOF
```
"`kubo-release`のバージョンを0.11.0に固定するops-file"は次の通り。
``` yaml
cat < ~/bosh-manifests/ops-files/kubernetes-kubo-0.11.0.yml
- type: replace
path: /releases/name=kubo
value:
name: kubo
url: https://bosh.io/d/github.com/cloudfoundry-incubator/kubo-release?v=0.11.0
version: 0.11.0
sha1: 823ac7fb7b8fa8bc7d10b8dc0f4b052890ae9f59
EOF
```
"masterにStatic IPを指定するためのops-file"は次の通り。
``` yaml
cat < ~/bosh-manifests/ops-files/kubernetes-master-static-ips.yml
- type: replace
path: /instance_groups/name=master/networks/0/static_ips?
value: [((kubernetes_master_host))]
- type: replace
path: /variables/name=tls-kubernetes/options/alternative_names/-
value: ((kubernetes_master_host))
EOF
```
"workerにStatic IPを指定するためのops-file"は次の通り。
``` yaml
cat < ~/bosh-manifests/ops-files/kubernetes-worker-static-ips.yml
- type: replace
path: /instance_groups/name=worker/networks/0/static_ips?
value: ((kubernetes_worker_hosts))
EOF
```
"workerのインスタンス数を1に減らすops-file"は次の通り。
``` yaml
cat < ~/bosh-manifests/ops-files/kubernetes-single-worker.yml
- type: replace
path: /instance_groups/name=worker/instances
value: 1
EOF
```
masterとworkerのStatic IPはCloud Configに設定した[`static`のレンジ](https://github.com/cloudfoundry/cf-deployment/blob/488e24dd8a2551e3a9e8695147c748e1e9d7d951/iaas-support/bosh-lite/cloud-config.yml#L30-L34)の中から空いているIPを選択してください。
```
cd ~/bosh-manifests
bosh deploy -d cfcr kubo-deployment/manifests/cfcr.yml \
-o ops-files/use-specific-stemcell.yml \
-o ops-files/kubernetes-kubo-0.11.0.yml \
-o ops-files/kubernetes-master-static-ips.yml \
-o ops-files/kubernetes-worker-static-ips.yml \
-o ops-files/kubernetes-single-worker.yml \
-v stemcell_version="3468.13" \
-v kubernetes_master_host=10.244.1.92 \
-v kubernetes_worker_hosts='["10.244.1.93"]' \
--no-redact
```
BOSH Releaseのダウンロードが完了すれば補間されたマニフェストファイルが表示され、`Continue? [yN]:`と聞かれるので`y`を入力してください。
`bosh deploy`が始まるとkuberntesやetcd、dockerなどKubernetesに必要なコンポーネントのコンパイルが始まります。
コンパイルが終わると、VM(BOSH-Liteの場合はコンテナ)が立ち上がり、Stemcellの上にコンパイルしたコンポーネントを乗せ、プロセスを起動させます。
次のようなログが出力されればデプロイ成功です。
```
Task 6
Task 6 | 13:17:18 | Preparing deployment: Preparing deployment (00:00:07)
Task 6 | 13:17:27 | Preparing package compilation: Finding packages to compile (00:00:00)
Task 6 | 13:17:27 | Compiling packages: socat/5737907822eb2c5ab7aa509d699acc566f349b7e86d8a8d176037b90d3427dbe
Task 6 | 13:17:27 | Compiling packages: ctop/e5f579167182e9a1587c2346f4e84bad2c445c2e
Task 6 | 13:17:27 | Compiling packages: golang-1.8-linux/1509998fbf5c66cb8fc361a479beafb41ef8cc14
Task 6 | 13:17:27 | Compiling packages: docker/238a6e226d78accc4ca870d3db43e4bfecf4f213
Task 6 | 13:17:27 | Compiling packages: bosh-helpers/a616966453683545eb0e28d88da5a951f5f110ae
Task 6 | 13:17:27 | Compiling packages: govc/6346e96cef8082e05e975b0b7c8b4c2a6d62cb8756b24fce2590909a28e96d34
Task 6 | 13:18:17 | Compiling packages: bosh-helpers/a616966453683545eb0e28d88da5a951f5f110ae (00:00:50)
Task 6 | 13:18:17 | Compiling packages: golang/2206cd4937e897c2a6639f93db9683a529b73e5c
Task 6 | 13:18:23 | Compiling packages: ctop/e5f579167182e9a1587c2346f4e84bad2c445c2e (00:00:56)
Task 6 | 13:18:23 | Compiling packages: etcd/4206d555a094bc1f775fe5eedbb146c1a0de0a3e
Task 6 | 13:18:24 | Compiling packages: govc/6346e96cef8082e05e975b0b7c8b4c2a6d62cb8756b24fce2590909a28e96d34 (00:00:57)
Task 6 | 13:18:24 | Compiling packages: etcd-common/0f365b3a98184c2a6537efd51f67e8d5e9d2c486 (00:00:01)
Task 6 | 13:18:25 | Compiling packages: jq/55d30ecb3391824ac6730632fbd1e101e3e967ff7aee3166b5163f47c2cde074 (00:00:03)
Task 6 | 13:18:28 | Compiling packages: kubernetes/43cb587e6cf7665ff51f7aad84a4486c27ae7e15890d7cc1163c36a85b8b967e
Task 6 | 13:18:32 | Compiling packages: etcd/4206d555a094bc1f775fe5eedbb146c1a0de0a3e (00:00:09)
Task 6 | 13:18:32 | Compiling packages: cni/5284a9c9bbd9f069d015a2cef88f61e352fe8a8eb0cd07000d84d983b4dfc730 (00:00:15)
Task 6 | 13:18:47 | Compiling packages: flanneld/24ad5204e0ccb6f6a49d76b4c0b839d0a3518c20096e30dc864e637e75070b9f
Task 6 | 13:18:52 | Compiling packages: docker/238a6e226d78accc4ca870d3db43e4bfecf4f213 (00:01:25)
Task 6 | 13:18:52 | Compiling packages: etcdctl/4e7dc7e0ad2d3a324a9d5544ca294bc72939391a3304b55385b768fb303a01dc
Task 6 | 13:18:52 | Compiling packages: flanneld/24ad5204e0ccb6f6a49d76b4c0b839d0a3518c20096e30dc864e637e75070b9f (00:00:05)
Task 6 | 13:18:52 | Compiling packages: pid_utils/a2a905d267548c461ccf91937963ff7d26356f8f2edd928490ba529d0cc94aa4 (00:00:02)
Task 6 | 13:18:55 | Compiling packages: etcdctl/4e7dc7e0ad2d3a324a9d5544ca294bc72939391a3304b55385b768fb303a01dc (00:00:03)
Task 6 | 13:19:48 | Compiling packages: socat/5737907822eb2c5ab7aa509d699acc566f349b7e86d8a8d176037b90d3427dbe (00:02:21)
Task 6 | 13:19:49 | Compiling packages: golang-1.8-linux/1509998fbf5c66cb8fc361a479beafb41ef8cc14 (00:02:22)
Task 6 | 13:19:49 | Compiling packages: bosh-dns/4a31fa2f1e36764fca50862fba944d2b546aa33d
Task 6 | 13:20:02 | Compiling packages: golang/2206cd4937e897c2a6639f93db9683a529b73e5c (00:01:45)
Task 6 | 13:20:02 | Compiling packages: etcd-dns-checker/aa192138b758a2ecd9f7046ee8d321344b14b1d3
Task 6 | 13:20:02 | Compiling packages: etcdfab/4f84f7856e7b2b120c70cab85df3d5ad5fd5adac
Task 6 | 13:20:02 | Compiling packages: etcd-consistency-checker/ca2e79c9ac1267247787582ffcf045f57d120390 (00:00:30)
Task 6 | 13:20:34 | Compiling packages: etcd-dns-checker/aa192138b758a2ecd9f7046ee8d321344b14b1d3 (00:00:32)
Task 6 | 13:20:47 | Compiling packages: etcdfab/4f84f7856e7b2b120c70cab85df3d5ad5fd5adac (00:00:45)
Task 6 | 13:20:50 | Compiling packages: bosh-dns/4a31fa2f1e36764fca50862fba944d2b546aa33d (00:01:01)
Task 6 | 13:20:54 | Compiling packages: kubernetes/43cb587e6cf7665ff51f7aad84a4486c27ae7e15890d7cc1163c36a85b8b967e (00:02:26)
Task 6 | 13:20:56 | Creating missing vms: master/69a27adc-70bd-45e2-b1b6-7638395cc5ec (0)
Task 6 | 13:20:56 | Creating missing vms: worker/5be6eacd-1a17-46e9-ac8a-20d1f50228e0 (0) (00:01:04)
Task 6 | 13:22:01 | Creating missing vms: master/69a27adc-70bd-45e2-b1b6-7638395cc5ec (0) (00:01:05)
Task 6 | 13:22:01 | Updating instance master: master/69a27adc-70bd-45e2-b1b6-7638395cc5ec (0) (canary) (00:01:45)
Task 6 | 13:23:47 | Updating instance worker: worker/5be6eacd-1a17-46e9-ac8a-20d1f50228e0 (0) (canary) (00:03:23)
Task 6 Started Sat Jan 6 13:17:18 UTC 2018
Task 6 Finished Sat Jan 6 13:27:10 UTC 2018
Task 6 Duration 00:09:52
Task 6 done
Succeeded
```
`bosh vms`でBOSHで管理されているVM一覧を確認してください。
```
$ bosh vms
Using environment '192.168.50.6' as client 'admin'
Task 7. Done
Deployment 'cfcr'
Instance Process State AZ IPs VM CID VM Type
master/69a27adc-70bd-45e2-b1b6-7638395cc5ec running z1 10.244.1.92 996c0440-a3d5-4087-54f0-60cee98004e7 small
worker/5be6eacd-1a17-46e9-ac8a-20d1f50228e0 running z1 10.244.1.93 c9d60e0d-6567-4097-7164-3ac36f97b999 small-highmem
2 vms
Succeeded
```
`bosh instances --ps`で各VM上で動いているプロセス一覧を表示できます。
```
$ bosh instances --ps
Using environment '192.168.50.6' as client 'admin'
Task 8. Done
Deployment 'cfcr'
Instance Process Process State AZ IPs
master/69a27adc-70bd-45e2-b1b6-7638395cc5ec - running z1 10.244.1.92
~ bosh-dns running - -
~ bosh-dns-healthcheck running - -
~ bosh-dns-resolvconf running - -
~ etcd running - -
~ etcd_consistency_checker running - -
~ flanneld running - -
~ kubernetes-api running - -
~ kubernetes-controller-manager running - -
~ kubernetes-scheduler running - -
worker/5be6eacd-1a17-46e9-ac8a-20d1f50228e0 - running z1 10.244.1.93
~ bosh-dns running - -
~ bosh-dns-healthcheck running - -
~ bosh-dns-resolvconf running - -
~ docker running - -
~ flanneld running - -
~ kubelet running - -
~ kubernetes-proxy running - -
18 instances
Succeeded
```
#### Kubernetesにアクセス
デプロイしたKubernetesにアクセスしましょう。
まずはBOSH Liteのネットワーク(`10.244.0.0/20`)にアクセスするためのルーティングの設定が必要です。
```
# Macの場合
sudo route add -net 10.244.0.0/16 192.168.50.6
# Linuxの場合
sudo route add -net 10.244.0.0/16 gw 192.168.50.6
```
adminのパスワードやコンポーネント間のTLS証明書などはCredHubに保存されています。
CredHubには次のコマンドでログインできます。
```
credhub login \
-s 192.168.50.6:8844 \
-u credhub-cli \
-p `bosh int ~/bosh-manifests/bosh-lite-creds.yml --path /credhub_cli_password` \
--ca-cert <(bosh int ~/bosh-manifests/bosh-lite-creds.yml --path /uaa_ssl/ca) \
--ca-cert <(bosh int ~/bosh-manifests/bosh-lite-creds.yml --path /credhub_ca/ca)
```
CredHubに登録されているCredentialsは次の通りです。
```
$ credhub find
credentials:
- name: /dns_healthcheck_client_tls
version_created_at: 2018-01-06T13:17:22Z
- name: /dns_healthcheck_server_tls
version_created_at: 2018-01-06T13:17:22Z
- name: /dns_healthcheck_tls_ca
version_created_at: 2018-01-06T13:17:22Z
- name: /bosh-lite/cfcr/tls-etcd-client
version_created_at: 2018-01-06T13:17:21Z
- name: /bosh-lite/cfcr/tls-etcd-server
version_created_at: 2018-01-06T13:17:21Z
- name: /bosh-lite/cfcr/tls-docker
version_created_at: 2018-01-06T13:17:21Z
- name: /bosh-lite/cfcr/tls-kubernetes
version_created_at: 2018-01-06T13:17:21Z
- name: /bosh-lite/cfcr/tls-kubelet
version_created_at: 2018-01-06T13:17:21Z
- name: /bosh-lite/cfcr/kubo_ca
version_created_at: 2018-01-06T13:17:20Z
- name: /bosh-lite/cfcr/route-sync-password
version_created_at: 2018-01-06T13:17:20Z
- name: /bosh-lite/cfcr/kube-scheduler-password
version_created_at: 2018-01-06T13:17:20Z
- name: /bosh-lite/cfcr/kube-proxy-password
version_created_at: 2018-01-06T13:17:20Z
- name: /bosh-lite/cfcr/kubelet-password
version_created_at: 2018-01-06T13:17:20Z
- name: /bosh-lite/cfcr/kubo-admin-password
version_created_at: 2018-01-06T13:17:19Z
```
adminのパスワードは`credhub get -n /bosh-lite/cfcr/kubo-admin-password`で取得できます。
```
admin_password=`credhub get -n /bosh-lite/cfcr/kubo-admin-password | bosh int --path /value -`
```
```
export admin_password=$(credhub get -n /bosh-lite/cfcr/kubo-admin-password | bosh int --path /value -)
export master_host=10.244.1.92
export cluster_name=cfcr
export user_name=cfcr-admin
export context_name=cfcr
kubectl config set-cluster "${cluster_name}" --server="https://${master_host}:8443" --insecure-skip-tls-verify=true
kubectl config set-credentials "${user_name}" --token="${admin_password}"
kubectl config set-context "${context_name}" --cluster="${cluster_name}" --user="${user_name}"
kubectl config use-context "${context_name}"
```
これでKubernetesにアクセスできます。
```
$ kubectl get node -o wide
NAME STATUS AGE VERSION EXTERNAL-IP OS-IMAGE KERNEL-VERSION
10.244.1.93 Ready 31m v1.8.4 Ubuntu 14.04.5 LTS 4.4.0-103-generic
$ kubectl get all -n kube-system
NAME READY STATUS RESTARTS AGE
po/heapster-776fb9d89b-l75w9 1/1 Running 0 30m
po/kube-dns-9dc479d4f-6c8p6 3/3 Running 0 30m
po/kubernetes-dashboard-789b8cfdb7-jsnwb 1/1 Running 0 30m
po/monitoring-influxdb-c577bbf7-n2jvv 1/1 Running 0 30m
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/heapster 10.100.200.56 80/TCP 30m
svc/kube-dns 10.100.200.10 53/UDP,53/TCP 30m
svc/kubernetes-dashboard 10.100.200.200 80/TCP 30m
svc/monitoring-influxdb 10.100.200.242 80/TCP,8086/TCP 30m
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deploy/heapster 1 1 1 1 30m
deploy/kube-dns 1 1 1 1 30m
deploy/kubernetes-dashboard 1 1 1 1 30m
deploy/monitoring-influxdb 1 1 1 1 30m
NAME DESIRED CURRENT READY AGE
rs/heapster-776fb9d89b 1 1 1 30m
rs/kube-dns-9dc479d4f 1 1 1 30m
rs/kubernetes-dashboard-789b8cfdb7 1 1 1 30m
rs/monitoring-influxdb-c577bbf7 1 1 1 30m
```
`kubectl proxy`で[http://localhost:8001/ui](http://localhost:8001/ui)にアクセスできます。

#### サンプルアプリのデプロイ
サンプルアプリをデプロイしてNode Portで公開します。
``` yaml
cat < 8080:32300/TCP 44s app=kuar
svc/kubernetes 10.100.200.1 443/TCP 45m
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE CONTAINER(S) IMAGE(S) SELECTOR
deploy/kuar 2 2 2 2 44s kuar gcr.io/kuar-demo/kuard-amd64:1 app=kuar
NAME DESIRED CURRENT READY AGE CONTAINER(S) IMAGE(S) SELECTOR
rs/kuar-778cf749cf 2 2 2 44s kuar gcr.io/kuar-demo/kuard-amd64:1 app=kuar,pod-template-hash=3347930579
```
`http://(worker_host):32300`でアプリケーションにアクセスできます。この記事ではworker_hostは`10.244.1.93`です。

----
CFCRをBOSH Liteにデプロイする方法を紹介しました。
サーバー上にCFCR on BOSH Liteをデプロイする場合はmasterの8443ポートに対してport forwardするかHA Proxyを用意すれば、サーバー外からこのKubernetesクラスタにアクセスできます。
次はこの環境の上にFaaSの[riff](https://projectriff.io/)をデプロイする方法を紹介します。