if you can drink and watch Star Wars, you can handle Kubernetes in production
(because that’s exactly what we did)
Ilya Dmitrichenko
1. motivation 2. barriers to
adoption 3. our team’s
experience 4. tools/demo
kube-1
kube-3
kube-2
kube-4 kube-6 kube-5
kube-7
deliver faster
your organisation absolutely must
adopt microservices
everyone in your team agreed that you will
adopt containers
everyone in your team agreed that you will
adopt kubernetes
everyone in your team agreed that you will
faster development
everyone in your team sees that microservices are key to
reliable deployment
everyone in your team sees that containers are key to
scalability & utilisation
everyone in your team sees that kubernetes is key to
and most of people in this room will agree with you.
and most of people in this room will agree with you.
in theory.
and most of people in this room will agree with you.
in theory.
while in practice, there are still more questions…
more questions will arise because
more questions will arise because
your team has opinions
more questions will arise because
your team has opinions
you cannot take very big risk
more questions will arise because
your team has opinions
you cannot take very big risk and legacy systems are a thing.
let’s see what these questions are…
deliver faster
don’t forget that you must
1. language & frameworks
1/5
1. language & frameworks
you know what’s best for your application
1. language & frameworks
with microservices this is much easier then it used to be
2. toolchains & workflow
2/5
2. toolchains & workflow
you already know how to compile your app, write tests & configure CI
2. toolchains & workflow
building containers is easy, most major CI systems support it
3. infrastructure
3/5
3. infrastructure
creating a Kubernetes cluster is fairly easy, for some users
3. infrastructure
not as easy if you have opinions and non-trivial requirements
4. shipping pipeline
4/5
4. shipping pipeline
Kubernetes has all the primitives, but tooling isn’t fully understood yet
4. shipping pipeline
what is the best practice to handle deployment of your application?
5. operations
5/5
5. operations
what are the tools you need to execute most efficiently?
we call this ABCDE of Microservices
A) write the app B) test and build it C) provision a cluster D) deploy the app E) execute
deliver faster?
that’s all theory, but how are you going to
practical concerns about infrastructure
practical concerns about infrastructure
opinions & risks
practical concerns about infrastructure
all-new and shiny
operating system
common examples of infrastructure opinions
automation tools
common examples of infrastructure opinions
common examples of infrastructure opinions
cloud provider
common examples of infrastructure opinions
virtual vs bare-metal
common examples of infrastructure opinions
commercial support
common examples of infrastructure opinions
cluster management
common examples of infrastructure opinions
troubleshooting
common examples of infrastructure opinions
databases
common examples of infrastructure opinions
access control
common examples of infrastructure opinions
platform as a service?
kubernetes depends on infra a lot all of the opinions will surface
Controller Manager[kube-controller-manager]
Scheduler[kube-scheduler]
API Server[kube-apiserver]
Cluster Nodes
[kube-proxy][kubelet]
etcd1 etcd2 etcd3
all of the opinions will surface and you still need
really?
Controller Manager[kube-controller-manager]
Scheduler[kube-scheduler]
API Server[kube-apiserver]
Cluster Nodes
[kube-proxy][kubelet]
etcd1 etcd2 etcd3
Controller Manager[kube-controller-manager]
Scheduler[kube-scheduler]
API Server[kube-apiserver]
Cluster Nodes
[kube-proxy][kubelet]
etcd1 etcd2 etcd3
all of the opinions will surface and you still need
a network
Controller Manager[kube-controller-manager]
Scheduler[kube-scheduler]
API Server[kube-apiserver]
Cluster Nodes
[kube-proxy][kubelet]
etcd1 etcd2 etcd3
all of the opinions will surface and you still need
a storage product
Controller Manager[kube-controller-manager]
Scheduler[kube-scheduler]
API Server[kube-apiserver]
Cluster Nodes
[kube-proxy][kubelet]
etcd1 etcd2 etcd3
all of the opinions will surface and you still need
a monitoring solution
Controller Manager[kube-controller-manager]
Scheduler[kube-scheduler]
API Server[kube-apiserver]
Cluster Nodes
[kube-proxy][kubelet]
etcd1 etcd2 etcd3
all of the opinions will surface and you still need
a private registry
Controller Manager[kube-controller-manager]
Scheduler[kube-scheduler]
API Server[kube-apiserver]
Cluster Nodes
[kube-proxy][kubelet]
etcd1 etcd2 etcd3
all of the opinions will surface and you still need
to deliver faster
our team’s use-case
scope-app-2590 pods
app-mapper2 pods
The Internet
users2 pods
kubernetes0 pods
Uncontainedip-172-20-0-149
Uncontainedip-172-20-0-148
scope-app-3271 pod
scope-app-2810 pods
frontend2 pods
scope-app-3010 pods
fairly simple Go app, only 6 services
our team’s use-case
scope-app-2590 pods
app-mapper2 pods
The Internet
users2 pods
kubernetes0 pods
Uncontainedip-172-20-0-149
Uncontainedip-172-20-0-148
scope-app-3271 pod
scope-app-2810 pods
frontend2 pods
scope-app-3010 pods
no messaging or fancy databases
our team’s use-case
scope-app-2590 pods
app-mapper2 pods
The Internet
users2 pods
kubernetes0 pods
Uncontainedip-172-20-0-149
Uncontainedip-172-20-0-148
scope-app-3271 pod
scope-app-2810 pods
frontend2 pods
scope-app-3010 pods
must have portable cluster deployment
our team’s experience
our team’s experience
tried a few different approaches for local and cloud deployments
our team’s experience
some cloud providers are less equal than others
our team’s experience
some cloud provider services are slower than others
our team’s experience
setup from scratch is hard, especially due to enforced security
our team’s experience
self-hosting is nice, but somewhat harder to reason about
our team’s experience
operating systems and and configuration
our team’s experience
declarative provisioning wins and network-first was a revelation
our team’s experience
checkout git.io/k8s-anywhere and see for yourself
we needed
simple and robust provisioning in any environment
we needed
zero-config scale-out and in-place upgrade
we built
easy to adopt cluster provisioning tools
we built
containerised public key infrastructure solution
we built
weave as a bootstrap/management and pod networking
in a nutshell
weavedns, few small shell scripts and hyperkube images
in a nutshell
just pick a few docker hosts and launch weave
in a nutshell
pick worker, master & etcd nodes. and off you go!
live demo
ip-172-20-0-164
ip-172-20-0-222
ip-172-20-0-244
ip-172-20-0-243
ip-172-20-0-242
ip-172-20-0-12
ip-172-20-0-51
potentially.
are you anywhere closer to delivering faster?
scope.weave.works
ilya-proxy-e20b51 container
metrics-98d4fd7-ybopj1 container
dbshell-fons-e67911 container
users-cb08840-kjd391 container
dbshell-fons-144171 container
dbshell-fons-2eab51 container
dbshell-fons-2d95f1 container
Uncontainedip-172-20-0-149
Uncontainedip-172-20-0-148
app-mapper-77d895a-rjqc11 container
app-mapper-77d895a-bk4k51 container
The Internet
users-cb08840-dj03q1 container
frontend-515708e-0y9h01 container
weave release v1.5
party!
users-cb08840-kjd392 containers
metrics-98d4fd7-ybopj2 containers
users-cb08840-dj03q2 containers
frontend-515708e-0y9h02 containers
dbshell-fons-e67912 containers
app-mapper-77d895a-bk4k52 containers
Uncontainedip-172-20-0-149
ilya-proxy-e20b52 containers
The Internet
Uncontainedip-172-20-0-148