SlideShare a Scribd company logo
1 of 37
Download to read offline
Kubernetes - Beyond a Black Box
A humble peek into one level below your running application in production
Part II
Copyright © 2017 Hao Zhang All rights reserved.
About The Author
• Hao (Harry) Zhang
• Currently: Software Engineer, LinkedIn, Team Helix @ Data
Infrastructure
• Previously: Member of Technical Staff, Applatix, Worked with
Kubernetes, Docker and AWS
• Previous blog series: “Making Kubernetes Production Ready”
• Part 1, Part 2, Part 3
• Or just Google “Kubernetes production”, “Kubernetes in production”, or similar
• Connect with me on LinkedIn
Copyright © 2017 Hao Zhang All rights reserved.
Previously in Part I
• A high level idea about what is Kubernetes
• Components, functionalities, and design choice
• API Server
• Controller Manager
• Scheduler
• Kubelet
• Kube-proxy
• Put it together, what happens when you do `kubectl create`
• SlideShare link for Part I
Copyright © 2017 Hao Zhang All rights reserved.
Outline - Part II
• An analysis of controlling framework design philosophy
• Choreography, not Orchestration
• Level Driven, not Edge Triggered
• Generalized Workload and Centralized Controller
• Scheduling - Limitation and next steps
• Interfaces for production environments
• High level workload abstractions
• Strength and limitations
• Conclusion
Part II
Controlling Framework
Choreography, Level-driven, Centralized Controller
Copyright © 2017 Hao Zhang All rights reserved.
Micro-service Choreography
• Orchestration: one gigantic controller trying to make everything
correct at the same time
• Choreography: Desired state in cluster is achieved by
collaborations of separate autonomous entities reacting on
changes of one or more API object(s) they are interested in
• Separation of concern
• More flexibility to extend different types of semantics (CRD / TPR are
great examples)
• Develop a controller is easy!
More Readings:
✤ Third Party Resource (TPR): https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-third-party-resource/
✤ Customer Resource Definition (CRD): https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/
✤ TPR Design Spec: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/extending-api.md
Copyright © 2017 Hao Zhang All rights reserved.
Micro-service Choreography
• Separation of Concern via Micro-service Choreography (Deployment example)
• ReplicaSet (RS) ensures given # of Pod is always running
• Create / Delete Pod API object if existing number is not matching spec
• Scheduler knows where to put it; Kubelet knows Pod life cycle details
• Deployment (DEP) provides higher level of semantics
• Scale: tell RS to change # of Pods by modifying RS spec, RS knows what to do
• Upgrade: delete current RS, create new RS with new Pod spec
• Rolling-Upgrade: create new RS with new Pod spec, scale down old RS by 1, scale out
new RS by 1, repeat it until no old Pod remains (Same for roll back)
• HorizontalPodAutoscaler (HPA) manipulates deployment
• It polls Pod metrics (from a source such as Heapster or Prometheus), compare it with
user defined metric specs, and make scaling decision
• Tell DEP to scale up/down by modifying DEP spec, DEP controller knows what to do
Copyright © 2017 Hao Zhang All rights reserved.
Micro-service Choreography
• See Next Slide: An illustration about how different autonomous
entities reacting on API objects they are interested in can move
cluster to a desired state
• Using Deployment as example, duplicated from Part I
Copyright © 2017 Hao Zhang All rights reserved.
Micro-service Choreography
Kubenetes API Server & Etcd
1.POSTv1Deployment
Kubectl
v1Deployment
2. Persist v1Deployment API object
desiredReplica: 3
availableReplica: 0
3.ReflectorupdatesDep
Deployment Controller
WATCH v1Deployment, v1ReplicaSet
4. Deployment reconciliation loop
action: create ReplicaSet
5.POSTv1ReplicaSet
v1ReplicaSet
6. Persist v1ReplicaSet API object
desiredReplica: 3
availableReplica: 0
ReplicaSet Controller
WATCH v1ReplicaSet, v1Pod
7.ReflectorupdatesRS
8. ReplicaSet reconciliation loop
action: create Pod
9.POSTv1Pod*3
Scheduler
WATCH v1Pod,
v1Node
v1Pod *3
10. Persist 3 v1Pod API objects
status: Pending
nodeName: none
11.ReflectorupdatesPod
12. Scheduler assign
node to Pod
13.POSTv1Binding*3
14. Persist 3 v1Binding API objects
name: PodName
targetNodeName: node1
Kubelet-node1
WATCH v1Pod on node1
15.Podspecpushedtokubelet
CRI
16. Pull Image, Run Container,
PLEG, etc. Create v1Event and
update Pod status
17.PATCHv1Pod*3
17-1.PUTv1Event
17. Update 3 v1Pod API objects
status: PodInitializing -> Running
nodeName: node1
v1Event * N
17-1. Several v1Event objects created
e.g. ImagePulled, CreatingContainer,
StartedContainer, etc., controllers, scheduler
can also create events throughout the entire
reaction chain
CNI
18.ReflectorupdatesPods
19. ReplicaSet reconciliation loop
Update RS when ever a Pod enters
“Running” state
20.PATCHv1ReplicaSet
21. Update v1ReplicaSet API object
desiredReplica: 3
availableReplica: 0 -> 3
22.ReflectorupdatesRS
24.PATCHv1Deployment
23. Deployment reconciliation loop
Update Dev status with RS status changes
25. Update v1Deployment API object
desiredReplica: 3
availableReplica: 0 -> 3
v1Binding * 3
Note: this is a rather high-level idea about Kubernetes reaction chain. It hides some details for illustration purpose and is different than actual behavior
Copyright © 2017 Hao Zhang All rights reserved.
Micro-service Choreography
• Choreography - some down sides
• Long reaction chain
• Multiple layers of reconciliation stages can be error prone (i.e. racing conditions,
component down, etc), it has been improved a lot in late Kubernetes versions
• Latency could be long as pipeline needs to persist after every stage, might not fit high
QoS requirements
• Debugging is hard
• i.e. I forget to update image in registry
• GET Deployment — found desired replica is not up
• LIST Pods with label — found image pull backoff in container status
• LIST events with involved object as this Pod — found message “Image does not exist”
• Operations can be heavy if you want to automate failure recovery / detailed error
reporting, unless you cache a lot (Efficient caching is another huge topic…)
Copyright © 2017 Hao Zhang All rights reserved.
Level-Driven Control
• State is considered as “level” while state change resembles “edge”
• Desired state and current state are persisted
• Controller can always re-check object state and make action to
move object towards desired state
• Atomic ListAndWatch (see Part I) assures controllers react based
on state changes pushed from API server (watch) while not miss
any event (list)
More Readings:
✤ Kubernetes: edge vs level triggered logics: https://speakerdeck.com/thockin/edge-vs-level-triggered-logic
Copyright © 2017 Hao Zhang All rights reserved.
Centralized Controller
• Generalized Workload and Centralized Controller
• Kubernetes generalize applications into limited types of semantics
• Job, Deployment, Node, StatefulSet, DaemonSet, …
• Reduced control overhead, i.e., 1 type of controller manages all
instances of workloads in one category
• i.e. Deployment controller will control all deployments in the cluster
• Compared with 1 controller controls 1 deployment instance (O(n) space
complexity), Kubernetes’ control overhead is constant
• Reconciliation control loops: things will ultimately become correct
• Some down sides: Stateful applications are hard to generalize (More
discussions later)
Copyright © 2017 Hao Zhang All rights reserved.
Centralized Controller
• Two opposite design choices from state-of-art cluster management
frameworks
• Apache Hadoop Yarn, Apache Mesos
• User have full freedom to implement their workload controlling logics
• One app controller per app, all controllers talk to master
• Kubernetes
• Pre-defined very generic workload abstractions
• Workloads of same type share 1 controller
• Centralized management of controllers with optimized master access
Scheduling
Limitations and Next Steps
Copyright © 2017 Hao Zhang All rights reserved.
Scheduling
• Default sequential scheduler - Limitation
• Scoring system can be hard to tune
• Sequential scheduling might not be ideal for batch workloads
• Assumes launching more is ALWAYS better than launching less
• I need 3 replicas to form a quorum, then what’s the point of starting 2 upon
insufficient resource?
• No global re-balancing mechanism
• Upon new node join
• Moving things around can reduce node resource pressure as we over-provision
• But this rebalance would make scale-down even harder
• Upon insufficient resource (moving things around might fit)
• Hacks available such as re-scheduling and Kubelet preemption
Copyright © 2017 Hao Zhang All rights reserved.
Scheduling
• Some advanced scheduling problems people are trying to solve:
• If m Pods cannot fit onto n Nodes, how to choose which ones to run
• If not all Pods in an application can get scheduled
• Can we just schedule some of them?
• What if an application needs to create other resources?
• i.e. workflow has a big parallel step which cannot be serialized, if this step
cannot fit in, it’d be better to fail the entire workflow
• Cluster-wide resource isolation mechanism other then ResourceQuota per
namespace
• Bin-pack apps and scale back to release some resources
More Readings:
✤ Resource Sharing / scheduling design spec: https://docs.google.com/document/d/1-H2hnZap7gQivcSU-9j4ZrJ8wE_WwcfOkTeAGjzUyLA
✤ Scheduling Feature Proposals: https://github.com/kubernetes/community/tree/master/contributors/design-proposals/scheduling
Environment Interfaces
CNI, CRI and Flex Volume
Copyright © 2017 Hao Zhang All rights reserved.
Production Interfaces
• Container Runtime Interfaces (CRI)
• Implemented based on Open Container Initiative (OCI)
• Runtime Service for container lifecycle management
• Image Service for image management
• Runtime plugin can be customized
• You can even write your plug-in for VM
Kubelet gRPC
Client
CRI Shim
(Dockerd)
Container
Runtime
(RunC)
Kernel
2 Layers of reconciliation can be
sometimes error prone
More Readings:
✤ Docker reconciliation bug: https://github.com/moby/moby/issues/32413
Copyright © 2017 Hao Zhang All rights reserved.
Production Interfaces
• Container Network Interface (CNI)
• Pluggable interface for cluster networking layer
• Used to setup/teardown Pod network
• Flex Volume (user-defined volumes)
• Interface for data volume plugin
• Need to implement methods such as attach/detach, mount/unmount
• With these CRI, CNI, and Flex Volume, you can make kubelet a
“dumb”, environment agnostic worker, which is extremely flexible
to fit any production environment
Copyright © 2017 Hao Zhang All rights reserved.
Production Interfaces
More Readings:
✤ CRI
✤ Official blog introducing CRI: http://blog.kubernetes.io/2016/12/container-runtime-interface-cri-in-kubernetes.html
✤ CRI Spec: https://github.com/kubernetes/community/blob/master/contributors/devel/container-runtime-interface.md
✤ CRI Container Stats Proposal: https://github.com/kubernetes/community/blob/master/contributors/devel/cri-container-stats.md
✤ Open Container Initiative (OCI): https://www.opencontainers.org
✤ Open Container Initiative (OCI) Runtime/Image spec, and RunC: https://github.com/opencontainers
✤ CNI
✤ Pod Networking Design Proposal: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/network/
networking.md
✤ Kubernetes Networking Plugin Introduction: https://kubernetes.io/docs/concepts/cluster-administration/network-plugins/#cni
✤ Linux CNI Spec: https://github.com/containernetworking/cni/blob/master/SPEC.md#network-configuration
✤ CNCF CNI Project: https://github.com/containernetworking/cni
✤ Kubelet CNI Usage: https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/network/cni/cni.go
✤ Kubenet - Kubernetes’ default network plugin: https://github.com/kubernetes/kubernetes/tree/master/pkg/kubelet/network/kubenet
✤ Volume
✤ Flex Volume: https://github.com/kubernetes/community/blob/master/contributors/devel/flexvolume.md
✤ Kubernetes Volume Documentation: https://kubernetes.io/docs/concepts/storage/volumes/
Workload Abstractions
Pod, Job, Deployment, DaemonSet, StatefulSet - Strength
and limitations
Copyright © 2017 Hao Zhang All rights reserved.
Workload Abstractions
• Pod - Basic Workload Unit in Kubernetes
• An isolated environment with resource constraints
• With docker as run time, it is a group of containers under Infra container
Cgroup
• User can implement their own runtime through CRI
• Pod = atomic scheduling unit, ensures co-location
• Container = single-function building block running in isolated env
• Just modify Pod spec to plug/unplug functionalities, no code change
• Spin up in milliseconds (it’s just a process)
• Containers in Pod can share directory, volume, localhost, etc.
• Crashed container will be restarted on same node
Copyright © 2017 Hao Zhang All rights reserved.
Workload Abstractions
Talk to Kafka: curl 192.168.12.3:12100
Pod
Port: 2121
ZooKeeper
Containers
localhost:2121
PodIP: 192.168.12.3
PortMapping: 9192::12100
Pod Sandbox
Log Collection Container
Port: 80
KubeApiSvr Proxy Container
Port: 9192
Kafka
Container
localhost:80 localhost:80
• Small building block to proxy
Kubernetes API server, with
functionalities such as authentication,
API versioning etc.
• Application container can interact with
Kubernetes API server through
localhost, i.e., watch its ConfigMap
change and react to config changes in
runtime
Zookeeper Data Volume
/mnt/……
Kafka Log Volume
/var/log/……
Zookeeper Log Volume
/var/log/……
Logging agent, perform works such as
log rotation and stream logs for backend
processing. If log collection is switched
to a node daemon, one can easily unplug
this container by modifying Pod spec
A possible set up of Kafka Pod with Docker as runtime…
Copyright © 2017 Hao Zhang All rights reserved.
Workload Abstractions
• Job
• Run to complete (i.e. container exit code is 0)
• Cron job, batch job, etc…
• Deployment
• Maintain replicas of stateless applications (not managing volume)
• High-level interfaces such as rollout, rollback
• DaemonSet
• One replica per node, primary use cases include:
• Log collection daemon (fluentd)
• Node monitoring daemon (node-exporter)
• Cluster storage daemon (gclusterd)
Copyright © 2017 Hao Zhang All rights reserved.
Workload Abstractions
• StatefulSet
• Use case prototypes:
• Quorum with leader election: MongoDB, Zookeeper, Etcd
• De-centralized quorum: Cassandra
• Active-active (multiple masters): Galera
• Besides features of deployment, StatefulSet also provides:
• Every replica has persistent identifier for network (Pod name is formatted
as “podName-{0..N-1}”), which might help identifying peers
• Every replica has persistent storage (data persist even after deletion)
• Supports automatic storage provisioning
• Ordered deploy, shutdown and upgrade (from {0..N-1})
Copyright © 2017 Hao Zhang All rights reserved.
Workload Abstractions
More Readings:
✤ Typically used workloads
✤ Pod: https://kubernetes.io/docs/concepts/workloads/pods/pod/
✤ Deployment: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
✤ Job: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
✤ CronJob: https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
✤ Deamonset: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
✤ Other Kubernetes Concepts (Network/Config/Volume, etc.): https://kubernetes.io/docs/concepts/
✤ Design Specs
✤ Workloads Design Specs (Interfaces, behaviors and updates): https://github.com/kubernetes/community/tree/master/contributors/design-proposals/apps
✤ Autoscaling Design Specs: https://github.com/kubernetes/community/tree/master/contributors/design-proposals/autoscaling
✤ Very good example of running master-slave MySQL example on Kubernetes using StatefulSet: https://kubernetes.io/docs/tasks/run-application/run-replicated-
stateful-application/
Copyright © 2017 Hao Zhang All rights reserved.
Abstraction Limitations
• Some thoughts about Kubernetes workload abstractions
• Pod and Job are perfect for small execution unit
• Deployment can fit most use cases of stateless application
• DaemonSet can fit most use cases of one-per-node applications
• StatefulSet might be useful for small-medium scale peer-to-peer apps
• i.e. Leader election can be done through DNS, and does not need
StatefulSet controller’s help
• Over-generalized StatefulSet controller is application-agnostic and therefore
cannot control complicated application state
• Good thing is that Kubernetes makes it easy enough to define customer
resources and write controllers
Copyright © 2017 Hao Zhang All rights reserved.
Abstraction Limitations
• Complicated Workload Case 1: Workflow
• Stateful and run-to-complete
• There used to be an official DAG workflow implementation, but was finally moved
out from core API
• Even usually defined as DAGs, Workflow can be complicated in many different
ways and is very hard to generalize as core API
• i.e. A deep-learning workflow can be totally different from a DevOps workflow
• It’s not always just DAG, it can also contain FOR-loops, If-Else, etc
• Impl Discussions: https://github.com/kubernetes/kubernetes/pull/17787
• Design Spec: https://github.com/kubernetes/kubernetes/pull/18827
• Implementation: https://github.com/kubernetes/kubernetes/pull/24781
• Discussion to Remove: https://github.com/kubernetes/kubernetes/issues/25067
Copyright © 2017 Hao Zhang All rights reserved.
Abstraction Limitations
• Complicated Workload Case 2: Semi-stateful Apps
• DevOps use case: a pool of workers working on building docker images
• Need a persistent volume as graph storage to cache docker image
layers (if layer is not updated, don’t need to pull from remote)
• Data (image layers) can be huge so not a good idea to use node’s root
storage or memory
• Losing data is fine as this is just a cache
• But you can also say, it’s persisting data so its stateful…
• StatefulSet is too heavy but ReplicationSet does not support dynamically
provisioned data volumes
Copyright © 2017 Hao Zhang All rights reserved.
Abstraction Limitations
• Complicated Workload Case 3: Sharded DB with Master/Slave of Each Shard
• Master RW, Slave RO
• Master usually handle more workload
• Need global view to balance load among multiple such applications
• Node will suffer if too many replica on it become master
• StatefulSet is NOT application-aware so additional work is needed
• When a particular shard has request spike, what’s better?
• Possible action 1: Scale horizontally and re-shard
• Horizontal-scaler might help
• Overhead in data migration and re-sharding
• Scale back is also challenging
• Possible action 2: Scale vertically (up to node capacity) and evict
• Might remove less important Pods from node and they can hopefully get re-scheduled
Conclusion
What makes Kubernetes successful
Copyright © 2017 Hao Zhang All rights reserved.
Take-aways from Kube’s Design
• API Server and Versioned API Groups
• Easy upgrade / backward compatibility
• API server performs conversion between client and metadata store
• Protect cluster, every where
• Throttle, resource quota limit @ API server
• Important production question: Given a pre-provisioned metadata store,
what is a reasonable amount of mutating / non-mutating operations I
can smoothly handle in parallel based on my SLA?
• QPS, exponential backoff with jittered retry @ client
Copyright © 2017 Hao Zhang All rights reserved.
Take-aways from Kube’s Design
• Optimize Etcd READs
• Cache @ API server - serve all READs from memory
• It’s just meta data, size can be reasonable for memory
• Shared Informer - aggregate READs from all controllers
• Micro-service choreography
• Everyone focus on their own API objects and different pipelines are formed
automatically
• Atomic commits on single API objects, reconciliation loops will finally make
things right
• Level-triggered control
• Controller always go back and assert state, so nothing can be missing
Copyright © 2017 Hao Zhang All rights reserved.
Why Cluster Management
• As tedious as endless on-calls
• As sexy as and as important as an orchestrator that
• Increases resource utilization and save money
• Automates resource provisioning / scheduling / scaling (both up and
down) / failure detection and recovery
• Provides methods to debug from outside the cluster
• i.e. execute debug commands in your container
• Plugs solutions such as Logging, Monitoring, Dashboard, Security,
Admission Control, etc.
• Release labor for feature development
Copyright © 2017 Hao Zhang All rights reserved.
Why is Kubernetes Successful
• Great abstraction for plug-and-play simple workload
• Writing control logics can somewhat be a burden, especially for startups,
and Kubernetes made it much easier
• Environment-agnostic interfaces
• CRI, CNI, Flex Volume makes it possible to handle hybrid environment
• Native support for popular public cloud
• Out-of-box resource provisioning and management
• Plug-and-play cluster management solutions from community
• Cluster autoscaler, logging, monitoring, admission, etc.
• Just run `kubectl create` you will have your app
Copyright © 2017 Hao Zhang All rights reserved.
Borg, Omega, Kubernetes
• Borg @ Google: https://research.google.com/pubs/pub43438.html
• Omega @ Google: https://research.google.com/pubs/
pub41684.html
• From Borg, Omega to Kubernetes: http://queue.acm.org/detail.cfm?
id=2898444

More Related Content

What's hot

Kubernetes Workshop
Kubernetes WorkshopKubernetes Workshop
Kubernetes Workshoploodse
 
Achieving CI/CD with Kubernetes
Achieving CI/CD with KubernetesAchieving CI/CD with Kubernetes
Achieving CI/CD with KubernetesRamit Surana
 
Deploying your first application with Kubernetes
Deploying your first application with KubernetesDeploying your first application with Kubernetes
Deploying your first application with KubernetesOVHcloud
 
(Draft) Kubernetes - A Comprehensive Overview
(Draft) Kubernetes - A Comprehensive Overview(Draft) Kubernetes - A Comprehensive Overview
(Draft) Kubernetes - A Comprehensive OverviewBob Killen
 
Kubernetes internals (Kubernetes 해부하기)
Kubernetes internals (Kubernetes 해부하기)Kubernetes internals (Kubernetes 해부하기)
Kubernetes internals (Kubernetes 해부하기)DongHyeon Kim
 
OpenShift Container Platform 4.12 Release Notes
OpenShift Container Platform 4.12 Release NotesOpenShift Container Platform 4.12 Release Notes
OpenShift Container Platform 4.12 Release NotesGerryJamisola1
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes IntroductionPeng Xiao
 
IT Automation with Ansible
IT Automation with AnsibleIT Automation with Ansible
IT Automation with AnsibleRayed Alrashed
 
Dockers and kubernetes
Dockers and kubernetesDockers and kubernetes
Dockers and kubernetesDr Ganesh Iyer
 
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1Etsuji Nakai
 
eBPF - Observability In Deep
eBPF - Observability In DeepeBPF - Observability In Deep
eBPF - Observability In DeepMydbops
 
Getting started with Ansible
Getting started with AnsibleGetting started with Ansible
Getting started with AnsibleIvan Serdyuk
 
Kubernetes
KubernetesKubernetes
Kuberneteserialc_w
 
Kubernetes - introduction
Kubernetes - introductionKubernetes - introduction
Kubernetes - introductionSparkbit
 
DevJam 2019 - Introduction to Kubernetes
DevJam 2019 - Introduction to KubernetesDevJam 2019 - Introduction to Kubernetes
DevJam 2019 - Introduction to KubernetesRonny Trommer
 

What's hot (20)

Kubernetes 101
Kubernetes 101Kubernetes 101
Kubernetes 101
 
Kubernetes Workshop
Kubernetes WorkshopKubernetes Workshop
Kubernetes Workshop
 
Linux introduction
Linux introductionLinux introduction
Linux introduction
 
Achieving CI/CD with Kubernetes
Achieving CI/CD with KubernetesAchieving CI/CD with Kubernetes
Achieving CI/CD with Kubernetes
 
Deploying your first application with Kubernetes
Deploying your first application with KubernetesDeploying your first application with Kubernetes
Deploying your first application with Kubernetes
 
(Draft) Kubernetes - A Comprehensive Overview
(Draft) Kubernetes - A Comprehensive Overview(Draft) Kubernetes - A Comprehensive Overview
(Draft) Kubernetes - A Comprehensive Overview
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
 
Kubernetes internals (Kubernetes 해부하기)
Kubernetes internals (Kubernetes 해부하기)Kubernetes internals (Kubernetes 해부하기)
Kubernetes internals (Kubernetes 해부하기)
 
OpenShift Container Platform 4.12 Release Notes
OpenShift Container Platform 4.12 Release NotesOpenShift Container Platform 4.12 Release Notes
OpenShift Container Platform 4.12 Release Notes
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
 
IT Automation with Ansible
IT Automation with AnsibleIT Automation with Ansible
IT Automation with Ansible
 
Dockers and kubernetes
Dockers and kubernetesDockers and kubernetes
Dockers and kubernetes
 
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
 
eBPF - Observability In Deep
eBPF - Observability In DeepeBPF - Observability In Deep
eBPF - Observability In Deep
 
Getting started with Ansible
Getting started with AnsibleGetting started with Ansible
Getting started with Ansible
 
Ansible
AnsibleAnsible
Ansible
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Kubernetes - introduction
Kubernetes - introductionKubernetes - introduction
Kubernetes - introduction
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
 
DevJam 2019 - Introduction to Kubernetes
DevJam 2019 - Introduction to KubernetesDevJam 2019 - Introduction to Kubernetes
DevJam 2019 - Introduction to Kubernetes
 

Viewers also liked

Large Scale Kubernetes on AWS at Europe's Leading Online Fashion Platform - A...
Large Scale Kubernetes on AWS at Europe's Leading Online Fashion Platform - A...Large Scale Kubernetes on AWS at Europe's Leading Online Fashion Platform - A...
Large Scale Kubernetes on AWS at Europe's Leading Online Fashion Platform - A...Henning Jacobs
 
KELK Stack on AWS
KELK Stack on AWSKELK Stack on AWS
KELK Stack on AWSSteamhaus
 
Container Days Boston - Kubernetes in production
Container Days Boston - Kubernetes in productionContainer Days Boston - Kubernetes in production
Container Days Boston - Kubernetes in productionMike Splain
 
Kubernetes on AWS
Kubernetes on AWSKubernetes on AWS
Kubernetes on AWSGrant Ellis
 
From dev to prod: Kubernetes on AWS (short ver.)
From dev to prod: Kubernetes on AWS (short ver.)From dev to prod: Kubernetes on AWS (short ver.)
From dev to prod: Kubernetes on AWS (short ver.)佑介 九岡
 
Running Production-Grade Kubernetes on AWS
Running Production-Grade Kubernetes on AWSRunning Production-Grade Kubernetes on AWS
Running Production-Grade Kubernetes on AWSDoiT International
 
Cloud Solution Day 2016: Service Mesh for Kubernetes
Cloud Solution Day 2016: Service Mesh for KubernetesCloud Solution Day 2016: Service Mesh for Kubernetes
Cloud Solution Day 2016: Service Mesh for KubernetesAWS Vietnam Community
 
Webcast - Making kubernetes production ready
Webcast - Making kubernetes production readyWebcast - Making kubernetes production ready
Webcast - Making kubernetes production readyApplatix
 
Kubernetes on AWS at Europe's Leading Online Fashion Platform
Kubernetes on AWS at Europe's Leading Online Fashion PlatformKubernetes on AWS at Europe's Leading Online Fashion Platform
Kubernetes on AWS at Europe's Leading Online Fashion PlatformHenning Jacobs
 
Kubernetes networking in AWS
Kubernetes networking in AWSKubernetes networking in AWS
Kubernetes networking in AWSZvika Gazit
 
O'Reilly Software Architecture Conference London 2017: Building Resilient Mic...
O'Reilly Software Architecture Conference London 2017: Building Resilient Mic...O'Reilly Software Architecture Conference London 2017: Building Resilient Mic...
O'Reilly Software Architecture Conference London 2017: Building Resilient Mic...Ambassador Labs
 
Beyond Ingresses - Better Traffic Management in Kubernetes
Beyond Ingresses - Better Traffic Management in KubernetesBeyond Ingresses - Better Traffic Management in Kubernetes
Beyond Ingresses - Better Traffic Management in KubernetesMark McBride
 

Viewers also liked (12)

Large Scale Kubernetes on AWS at Europe's Leading Online Fashion Platform - A...
Large Scale Kubernetes on AWS at Europe's Leading Online Fashion Platform - A...Large Scale Kubernetes on AWS at Europe's Leading Online Fashion Platform - A...
Large Scale Kubernetes on AWS at Europe's Leading Online Fashion Platform - A...
 
KELK Stack on AWS
KELK Stack on AWSKELK Stack on AWS
KELK Stack on AWS
 
Container Days Boston - Kubernetes in production
Container Days Boston - Kubernetes in productionContainer Days Boston - Kubernetes in production
Container Days Boston - Kubernetes in production
 
Kubernetes on AWS
Kubernetes on AWSKubernetes on AWS
Kubernetes on AWS
 
From dev to prod: Kubernetes on AWS (short ver.)
From dev to prod: Kubernetes on AWS (short ver.)From dev to prod: Kubernetes on AWS (short ver.)
From dev to prod: Kubernetes on AWS (short ver.)
 
Running Production-Grade Kubernetes on AWS
Running Production-Grade Kubernetes on AWSRunning Production-Grade Kubernetes on AWS
Running Production-Grade Kubernetes on AWS
 
Cloud Solution Day 2016: Service Mesh for Kubernetes
Cloud Solution Day 2016: Service Mesh for KubernetesCloud Solution Day 2016: Service Mesh for Kubernetes
Cloud Solution Day 2016: Service Mesh for Kubernetes
 
Webcast - Making kubernetes production ready
Webcast - Making kubernetes production readyWebcast - Making kubernetes production ready
Webcast - Making kubernetes production ready
 
Kubernetes on AWS at Europe's Leading Online Fashion Platform
Kubernetes on AWS at Europe's Leading Online Fashion PlatformKubernetes on AWS at Europe's Leading Online Fashion Platform
Kubernetes on AWS at Europe's Leading Online Fashion Platform
 
Kubernetes networking in AWS
Kubernetes networking in AWSKubernetes networking in AWS
Kubernetes networking in AWS
 
O'Reilly Software Architecture Conference London 2017: Building Resilient Mic...
O'Reilly Software Architecture Conference London 2017: Building Resilient Mic...O'Reilly Software Architecture Conference London 2017: Building Resilient Mic...
O'Reilly Software Architecture Conference London 2017: Building Resilient Mic...
 
Beyond Ingresses - Better Traffic Management in Kubernetes
Beyond Ingresses - Better Traffic Management in KubernetesBeyond Ingresses - Better Traffic Management in Kubernetes
Beyond Ingresses - Better Traffic Management in Kubernetes
 

Similar to Kubernetes Architecture - beyond a black box - Part 2

Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetesGabriel Carro
 
Kubernetes intro public - kubernetes meetup 4-21-2015
Kubernetes intro   public - kubernetes meetup 4-21-2015Kubernetes intro   public - kubernetes meetup 4-21-2015
Kubernetes intro public - kubernetes meetup 4-21-2015Rohit Jnagal
 
Kubernetes intro public - kubernetes user group 4-21-2015
Kubernetes intro   public - kubernetes user group 4-21-2015Kubernetes intro   public - kubernetes user group 4-21-2015
Kubernetes intro public - kubernetes user group 4-21-2015reallavalamp
 
Cluster management with Kubernetes
Cluster management with KubernetesCluster management with Kubernetes
Cluster management with KubernetesSatnam Singh
 
Kubernetes 101
Kubernetes 101Kubernetes 101
Kubernetes 101Huy Vo
 
Evolving for Kubernetes
Evolving for KubernetesEvolving for Kubernetes
Evolving for KubernetesChris McEniry
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 introTerry Cho
 
Open shift and docker - october,2014
Open shift and docker - october,2014Open shift and docker - october,2014
Open shift and docker - october,2014Hojoong Kim
 
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetesRishabh Indoria
 
Kubernetes deep dive - - Huawei 2015-10
Kubernetes deep dive - - Huawei 2015-10Kubernetes deep dive - - Huawei 2015-10
Kubernetes deep dive - - Huawei 2015-10Vishnu Kannan
 
Docker kubernetes fundamental(pod_service)_190307
Docker kubernetes fundamental(pod_service)_190307Docker kubernetes fundamental(pod_service)_190307
Docker kubernetes fundamental(pod_service)_190307Inhye Park
 
Introduction to Kubernetes
Introduction to KubernetesIntroduction to Kubernetes
Introduction to KubernetesVishal Biyani
 
Interop 2018 - Understanding Kubernetes - Brian Gracely
Interop 2018 - Understanding Kubernetes - Brian GracelyInterop 2018 - Understanding Kubernetes - Brian Gracely
Interop 2018 - Understanding Kubernetes - Brian GracelyBrian Gracely
 
Database as a Service (DBaaS) on Kubernetes
Database as a Service (DBaaS) on KubernetesDatabase as a Service (DBaaS) on Kubernetes
Database as a Service (DBaaS) on KubernetesObjectRocket
 
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMwareVMUG IT
 
10 tips for Cloud Native Security
10 tips for Cloud Native Security10 tips for Cloud Native Security
10 tips for Cloud Native SecurityKarthik Gaekwad
 
Stateful, Stateless and Serverless - Running Apache Kafka® on Kubernetes
Stateful, Stateless and Serverless - Running Apache Kafka® on KubernetesStateful, Stateless and Serverless - Running Apache Kafka® on Kubernetes
Stateful, Stateless and Serverless - Running Apache Kafka® on Kubernetesconfluent
 
Moving Applications into Azure Kubernetes
Moving Applications into Azure KubernetesMoving Applications into Azure Kubernetes
Moving Applications into Azure KubernetesHussein Salman
 

Similar to Kubernetes Architecture - beyond a black box - Part 2 (20)

Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetes
 
Kubernetes intro public - kubernetes meetup 4-21-2015
Kubernetes intro   public - kubernetes meetup 4-21-2015Kubernetes intro   public - kubernetes meetup 4-21-2015
Kubernetes intro public - kubernetes meetup 4-21-2015
 
Kubernetes intro public - kubernetes user group 4-21-2015
Kubernetes intro   public - kubernetes user group 4-21-2015Kubernetes intro   public - kubernetes user group 4-21-2015
Kubernetes intro public - kubernetes user group 4-21-2015
 
Cluster management with Kubernetes
Cluster management with KubernetesCluster management with Kubernetes
Cluster management with Kubernetes
 
Kubernetes 101
Kubernetes 101Kubernetes 101
Kubernetes 101
 
Evolving for Kubernetes
Evolving for KubernetesEvolving for Kubernetes
Evolving for Kubernetes
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 intro
 
Open shift and docker - october,2014
Open shift and docker - october,2014Open shift and docker - october,2014
Open shift and docker - october,2014
 
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetes
 
Kubernetes deep dive - - Huawei 2015-10
Kubernetes deep dive - - Huawei 2015-10Kubernetes deep dive - - Huawei 2015-10
Kubernetes deep dive - - Huawei 2015-10
 
Docker kubernetes fundamental(pod_service)_190307
Docker kubernetes fundamental(pod_service)_190307Docker kubernetes fundamental(pod_service)_190307
Docker kubernetes fundamental(pod_service)_190307
 
Introduction to Kubernetes
Introduction to KubernetesIntroduction to Kubernetes
Introduction to Kubernetes
 
Interop 2018 - Understanding Kubernetes - Brian Gracely
Interop 2018 - Understanding Kubernetes - Brian GracelyInterop 2018 - Understanding Kubernetes - Brian Gracely
Interop 2018 - Understanding Kubernetes - Brian Gracely
 
Database as a Service (DBaaS) on Kubernetes
Database as a Service (DBaaS) on KubernetesDatabase as a Service (DBaaS) on Kubernetes
Database as a Service (DBaaS) on Kubernetes
 
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
 
Advanced Container Scheduling
Advanced Container SchedulingAdvanced Container Scheduling
Advanced Container Scheduling
 
Intro to kubernetes
Intro to kubernetesIntro to kubernetes
Intro to kubernetes
 
10 tips for Cloud Native Security
10 tips for Cloud Native Security10 tips for Cloud Native Security
10 tips for Cloud Native Security
 
Stateful, Stateless and Serverless - Running Apache Kafka® on Kubernetes
Stateful, Stateless and Serverless - Running Apache Kafka® on KubernetesStateful, Stateless and Serverless - Running Apache Kafka® on Kubernetes
Stateful, Stateless and Serverless - Running Apache Kafka® on Kubernetes
 
Moving Applications into Azure Kubernetes
Moving Applications into Azure KubernetesMoving Applications into Azure Kubernetes
Moving Applications into Azure Kubernetes
 

Recently uploaded

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 

Recently uploaded (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 

Kubernetes Architecture - beyond a black box - Part 2

  • 1. Kubernetes - Beyond a Black Box A humble peek into one level below your running application in production Part II
  • 2. Copyright © 2017 Hao Zhang All rights reserved. About The Author • Hao (Harry) Zhang • Currently: Software Engineer, LinkedIn, Team Helix @ Data Infrastructure • Previously: Member of Technical Staff, Applatix, Worked with Kubernetes, Docker and AWS • Previous blog series: “Making Kubernetes Production Ready” • Part 1, Part 2, Part 3 • Or just Google “Kubernetes production”, “Kubernetes in production”, or similar • Connect with me on LinkedIn
  • 3. Copyright © 2017 Hao Zhang All rights reserved. Previously in Part I • A high level idea about what is Kubernetes • Components, functionalities, and design choice • API Server • Controller Manager • Scheduler • Kubelet • Kube-proxy • Put it together, what happens when you do `kubectl create` • SlideShare link for Part I
  • 4. Copyright © 2017 Hao Zhang All rights reserved. Outline - Part II • An analysis of controlling framework design philosophy • Choreography, not Orchestration • Level Driven, not Edge Triggered • Generalized Workload and Centralized Controller • Scheduling - Limitation and next steps • Interfaces for production environments • High level workload abstractions • Strength and limitations • Conclusion
  • 7. Copyright © 2017 Hao Zhang All rights reserved. Micro-service Choreography • Orchestration: one gigantic controller trying to make everything correct at the same time • Choreography: Desired state in cluster is achieved by collaborations of separate autonomous entities reacting on changes of one or more API object(s) they are interested in • Separation of concern • More flexibility to extend different types of semantics (CRD / TPR are great examples) • Develop a controller is easy! More Readings: ✤ Third Party Resource (TPR): https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-third-party-resource/ ✤ Customer Resource Definition (CRD): https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/ ✤ TPR Design Spec: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/extending-api.md
  • 8. Copyright © 2017 Hao Zhang All rights reserved. Micro-service Choreography • Separation of Concern via Micro-service Choreography (Deployment example) • ReplicaSet (RS) ensures given # of Pod is always running • Create / Delete Pod API object if existing number is not matching spec • Scheduler knows where to put it; Kubelet knows Pod life cycle details • Deployment (DEP) provides higher level of semantics • Scale: tell RS to change # of Pods by modifying RS spec, RS knows what to do • Upgrade: delete current RS, create new RS with new Pod spec • Rolling-Upgrade: create new RS with new Pod spec, scale down old RS by 1, scale out new RS by 1, repeat it until no old Pod remains (Same for roll back) • HorizontalPodAutoscaler (HPA) manipulates deployment • It polls Pod metrics (from a source such as Heapster or Prometheus), compare it with user defined metric specs, and make scaling decision • Tell DEP to scale up/down by modifying DEP spec, DEP controller knows what to do
  • 9. Copyright © 2017 Hao Zhang All rights reserved. Micro-service Choreography • See Next Slide: An illustration about how different autonomous entities reacting on API objects they are interested in can move cluster to a desired state • Using Deployment as example, duplicated from Part I
  • 10. Copyright © 2017 Hao Zhang All rights reserved. Micro-service Choreography Kubenetes API Server & Etcd 1.POSTv1Deployment Kubectl v1Deployment 2. Persist v1Deployment API object desiredReplica: 3 availableReplica: 0 3.ReflectorupdatesDep Deployment Controller WATCH v1Deployment, v1ReplicaSet 4. Deployment reconciliation loop action: create ReplicaSet 5.POSTv1ReplicaSet v1ReplicaSet 6. Persist v1ReplicaSet API object desiredReplica: 3 availableReplica: 0 ReplicaSet Controller WATCH v1ReplicaSet, v1Pod 7.ReflectorupdatesRS 8. ReplicaSet reconciliation loop action: create Pod 9.POSTv1Pod*3 Scheduler WATCH v1Pod, v1Node v1Pod *3 10. Persist 3 v1Pod API objects status: Pending nodeName: none 11.ReflectorupdatesPod 12. Scheduler assign node to Pod 13.POSTv1Binding*3 14. Persist 3 v1Binding API objects name: PodName targetNodeName: node1 Kubelet-node1 WATCH v1Pod on node1 15.Podspecpushedtokubelet CRI 16. Pull Image, Run Container, PLEG, etc. Create v1Event and update Pod status 17.PATCHv1Pod*3 17-1.PUTv1Event 17. Update 3 v1Pod API objects status: PodInitializing -> Running nodeName: node1 v1Event * N 17-1. Several v1Event objects created e.g. ImagePulled, CreatingContainer, StartedContainer, etc., controllers, scheduler can also create events throughout the entire reaction chain CNI 18.ReflectorupdatesPods 19. ReplicaSet reconciliation loop Update RS when ever a Pod enters “Running” state 20.PATCHv1ReplicaSet 21. Update v1ReplicaSet API object desiredReplica: 3 availableReplica: 0 -> 3 22.ReflectorupdatesRS 24.PATCHv1Deployment 23. Deployment reconciliation loop Update Dev status with RS status changes 25. Update v1Deployment API object desiredReplica: 3 availableReplica: 0 -> 3 v1Binding * 3 Note: this is a rather high-level idea about Kubernetes reaction chain. It hides some details for illustration purpose and is different than actual behavior
  • 11. Copyright © 2017 Hao Zhang All rights reserved. Micro-service Choreography • Choreography - some down sides • Long reaction chain • Multiple layers of reconciliation stages can be error prone (i.e. racing conditions, component down, etc), it has been improved a lot in late Kubernetes versions • Latency could be long as pipeline needs to persist after every stage, might not fit high QoS requirements • Debugging is hard • i.e. I forget to update image in registry • GET Deployment — found desired replica is not up • LIST Pods with label — found image pull backoff in container status • LIST events with involved object as this Pod — found message “Image does not exist” • Operations can be heavy if you want to automate failure recovery / detailed error reporting, unless you cache a lot (Efficient caching is another huge topic…)
  • 12. Copyright © 2017 Hao Zhang All rights reserved. Level-Driven Control • State is considered as “level” while state change resembles “edge” • Desired state and current state are persisted • Controller can always re-check object state and make action to move object towards desired state • Atomic ListAndWatch (see Part I) assures controllers react based on state changes pushed from API server (watch) while not miss any event (list) More Readings: ✤ Kubernetes: edge vs level triggered logics: https://speakerdeck.com/thockin/edge-vs-level-triggered-logic
  • 13. Copyright © 2017 Hao Zhang All rights reserved. Centralized Controller • Generalized Workload and Centralized Controller • Kubernetes generalize applications into limited types of semantics • Job, Deployment, Node, StatefulSet, DaemonSet, … • Reduced control overhead, i.e., 1 type of controller manages all instances of workloads in one category • i.e. Deployment controller will control all deployments in the cluster • Compared with 1 controller controls 1 deployment instance (O(n) space complexity), Kubernetes’ control overhead is constant • Reconciliation control loops: things will ultimately become correct • Some down sides: Stateful applications are hard to generalize (More discussions later)
  • 14. Copyright © 2017 Hao Zhang All rights reserved. Centralized Controller • Two opposite design choices from state-of-art cluster management frameworks • Apache Hadoop Yarn, Apache Mesos • User have full freedom to implement their workload controlling logics • One app controller per app, all controllers talk to master • Kubernetes • Pre-defined very generic workload abstractions • Workloads of same type share 1 controller • Centralized management of controllers with optimized master access
  • 16. Copyright © 2017 Hao Zhang All rights reserved. Scheduling • Default sequential scheduler - Limitation • Scoring system can be hard to tune • Sequential scheduling might not be ideal for batch workloads • Assumes launching more is ALWAYS better than launching less • I need 3 replicas to form a quorum, then what’s the point of starting 2 upon insufficient resource? • No global re-balancing mechanism • Upon new node join • Moving things around can reduce node resource pressure as we over-provision • But this rebalance would make scale-down even harder • Upon insufficient resource (moving things around might fit) • Hacks available such as re-scheduling and Kubelet preemption
  • 17. Copyright © 2017 Hao Zhang All rights reserved. Scheduling • Some advanced scheduling problems people are trying to solve: • If m Pods cannot fit onto n Nodes, how to choose which ones to run • If not all Pods in an application can get scheduled • Can we just schedule some of them? • What if an application needs to create other resources? • i.e. workflow has a big parallel step which cannot be serialized, if this step cannot fit in, it’d be better to fail the entire workflow • Cluster-wide resource isolation mechanism other then ResourceQuota per namespace • Bin-pack apps and scale back to release some resources More Readings: ✤ Resource Sharing / scheduling design spec: https://docs.google.com/document/d/1-H2hnZap7gQivcSU-9j4ZrJ8wE_WwcfOkTeAGjzUyLA ✤ Scheduling Feature Proposals: https://github.com/kubernetes/community/tree/master/contributors/design-proposals/scheduling
  • 19. Copyright © 2017 Hao Zhang All rights reserved. Production Interfaces • Container Runtime Interfaces (CRI) • Implemented based on Open Container Initiative (OCI) • Runtime Service for container lifecycle management • Image Service for image management • Runtime plugin can be customized • You can even write your plug-in for VM Kubelet gRPC Client CRI Shim (Dockerd) Container Runtime (RunC) Kernel 2 Layers of reconciliation can be sometimes error prone More Readings: ✤ Docker reconciliation bug: https://github.com/moby/moby/issues/32413
  • 20. Copyright © 2017 Hao Zhang All rights reserved. Production Interfaces • Container Network Interface (CNI) • Pluggable interface for cluster networking layer • Used to setup/teardown Pod network • Flex Volume (user-defined volumes) • Interface for data volume plugin • Need to implement methods such as attach/detach, mount/unmount • With these CRI, CNI, and Flex Volume, you can make kubelet a “dumb”, environment agnostic worker, which is extremely flexible to fit any production environment
  • 21. Copyright © 2017 Hao Zhang All rights reserved. Production Interfaces More Readings: ✤ CRI ✤ Official blog introducing CRI: http://blog.kubernetes.io/2016/12/container-runtime-interface-cri-in-kubernetes.html ✤ CRI Spec: https://github.com/kubernetes/community/blob/master/contributors/devel/container-runtime-interface.md ✤ CRI Container Stats Proposal: https://github.com/kubernetes/community/blob/master/contributors/devel/cri-container-stats.md ✤ Open Container Initiative (OCI): https://www.opencontainers.org ✤ Open Container Initiative (OCI) Runtime/Image spec, and RunC: https://github.com/opencontainers ✤ CNI ✤ Pod Networking Design Proposal: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/network/ networking.md ✤ Kubernetes Networking Plugin Introduction: https://kubernetes.io/docs/concepts/cluster-administration/network-plugins/#cni ✤ Linux CNI Spec: https://github.com/containernetworking/cni/blob/master/SPEC.md#network-configuration ✤ CNCF CNI Project: https://github.com/containernetworking/cni ✤ Kubelet CNI Usage: https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/network/cni/cni.go ✤ Kubenet - Kubernetes’ default network plugin: https://github.com/kubernetes/kubernetes/tree/master/pkg/kubelet/network/kubenet ✤ Volume ✤ Flex Volume: https://github.com/kubernetes/community/blob/master/contributors/devel/flexvolume.md ✤ Kubernetes Volume Documentation: https://kubernetes.io/docs/concepts/storage/volumes/
  • 22. Workload Abstractions Pod, Job, Deployment, DaemonSet, StatefulSet - Strength and limitations
  • 23. Copyright © 2017 Hao Zhang All rights reserved. Workload Abstractions • Pod - Basic Workload Unit in Kubernetes • An isolated environment with resource constraints • With docker as run time, it is a group of containers under Infra container Cgroup • User can implement their own runtime through CRI • Pod = atomic scheduling unit, ensures co-location • Container = single-function building block running in isolated env • Just modify Pod spec to plug/unplug functionalities, no code change • Spin up in milliseconds (it’s just a process) • Containers in Pod can share directory, volume, localhost, etc. • Crashed container will be restarted on same node
  • 24. Copyright © 2017 Hao Zhang All rights reserved. Workload Abstractions Talk to Kafka: curl 192.168.12.3:12100 Pod Port: 2121 ZooKeeper Containers localhost:2121 PodIP: 192.168.12.3 PortMapping: 9192::12100 Pod Sandbox Log Collection Container Port: 80 KubeApiSvr Proxy Container Port: 9192 Kafka Container localhost:80 localhost:80 • Small building block to proxy Kubernetes API server, with functionalities such as authentication, API versioning etc. • Application container can interact with Kubernetes API server through localhost, i.e., watch its ConfigMap change and react to config changes in runtime Zookeeper Data Volume /mnt/…… Kafka Log Volume /var/log/…… Zookeeper Log Volume /var/log/…… Logging agent, perform works such as log rotation and stream logs for backend processing. If log collection is switched to a node daemon, one can easily unplug this container by modifying Pod spec A possible set up of Kafka Pod with Docker as runtime…
  • 25. Copyright © 2017 Hao Zhang All rights reserved. Workload Abstractions • Job • Run to complete (i.e. container exit code is 0) • Cron job, batch job, etc… • Deployment • Maintain replicas of stateless applications (not managing volume) • High-level interfaces such as rollout, rollback • DaemonSet • One replica per node, primary use cases include: • Log collection daemon (fluentd) • Node monitoring daemon (node-exporter) • Cluster storage daemon (gclusterd)
  • 26. Copyright © 2017 Hao Zhang All rights reserved. Workload Abstractions • StatefulSet • Use case prototypes: • Quorum with leader election: MongoDB, Zookeeper, Etcd • De-centralized quorum: Cassandra • Active-active (multiple masters): Galera • Besides features of deployment, StatefulSet also provides: • Every replica has persistent identifier for network (Pod name is formatted as “podName-{0..N-1}”), which might help identifying peers • Every replica has persistent storage (data persist even after deletion) • Supports automatic storage provisioning • Ordered deploy, shutdown and upgrade (from {0..N-1})
  • 27. Copyright © 2017 Hao Zhang All rights reserved. Workload Abstractions More Readings: ✤ Typically used workloads ✤ Pod: https://kubernetes.io/docs/concepts/workloads/pods/pod/ ✤ Deployment: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/ ✤ Job: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/ ✤ CronJob: https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/ ✤ Deamonset: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/ ✤ Other Kubernetes Concepts (Network/Config/Volume, etc.): https://kubernetes.io/docs/concepts/ ✤ Design Specs ✤ Workloads Design Specs (Interfaces, behaviors and updates): https://github.com/kubernetes/community/tree/master/contributors/design-proposals/apps ✤ Autoscaling Design Specs: https://github.com/kubernetes/community/tree/master/contributors/design-proposals/autoscaling ✤ Very good example of running master-slave MySQL example on Kubernetes using StatefulSet: https://kubernetes.io/docs/tasks/run-application/run-replicated- stateful-application/
  • 28. Copyright © 2017 Hao Zhang All rights reserved. Abstraction Limitations • Some thoughts about Kubernetes workload abstractions • Pod and Job are perfect for small execution unit • Deployment can fit most use cases of stateless application • DaemonSet can fit most use cases of one-per-node applications • StatefulSet might be useful for small-medium scale peer-to-peer apps • i.e. Leader election can be done through DNS, and does not need StatefulSet controller’s help • Over-generalized StatefulSet controller is application-agnostic and therefore cannot control complicated application state • Good thing is that Kubernetes makes it easy enough to define customer resources and write controllers
  • 29. Copyright © 2017 Hao Zhang All rights reserved. Abstraction Limitations • Complicated Workload Case 1: Workflow • Stateful and run-to-complete • There used to be an official DAG workflow implementation, but was finally moved out from core API • Even usually defined as DAGs, Workflow can be complicated in many different ways and is very hard to generalize as core API • i.e. A deep-learning workflow can be totally different from a DevOps workflow • It’s not always just DAG, it can also contain FOR-loops, If-Else, etc • Impl Discussions: https://github.com/kubernetes/kubernetes/pull/17787 • Design Spec: https://github.com/kubernetes/kubernetes/pull/18827 • Implementation: https://github.com/kubernetes/kubernetes/pull/24781 • Discussion to Remove: https://github.com/kubernetes/kubernetes/issues/25067
  • 30. Copyright © 2017 Hao Zhang All rights reserved. Abstraction Limitations • Complicated Workload Case 2: Semi-stateful Apps • DevOps use case: a pool of workers working on building docker images • Need a persistent volume as graph storage to cache docker image layers (if layer is not updated, don’t need to pull from remote) • Data (image layers) can be huge so not a good idea to use node’s root storage or memory • Losing data is fine as this is just a cache • But you can also say, it’s persisting data so its stateful… • StatefulSet is too heavy but ReplicationSet does not support dynamically provisioned data volumes
  • 31. Copyright © 2017 Hao Zhang All rights reserved. Abstraction Limitations • Complicated Workload Case 3: Sharded DB with Master/Slave of Each Shard • Master RW, Slave RO • Master usually handle more workload • Need global view to balance load among multiple such applications • Node will suffer if too many replica on it become master • StatefulSet is NOT application-aware so additional work is needed • When a particular shard has request spike, what’s better? • Possible action 1: Scale horizontally and re-shard • Horizontal-scaler might help • Overhead in data migration and re-sharding • Scale back is also challenging • Possible action 2: Scale vertically (up to node capacity) and evict • Might remove less important Pods from node and they can hopefully get re-scheduled
  • 33. Copyright © 2017 Hao Zhang All rights reserved. Take-aways from Kube’s Design • API Server and Versioned API Groups • Easy upgrade / backward compatibility • API server performs conversion between client and metadata store • Protect cluster, every where • Throttle, resource quota limit @ API server • Important production question: Given a pre-provisioned metadata store, what is a reasonable amount of mutating / non-mutating operations I can smoothly handle in parallel based on my SLA? • QPS, exponential backoff with jittered retry @ client
  • 34. Copyright © 2017 Hao Zhang All rights reserved. Take-aways from Kube’s Design • Optimize Etcd READs • Cache @ API server - serve all READs from memory • It’s just meta data, size can be reasonable for memory • Shared Informer - aggregate READs from all controllers • Micro-service choreography • Everyone focus on their own API objects and different pipelines are formed automatically • Atomic commits on single API objects, reconciliation loops will finally make things right • Level-triggered control • Controller always go back and assert state, so nothing can be missing
  • 35. Copyright © 2017 Hao Zhang All rights reserved. Why Cluster Management • As tedious as endless on-calls • As sexy as and as important as an orchestrator that • Increases resource utilization and save money • Automates resource provisioning / scheduling / scaling (both up and down) / failure detection and recovery • Provides methods to debug from outside the cluster • i.e. execute debug commands in your container • Plugs solutions such as Logging, Monitoring, Dashboard, Security, Admission Control, etc. • Release labor for feature development
  • 36. Copyright © 2017 Hao Zhang All rights reserved. Why is Kubernetes Successful • Great abstraction for plug-and-play simple workload • Writing control logics can somewhat be a burden, especially for startups, and Kubernetes made it much easier • Environment-agnostic interfaces • CRI, CNI, Flex Volume makes it possible to handle hybrid environment • Native support for popular public cloud • Out-of-box resource provisioning and management • Plug-and-play cluster management solutions from community • Cluster autoscaler, logging, monitoring, admission, etc. • Just run `kubectl create` you will have your app
  • 37. Copyright © 2017 Hao Zhang All rights reserved. Borg, Omega, Kubernetes • Borg @ Google: https://research.google.com/pubs/pub43438.html • Omega @ Google: https://research.google.com/pubs/ pub41684.html • From Borg, Omega to Kubernetes: http://queue.acm.org/detail.cfm? id=2898444