📝 BLOG.IK.AM

@making's memo
(🗃 Categories 🏷 Tags)

Cloud Foundry Container Runtime(a.k.a Kubo / Kubernetes on BOSH) 0.11.0をBOSH-Liteにデプロイ

🗃 {Dev/CaaS/Kubernetes/CFCR}

🏷 BOSH 🏷 BOSH-Lite 🏷 CFCR 🏷 Kubernetes 🏷 Kubo

🗓 Updated at 2018-01-07T02:12:14+09:00 by Toshiaki Maki  🗓 Created at 2018-01-06T14:20:53+09:00 by Toshiaki Maki  {✒️️ Edit  ⏰ History}


⚠️ Caution: This content is a bit old. Please be careful to read.

目次

Cloud Foundry Container Runtimeとは

Cloud Foundry Container Runtime(以降、CFCR)は、KubernetesのBOSH Releaseです。BOSHでKubernetesクラスタを管理できるようになります。
かつてはKuboと呼ばれていましたが、リブランディングにより改名されました。

Certified Kubernetes Conformance Programの一つです。

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)を利用する場合に、
検証環境あるいは開発環境としてそのへんのUbuntuマシン上にCFCR on BOSH-Liteにセットアップできるとリソース消費の観点でお得です。

私の場合、このブログは本番環境としてGKEで動していますが、検証は自宅サーバーのUbuntu上のVirtualBoxにセットアップしたBOSH-LiteにデプロイしたCFCRを使用しています。
GitHubのdevelopブランチがCFCR on BOSH-Liteにデプロイされ、masterブランチがGKEにデプロイされています。

image

Minikubeと比べるとバージョンアップの度にreinstallする必要がないのが便利です。

ただし、CFCRも1.0になるまでは非互換なアップデートが含まれる可能性があります。またMinikubeに比べて、デプロイ対象イメージをDocker Registryにpushしないといけない点がデメリットです。(頑張れば直接Worker VM上のDockerに直接つなげれられると思いますが...)

CFCRのデプロイ

CFCRのデプロイ方法は次の2パターンがあります。

  • 用意されたスクリプトを使ってBOSHから順番にインストールしていくCFCR独自の方法
  • cfcr.ymloperation filesを使って既存のBOSHにbosh deployでデプロイしていく普通のBOSHの方法

CFCRとしては前者をオフィシャルな方法として提供しており、ドキュメントに書かれているのもこの方法です。
前者ではBOSH Liteへのデプロイ方法は提供されていません。

後者はBOSH界のLegend、Dr. NicPull Requestにより導入されました。BOSHユーザーには馴染みのあるデプロイ方法です。
公式ドキュメントとは別にこちらにインストール方法が記載されています。
こちらもBOSH-Liteはサポートしていないのですが、試したところ一部制約はありますが利用可能でした。

事前準備

次のソフトウェアのインストールが必要です。

BOSH-Liteのセットアップ

CFCRはBOSH Director + UAA + CredHub構成を必須としています。

セットアップ方法は、次の記事

と基本的に同じですが、一応簡単に再掲します。

ちなみに、CFCR 0.11.0を使う場合は、StemcellのバージョンをBOSH側とCFCR側で合わせないとflanneldがエラーになりました。
記事執筆時点ではbosh-deploymentはca97795d4e12dc423247b4add70dbc79bc77b1afを使いました。
この時点でのStemcellは3468.13が前提(compiled-releaseで使われているバージョン)となっていますので、CFCRでも3468.13を使うようにします。

mkdir ~/bosh-manifests
cd ~/bosh-manifests
git submodule add [email protected]: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に設定されています。

mkdir ~/bosh-manifests/ops-files
cat <<EOF > ~/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あるいは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を使っているかはこちらで確認できます。

bosh upload-stemcell https://bosh.io/d/stemcells/bosh-warden-boshlite-ubuntu-trusty-go_agent?v=3468.13

CFCRのデプロイ

いよいよCFCR(まだ名前はkubo-release)をデプロイします。
マニフェストはkubo-deploymentで管理されています。
この記事の内容はv0.11.0でしか動かないので、v0.11.0タグに切り替えます。

cd ~/bosh-manifests
git submodule add [email protected]: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と衝突しないように明示する)
  2. kubo-releaseのバージョンを0.11.0に固定するops-file
  3. masterにStatic IPを指定するためのops-file
  4. workerにStatic IPを指定するためのops-file (Serviceでtype: LoadBalancerは使用できないので、type: NodePortを便利に使うためworkerのIPを固定する)
  5. 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"は次の通り。以下、コピペでファイル作成できます。

cat <<EOF > ~/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"は次の通り。

cat <<EOF > ~/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"は次の通り。

cat <<EOF > ~/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"は次の通り。

cat <<EOF > ~/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"は次の通り。

cat <<EOF > ~/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のレンジの中から空いている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    <none>        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    <none>        80/TCP            30m
svc/kube-dns               10.100.200.10    <none>        53/UDP,53/TCP     30m
svc/kubernetes-dashboard   10.100.200.200   <none>        80/TCP            30m
svc/monitoring-influxdb    10.100.200.242   <none>        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 proxyhttp://localhost:8001/uiにアクセスできます。

image

サンプルアプリのデプロイ

サンプルアプリをデプロイしてNode Portで公開します。

cat <<EOF | kubectl apply -f - 
apiVersion: v1
kind: Service
metadata:
  name: kuar
  namespace: default
spec:
  type: NodePort
  ports:
    - name: http
      protocol: TCP
      port: 8080
  selector:
    app: kuar
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kuar
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: kuar
  template:
    metadata:
      labels:
        app: kuar
    spec:
      containers:
      - name: kuar
        image: gcr.io/kuar-demo/kuard-amd64:1
        ports:
        - containerPort: 8080
EOF

次の結果を見れば32300ポートで公開されました。

$ kubectl get all -o wide
NAME                       READY     STATUS    RESTARTS   AGE       IP            NODE
po/kuar-778cf749cf-8mrjh   1/1       Running   0          44s       10.200.30.7   10.244.1.93
po/kuar-778cf749cf-rzndc   1/1       Running   0          44s       10.200.30.6   10.244.1.93

NAME             CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE       SELECTOR
svc/kuar         10.100.200.207   <nodes>       8080:32300/TCP   44s       app=kuar
svc/kubernetes   10.100.200.1     <none>        443/TCP          45m       <none>

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


CFCRをBOSH Liteにデプロイする方法を紹介しました。

サーバー上にCFCR on BOSH Liteをデプロイする場合はmasterの8443ポートに対してport forwardするかHA Proxyを用意すれば、サーバー外からこのKubernetesクラスタにアクセスできます。

次はこの環境の上にFaaSのriffをデプロイする方法を紹介します。