kubernetes on cloudstack with coreos
DESCRIPTION
Intro to coreOS linux distributions and how it can be used to run docker based workloads in the cloud. coreOS instances can be started in a cloudstack cloud, it makes use of cloud-init basics toTRANSCRIPT
Who am I ?• Apache CloudStack and
licloud committer + PMC member
• Looking at techs and how they work together
• Half dev, half community manager, + half event planner
Cloud (e.g CloudStack based = exoscale)Cloud (e.g CloudStack based = exoscale)
coreOScoreOS coreOScoreOS coreOScoreOS
K*K* K*K* K*K*Docker containers
Docker containers
Docker containers
Docker containers
Docker containers
Docker containers
API calls to Kubernetes API
Ugly slide #1
• Linux container (LXC +)• Application deployment• PaaS• Portability• Image sharing via
DockerHub• Ease of packaging
applications
CoreOS
• Linux distribution• Rolling upgrades• Minimal OS• Docker support• etcd and fleet tools
to manage distributed applications based on containers.
• Cloud-init support• Systemd units
CoreOS clustering• etcd HA key value store– Raft election algorithm– Writes when majority in cluster has committed
update– e.g 5 nodes, tolerates 2 nodes failure
• fleet distributed init system (schedules systemd units in a cluster)– Submits systemd units cluster wide– Affinity, anti-affinity, global “scheduling”
Load BalancersLoad Balancers
FWs & VPNsFWs & VPNs
DashboardDashboard
Identity Mgmt.Identity Mgmt.
Image Mgmt.Image Mgmt.
ComputeCompute
StorageStorage
NetworkNetwork
MeteringMeteringAPI (EC2 & CS)API (EC2 & CS) Self-service PortalSelf-service Portal
Data Center Orchestrator
• IaaS Public cloud• Switzerland based• Apache CloudStack• Security groups, ssh key
pairs• Offers coreOS
templates (+ Debian, ubuntu, CentOS and even Windows)
Starting containers#cloud-config
coreos:
units:
- name: docker.service
command: start
- name: es.service
command: start
content: |
[Unit]
After=docker.service
Requires=docker.service
Description=starts ElasticSearch container
[Service]
TimeoutStartSec=0
ExecStartPre=/usr/bin/docker pull dockerfile/elasticsearch
ExecStart=/usr/bin/docker run -d -p 9200:9200 -p 9300:9300 dockerfile/elasticsearch
Kubernetes• Docker application
orchestration• Google GCE, rackspace,
Azure providers• Deployable on CoreOS• Container replication• HA services
Kubernetes{
"id": "redis-master-2",
"kind": "Pod",
"apiVersion": "v1beta1",
"desiredState": {
"manifest": {
"version": "v1beta1",
"id": "redis-master-2",
"containers": [{
"name": "master",
"image": "dockerfile/redis",
"ports": [{
"containerPort": 6379,
"hostPort": 6379
…
"labels": {
"name": "redis-master"
}
}
Kubernetes on CloudStack
• Find a CloudStack cloud that supports CoreOS• Then use:
https://github.com/runseb/kubernetes-exoscale
• Libcloud to start nodes with coreOS template• User data to pass cloud-configs• Then start Kube* Service units with fleet
Cloud API Cloud API
Libcloud startup scripts
Etcd cluster5 nodes
Discovery service to bootstrap
Etcd cluster5 nodes
Discovery service to bootstrap
Kubernetes cluster5 nodes
Start Kube* services via fleetRun guestbook example
Kubernetes cluster5 nodes
Start Kube* services via fleetRun guestbook example
PR welcome:https://github.com/runseb/kubernetes-exoscale
Cloud (e.g CloudStack based = exoscale)Cloud (e.g CloudStack based = exoscale)
coreOScoreOS coreOScoreOS coreOScoreOS
K*K* K*K* K*K*Docker container
Docker container
Docker container
Docker container
Docker container
Docker container
API calls to Kubernetes API