目次
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にデプロイされています。
Minikubeと比べるとバージョンアップの度にreinstallする必要がないのが便利です。
ただし、CFCRも1.0になるまでは非互換なアップデートが含まれる可能性があります。またMinikubeに比べて、デプロイ対象イメージをDocker Registryにpushしないといけない点がデメリットです。(頑張れば直接Worker VM上のDockerに直接つなげれられると思いますが...)
CFCRのデプロイ
CFCRのデプロイ方法は次の2パターンがあります。
- 用意されたスクリプトを使ってBOSHから順番にインストールしていくCFCR独自の方法
cfcr.yml
とoperation filesを使って既存のBOSHにbosh deploy
でデプロイしていく普通のBOSHの方法
CFCRとしては前者をオフィシャルな方法として提供しており、ドキュメントに書かれているのもこの方法です。 前者ではBOSH Liteへのデプロイ方法は提供されていません。
後者はBOSH界のLegend、Dr. NicのPull Requestにより導入されました。BOSHユーザーには馴染みのあるデプロイ方法です。 公式ドキュメントとは別にこちらにインストール方法が記載されています。 こちらも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
を使いました。
この時点での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
に設定されています。
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 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を作成します。
- Stemcellのバージョンを3468.13に固定するops-file (デフォルトで
latest
が指定されているが、cfcr以外で使うstemcellと衝突しないように明示する) kubo-release
のバージョンを0.11.0に固定するops-file- masterにStatic IPを指定するためのops-file
- workerにStatic IPを指定するためのops-file (Serviceで
type: LoadBalancer
は使用できないので、type: NodePort
を便利に使うためworkerのIPを固定する) - 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 proxy
でhttp://localhost:8001/uiにアクセスできます。
サンプルアプリのデプロイ
サンプルアプリをデプロイして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
です。
CFCRをBOSH Liteにデプロイする方法を紹介しました。
サーバー上にCFCR on BOSH Liteをデプロイする場合はmasterの8443ポートに対してport forwardするかHA Proxyを用意すれば、サーバー外からこのKubernetesクラスタにアクセスできます。
次はこの環境の上にFaaSのriffをデプロイする方法を紹介します。