This document compares deploying Cloud Foundry on traditional infrastructure using VMs versus deploying it on Kubernetes. It notes some pain points of the traditional approach like requiring an IaaS and difficult installation. It then introduces Kubernetes as an alternative and shows how Cloud Foundry components can be containerized and installed on Kubernetes more easily using Helm. It provides a hands-on example of deploying Cloud Foundry on an AWS Kubernetes cluster.
1. Cloud Foundry on Kubernetes
Yun Sang Jun
April 5, 2018
chris.sj.yun@gmail.com
2. Cloud Foundry Pain Point
● IaaS(Hypervisor) required
○ Impossible to install on baremetal
● Difficult to install
○ Leaning Curve about Bosh
● High Cost
○ Cloud Foundry have many components such as UAA, GoRouter..
3. Kubernetes?
● Container orchestration open source (powered by Google)
● Docker container lifecycle Management
● Easily deploy & upgrade application using Helm(package manager)
● Possible to install on baremetal
4. Comparison in infrastructure
VM x N
IaaS(Hypervisor)
Go
Router
UAA
Diego
Cell
Traditional Cloud Foundry Cloud Foundry on Kubernetes
...
Kubernetes Cluster
Baremetal or VM
Go
Router
UAA
Diego
Cell
...
● IaaS(Hypervisor) required ● Any Infrastructure with Kubernetes
installed
6. Comparison in cost
Component Traditional Cloud Foundry Cloud Foundry on Kubernetes
api
diego
loggregator
nats
router
uaa
...
At least 2GB memory
ecommened
At least 256MB memory
recommened
Total ≅ 60GB(with 16GB Cell, not HA) ≅ 30GB(with 16GB Cell, not HA)
● Traditional Cloud Foundry requires more memory due to VM’s guest OS
7. How?
● Cloud Foundry components are containerized
○ https://github.com/SUSE/scf
● Easily install using Helm
○ https://github.com/SUSE/scf/wiki/How-to-Install-SCF
13. 5. Expose endpoint
For the items below, change service type from ClusterIP to NodePort
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
uaa-public NodePort 10.3.0.71 xxx.xxx.xxx 2793:30266/TCP
diego-access-public NodePort 10.3.0.222 xxx.xxx.xxx 2222:30938/TCP
router-public NodePort 10.3.0.43 xxx.xxx.xxx 80:32102/TCP,443:31250/TCP,4443:31407/TCP