SlideShare a Scribd company logo
CoreOS in a Nutshell
Alex Crawford
Software Developer at CoreOS
alex.crawford@coreos.com
github.com/crawford
What is CoreOS?
What is CoreOS?
CoreOS in a Nutshell
CoreOS in a Nutshell
What is CoreOS?
What is CoreOS?
CoreOS in a Nutshell
The smartest way to run your container infrastructure.
tectonic.com @tectonic
QUAY
Secure hosting for private container repositories
quay.io @quayio
Why build CoreOS?
you
you as a sw engineer
your
with Ada.Text_IO;
procedure Hello_World is
use Ada.Text_IO;
begin
Put_Line("Hello, world!");
end;
#include <stdio.h>
int main()
{
printf("Hello, world!n");
}
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
your container
image
your /bin/java
/opt/app.jar
/lib/libc
your /bin/python
/opt/app.py
/lib/libc
your com.example.app
d474e8c57737625c
your d474e8c57737625c
Signed By: Alice
ops engineer
you as an ops engineer
your
your
com.example.webapp
x3
your
com.example.webapp
x3
your
???
com.example.webapp
x3
How do we do it?
reduce API contracts
minimal
kernel
systemd
rkt
ssh
docker
python
java
nginx
mysql
openssl
app
trodistrodistrodistrodistrodistro
python
java
nginx
mysql
openssl
apptrodistrodistrodistrodistrodistro
kernel
systemd
rkt
ssh
docker
python
openssl-A
app1
trodistrodistrodistrodistrodistro
java
openssl-B
app2
java
openssl-B
app3
kernel
systemd
rkt
ssh
docker
python
openssl-A
app1
trodistrodistrodistrodistrodistro
java
openssl-B
app2
java
openssl-B
app3
CoreOS
CoreOS
container
trodistrodistrodistrodistrodistro
container
container
CoreOS in a Nutshell
OS operations
updates
OS operations
manual updates
automatic updates
automatic updates
CoreOS in a Nutshell
CoreOS in a Nutshell
atomic update with rollback
CoreOS Updates
machine configuration
OS operations
get into the cluster
machine config
[Service]
ExecStart=/usr/bin/kubelet --
api_servers=https://172.17.4.101 --
register-node=true --hostname-
override=172.17.4.201 --
cluster_dns=10.3.0.10 --
cluster_domain=cluster.local --tls-
cert-file=worker.pem --tls-private-key-
file=worker-key.pem
[Service]
ExecStart=/usr/bin/kubelet --
api_servers=https://172.17.4.101 --
register-node=true --hostname-
override=172.17.4.201 --
cluster_dns=10.3.0.10 --
cluster_domain=cluster.local --tls-
cert-file=worker.pem --tls-private-key-
file=worker-key.pem
[Service]
ExecStart=/usr/bin/kubelet --
api_servers=https://172.17.4.101 --
register-node=true --hostname-
override=172.17.4.201 --
cluster_dns=10.3.0.10 --
cluster_domain=cluster.local --tls-
cert-file=worker.pem --tls-private-key-
file=worker-key.pem
distributed configuration
cluster operations
etcd
/etc
distributed
Available
Leader
Follower
Available
Leader
Follower
Available
Leader
Follower
Unavailable
Leader
Follower
Available
Leader
Follower
Available
Leader
Follower
Temporarily Unavailable
Leader
Follower
Available
Leader
Follower
Unavailable
Leader
Follower
what should run
cluster operations
k8s/mesos/etc scheduler
scheduling
getting work to servers
scheduling
You
You
Scheduler API
You
Scheduler API
Scheduler
You
Scheduler API
Scheduler
Machine(s)
while true {
todo = diff(desState, curState)
schedule(todo)
}
while true {
todo = diff(desState, curState)
schedule(todo)
}
while true {
todo = diff(desState, curState)
schedule(todo)
}
while true {
todo = diff(desState, curState)
schedule(todo)
}
$ kubectl run example
--image=quay.io/crawford/example
--replicas=1
$ kubectl get pods
POD IP
example-97wt8 10.2.29.4
$ kubectl run example
--image=quay.io/crawford/example
--replicas=1
$ kubectl get pods
POD IP
example-97wt8 10.2.29.4
$ kubectl run example
--image=quay.io/crawford/example
--replicas=1
$ kubectl get pods
POD IP
example-97wt8 10.2.29.4
$ kubectl run example
--image=quay.io/crawford/example
--replicas=1
$ kubectl get pods
POD IP
example-97wt8 10.2.29.4
$ kubectl run example
--image=quay.io/crawford/example
--replicas=1
$ kubectl get pods
POD IP
example-97wt8 10.2.29.4
$ kubectl run example
--image=quay.io/crawford/example
--replicas=1
$ kubectl get pods
POD IP
example-97wt8 10.2.29.4
$ kubectl scale rc example
--replicas=2
$ kubectl get pods
POD IP
example-97wt8 10.2.29.4
example-f839d 10.2.29.8
$ kubectl scale rc example
--replicas=2
$ kubectl get pods
POD IP
example-97wt8 10.2.29.4
example-f839d 10.2.29.8
$ kubectl scale rc example
--replicas=2
$ kubectl get pods
POD IP
example-97wt8 10.2.29.4
example-f839d 10.2.29.8
$ kubectl scale rc example
--replicas=2
$ kubectl get pods
POD IP
example-97wt8 10.2.29.4
example-f839d 10.2.29.8
$ kubectl scale rc example
--replicas=2
$ kubectl get pods
POD IP
example-97wt8 10.2.29.4
example-f839d 10.2.29.8
$ kubectl scale rc example
--replicas=2
$ kubectl get pods
POD IP
example-97wt8 10.2.29.4
example-f839d 10.2.29.8
pod
env=prod
app=web
pod
env=prod
app=web
pod
env=prod
app=web
rc web-prod
select(env=prod,app=web)
count=3
pod
env=prod
app=web
pod
env=prod
app=web
pod
env=prod
app=web
rc web-prod
select(env=prod,app=web)
count=1
pod
env=prod
app=web
rc web-prod
select(env=prod,app=web)
count=1
pod
env=prod
app=web
rc web-prod
select(env=prod,app=web)
count=5
pod
env=prod
app=web
pod
env=prod
app=web
pod
env=prod
app=web
pod
env=prod
app=web
pod
env=prod
app=web
rc web-prod
select(env=prod,app=web)
count=5
where is it running
cluster operations
dns, LBs, k8s labels
services
flexible service discovery
k8s labels
pod
env=dev
app=web
pod
env=test
app=web
pod
env=prod
app=web
pod
env=dev
app=web
pod
env=test
app=web
pod
env=prod
app=web
service test.example.com
select(env=dev,app=web)
service beta.example.com
select(env=test,app=web)
OR
select(env=prod,app=web)
service example.com
select(env=prod,app=web)
pod
env=test
app=web
pod
env=prod
app=web
pod
env=prod
app=web
pod
env=dev
app=web
pod
env=test
app=web
pod
env=prod
app=web
service test.example.com
select(env=dev,app=web)
service beta.example.com
select(env=test,app=web)
OR
select(env=prod,app=web)
service example.com
select(env=prod,app=web)
pod
app=foo,version=1
service foo.cluster.local
select(app=foo)
pod
app=foo,version=1
pod
app=foo,version=2
service foo.cluster.local
select(app=foo)
pod
app=foo,version=1
pod
app=foo,version=2
service foo.cluster.local
select(app=foo)
pod
app=foo,version=1
pod
app=foo,version=2
service foo.cluster.local
select(app=foo)
pod
app=foo,version=2
service foo.cluster.local
select(app=foo)
CoreOS in a Nutshell
coreos.com/careers
work with us
Questions?

More Related Content

PDF
CoreOS + Kubernetes @ All Things Open 2015
PDF
CoreOS: Control Your Fleet
PDF
CoreOS @Codetalks Hamburg
PDF
Kube-AWS
PDF
Build Your Own CaaS (Container as a Service)
PDF
Docker orchestration using core os and ansible - Ansible IL 2015
PDF
CoreOS intro
PDF
Dockerを利用したローカル環境から本番環境までの構築設計
CoreOS + Kubernetes @ All Things Open 2015
CoreOS: Control Your Fleet
CoreOS @Codetalks Hamburg
Kube-AWS
Build Your Own CaaS (Container as a Service)
Docker orchestration using core os and ansible - Ansible IL 2015
CoreOS intro
Dockerを利用したローカル環境から本番環境までの構築設計

What's hot (20)

PDF
Declare your infrastructure: InfraKit, LinuxKit and Moby
PDF
Automatic docker service announcement with registrator and confd
PDF
Introduction to Docker & CoreOS - Symfony User Group Cologne
 
PDF
Docker composeで開発環境をメンバに配布せよ
PDF
CoreOS introduction - Johann Romefort
PDF
15 kubernetes failure points you should watch
PPTX
Tectonic Summit 2016: The Origins of Kubernetes
PDF
Docker up and running
PDF
Scaling Next-Generation Internet TV on AWS With Docker, Packer, and Chef
PDF
Kubernetes Boston — Custom High Availability of Kubernetes
PDF
Endocode Kubernetes Meetup: Architecture Patterns for Microservices in Kubern...
PDF
Infrastructure as Code with Terraform
PDF
Docker Overview
PPTX
Infrastructure as Code: Introduction to Terraform
PPTX
Packet Walk(s) In Kubernetes
PDF
Object Storage with Gluster
PPTX
Cluster Lifecycle Landscape
PPTX
DevOps with Fabric
PDF
What Have Syscalls Done for you Lately?
ODP
LinuxKit Swarm Nodes
Declare your infrastructure: InfraKit, LinuxKit and Moby
Automatic docker service announcement with registrator and confd
Introduction to Docker & CoreOS - Symfony User Group Cologne
 
Docker composeで開発環境をメンバに配布せよ
CoreOS introduction - Johann Romefort
15 kubernetes failure points you should watch
Tectonic Summit 2016: The Origins of Kubernetes
Docker up and running
Scaling Next-Generation Internet TV on AWS With Docker, Packer, and Chef
Kubernetes Boston — Custom High Availability of Kubernetes
Endocode Kubernetes Meetup: Architecture Patterns for Microservices in Kubern...
Infrastructure as Code with Terraform
Docker Overview
Infrastructure as Code: Introduction to Terraform
Packet Walk(s) In Kubernetes
Object Storage with Gluster
Cluster Lifecycle Landscape
DevOps with Fabric
What Have Syscalls Done for you Lately?
LinuxKit Swarm Nodes
Ad

Viewers also liked (8)

PDF
Etcd- Mission Critical Key-Value Store
PPTX
Tectonic Summit 2016: CoreOS Tectonic on AWS
PPTX
Tectonic Summit 2016: Multi-Cluster Kubernetes: Planning for Unknowns
PDF
Kubernetes Basics
PDF
Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
PPTX
An introduction to k8 s.pptx
PDF
Scaling Docker with Kubernetes
PDF
An Introduction to Kubernetes
Etcd- Mission Critical Key-Value Store
Tectonic Summit 2016: CoreOS Tectonic on AWS
Tectonic Summit 2016: Multi-Cluster Kubernetes: Planning for Unknowns
Kubernetes Basics
Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
An introduction to k8 s.pptx
Scaling Docker with Kubernetes
An Introduction to Kubernetes
Ad

Similar to CoreOS in a Nutshell (20)

PDF
時代在變 Docker 要會:台北 Docker 一日入門篇
PDF
How abusing the Docker API led to remote code execution same origin bypass an...
PDF
手把手帶你學Docker 03042017
PPTX
Building a private CI/CD pipeline with Java and Docker in the Cloud as presen...
PPT
Openshift31-tech.ppt
PDF
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, Orchestration
PDF
手把手帶你學 Docker 入門篇
PDF
Docker workshop 0507 Taichung
PDF
$ kubectl hacking @DevOpsCon Berlin 2019
PDF
Kubernetes: Wie Chefkoch.de mit Containern arbeitet
PDF
Dockercon EU 2014
PPTX
PDF
How to Use Your Own Private Registry
PDF
COSCUP - Fleet
PDF
Composer for busy developers - DPC13
PPTX
The Tale of a Docker-based Continuous Delivery Pipeline by Rafe Colton (ModCl...
PDF
Docker研習營
PDF
Docker worshop @Twitter - How to use your own private registry
PPTX
Docker workshop DevOpsDays Amsterdam 2014
PDF
Introduction to telepresence
時代在變 Docker 要會:台北 Docker 一日入門篇
How abusing the Docker API led to remote code execution same origin bypass an...
手把手帶你學Docker 03042017
Building a private CI/CD pipeline with Java and Docker in the Cloud as presen...
Openshift31-tech.ppt
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, Orchestration
手把手帶你學 Docker 入門篇
Docker workshop 0507 Taichung
$ kubectl hacking @DevOpsCon Berlin 2019
Kubernetes: Wie Chefkoch.de mit Containern arbeitet
Dockercon EU 2014
How to Use Your Own Private Registry
COSCUP - Fleet
Composer for busy developers - DPC13
The Tale of a Docker-based Continuous Delivery Pipeline by Rafe Colton (ModCl...
Docker研習營
Docker worshop @Twitter - How to use your own private registry
Docker workshop DevOpsDays Amsterdam 2014
Introduction to telepresence

More from CoreOS (12)

PDF
Tectonic Summit 2016: Managing 6 PB of Earth Imagery with Kubernetes
PPTX
Tectonic Summit 2016: It's Go Time
PPTX
Tectonic Summit 2016: Betting on Kubernetes
PPTX
Tectonic Summit 2016: Networking for Kubernetes
PPTX
Tectonic Summit 2016: Multitenant Data Architectures with Kubernetes
PPTX
Tectonic Summit 2016: Brandon Philips, CTO of CoreOS, Keynote
PPTX
Tectonic Summit 2016: Ticketmaster's Public Cloud & Kubernetes Strategy
PPTX
Tectonic Summit 2016: Alex Polvi, CEO of CoreOS, Keynote
PPTX
Tectonic Summit 2016: Kubernetes 1.5 and Beyond
PPTX
Tectonic Summit 2016: Preparing for Cloud Native
PPTX
Clair, A Container Image Security Analyzer
PDF
Tectonic Summit 2015: Containers Across the Cloud and Data Center
Tectonic Summit 2016: Managing 6 PB of Earth Imagery with Kubernetes
Tectonic Summit 2016: It's Go Time
Tectonic Summit 2016: Betting on Kubernetes
Tectonic Summit 2016: Networking for Kubernetes
Tectonic Summit 2016: Multitenant Data Architectures with Kubernetes
Tectonic Summit 2016: Brandon Philips, CTO of CoreOS, Keynote
Tectonic Summit 2016: Ticketmaster's Public Cloud & Kubernetes Strategy
Tectonic Summit 2016: Alex Polvi, CEO of CoreOS, Keynote
Tectonic Summit 2016: Kubernetes 1.5 and Beyond
Tectonic Summit 2016: Preparing for Cloud Native
Clair, A Container Image Security Analyzer
Tectonic Summit 2015: Containers Across the Cloud and Data Center

Recently uploaded (20)

PDF
Mushroom cultivation and it's methods.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PPT
Teaching material agriculture food technology
PPTX
1. Introduction to Computer Programming.pptx
PDF
Getting Started with Data Integration: FME Form 101
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
A Presentation on Artificial Intelligence
PDF
August Patch Tuesday
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Heart disease approach using modified random forest and particle swarm optimi...
PDF
Encapsulation theory and applications.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
NewMind AI Weekly Chronicles - August'25-Week II
Mushroom cultivation and it's methods.pdf
Encapsulation_ Review paper, used for researhc scholars
Teaching material agriculture food technology
1. Introduction to Computer Programming.pptx
Getting Started with Data Integration: FME Form 101
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
A Presentation on Artificial Intelligence
August Patch Tuesday
Assigned Numbers - 2025 - Bluetooth® Document
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Unlocking AI with Model Context Protocol (MCP)
A comparative analysis of optical character recognition models for extracting...
MIND Revenue Release Quarter 2 2025 Press Release
Heart disease approach using modified random forest and particle swarm optimi...
Encapsulation theory and applications.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
Digital-Transformation-Roadmap-for-Companies.pptx
cloud_computing_Infrastucture_as_cloud_p
NewMind AI Weekly Chronicles - August'25-Week II

CoreOS in a Nutshell

Editor's Notes

  • #2: What is ignition? Utility for configuring a machine on boot. how is this different from cloudinit?
  • #3: What is CoreOS? It is a tool that is packaged like a server OS.
  • #4: In particular it is a Linux server OS. I wouldn’t be here at a Linux Foundation event if it wasn’t.
  • #5: What is ignition? Utility for configuring a machine on boot. how is this different from cloudinit?
  • #6: JOKE about hardware! PXE, Install to disk, iPXE, etc
  • #7: In particular it is a Linux server OS. I wouldn’t be here at a Linux Foundation event if it wasn’t.
  • #8: we also have a number of open source tools that can be used independently
  • #12: Why build another Linux? Google released a paper called “Datacenter as a Computer”. A system where: - You add more machines and get more capacity - Individual servers don’t matter - The application is the focus - There are no maintenance windows - Use smart software on commodity hardware OK, so lets get started building this thing!
  • #13: **JOKE**: The goal of this talk is talk about the most important person in the room: you And really the different ways that people have been interacting with our software
  • #14: as a sw engineer you will be interacting with our software in dev/test
  • #15: taking the code to your applications
  • #16: and converting it into ACIs that will be converted
  • #17: and converting it into ACIs that will be converted
  • #18: and converting it into ACIs that will be converted
  • #19: and converting it into ACIs that will be converted
  • #20: and converting it into ACIs that will be converted
  • #21: as an ops engineer you will be interacting with our products as a user
  • #22: as an ops engineer you will be interacting with our products as a user
  • #23: and converting it into ACIs that will be converted
  • #24: and converting it into ACIs that will be converted
  • #25: and converting it into ACIs that will be converted
  • #26: and converting it into ACIs that will be converted
  • #27: we also have a number of open source tools that can be used independently
  • #28: In order to achieve this we need to make the individual server less special. - Who here likes large complex API contracts? - Who likes maintaining complex inter-dependent systems? The current state of server infra makes it hard not to treat things as special.
  • #29: The current distribution model offers a large API contract. The server provides a complex pre-configured platform for you app to run against. Distros are forced to freeze versions of things for fear of breaking this API contract. How do we avoid this situation?
  • #30: but, if we re-write the contract then the OS can be dumber. How can we get away with this? - The application brings its entire userspace from libc up - Kernel syscall API is very stable for nearly all server app needs How do we do this?
  • #31: Using containers we can start to run apps side-by-side with conflicting versions JOKE I would not recommend having lots openssl versions, consider NOT embedding openssl in applications.
  • #32: Using containers we can start to run apps side-by-side with conflicting versions JOKE I would not recommend having lots openssl versions, consider NOT embedding openssl in applications.
  • #33: And to clear everything else up we have containers on the right. Nice isolated bundles of userspace code running on top of a minimal system. Now that we have reduced the API contract we are able to start doing interesting things. Lets talk about updates.
  • #34: And to clear everything else up we have containers on the right. Nice isolated bundles of userspace code running on top of a minimal system. Now that we have reduced the API contract we are able to start doing interesting things. Lets talk about updates.
  • #35: In order to achieve this we need to make the individual server less special. - Who here likes large complex API contracts? - Who likes maintaining complex inter-dependent systems? The current state of server infra makes it hard not to treat things as special.
  • #36: In order to achieve this we need to make the individual server less special. - Who here likes large complex API contracts? - Who likes maintaining complex inter-dependent systems? The current state of server infra makes it hard not to treat things as special.
  • #37: Now just because we have reduced the responsibilities of the OS doesn’t mean we can forget about it completely. Keeping an up to date kernel, init system, ssh, etc are good hygiene. How does CoreOS handle this? Remember how hard it was to update IE? Firefox was better, but still annoying Versions before Firefox 15 and IE 8 didn’t do automatic updates
  • #38: Then Chrome just did it for you And we saw the greatest step forward in web-security to date
  • #39: and we got HTML5, soon there after being able to update unlocked all this
  • #40: In order to make shipping updates to CoreOS as automated as possible we have atomic updates with rollback
  • #41: In order to make shipping updates to CoreOS as automated as possible we have atomic updates with rollback
  • #42: In order to make shipping updates to CoreOS as automated as possible we have atomic updates with rollback
  • #43: There are two parts of configuration: - machine configuration - cluster configuration
  • #44: The machine configuration is mostly about how to get into the cluster - SSH certificates to add - boot strapping etcd - any cluster agents to run - configure networking This is generally specified in CoreOS as a cloud-config file. Because on nearly all platforms you can only get a string of bytes into the system: - Kernel command line - AWS user-data - etc
  • #45: For machines in almost all environments we are limited to a string of bytes. This is OK because the things we need to do are really simple! We have just a few goals.
  • #46: For machines in almost all environments we are limited to a string of bytes. This is OK because the things we need to do are really simple! We have just a few goals.
  • #47: For machines in almost all environments we are limited to a string of bytes. This is OK because the things we need to do are really simple! We have just a few goals.
  • #48: Service discovery through API or DNS. Also, used by scheduler to figure out if work needs to be resceduled.
  • #49: You can think of etcd as /etc distributed across lots of machines.
  • #50: You can think of etcd as /etc distributed across lots of machines.
  • #60: - What should I be running? - Can I reboot for an upgrade now?
  • #61: Transition: For cluster configuration we have a data store called etcd.
  • #62: Scheduling is really the user interface we are getting towards: -
  • #88: Service discovery through API or DNS. Also, used by scheduler to figure out if work needs to be resceduled.
  • #89: There are two parts of configuration:
  • #90: There are two parts of configuration:
  • #99: What’s next? Active development. A few months away. Supercede cloudinit. Use one or the other. user_data cloudinit is not going anywhere.
  • #101: What’s next? Active development. A few months away. Supercede cloudinit. Use one or the other. user_data cloudinit is not going anywhere.