--- 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にデプロイされています。 ![image](https://user-images.githubusercontent.com/106908/34641118-4e305e72-f342-11e7-8f5b-8bd92d1d19b0.png) 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)にアクセスできます。 ![image](https://user-images.githubusercontent.com/106908/34640465-608076fe-f336-11e7-97df-b322023a7ad8.png) #### サンプルアプリのデプロイ サンプルアプリをデプロイして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`です。 ![image](https://user-images.githubusercontent.com/106908/34640535-7cde91ea-f337-11e7-9d7f-ec8a9e4c84bb.png) ---- CFCRをBOSH Liteにデプロイする方法を紹介しました。 サーバー上にCFCR on BOSH Liteをデプロイする場合はmasterの8443ポートに対してport forwardするかHA Proxyを用意すれば、サーバー外からこのKubernetesクラスタにアクセスできます。 次はこの環境の上にFaaSの[riff](https://projectriff.io/)をデプロイする方法を紹介します。