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 Deployment Strategies
Kubernetes Deployment StrategiesKubernetes Deployment Strategies
Kubernetes Deployment StrategiesAbdennour TM
 
CI:CD in Lightspeed with kubernetes and argo cd
CI:CD in Lightspeed with kubernetes and argo cdCI:CD in Lightspeed with kubernetes and argo cd
CI:CD in Lightspeed with kubernetes and argo cdBilly Yuen
 
Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17Ryan Jarvinen
 
Introduction to Kubernetes Workshop
Introduction to Kubernetes WorkshopIntroduction to Kubernetes Workshop
Introduction to Kubernetes WorkshopBob Killen
 
Helm - Application deployment management for Kubernetes
Helm - Application deployment management for KubernetesHelm - Application deployment management for Kubernetes
Helm - Application deployment management for KubernetesAlexei Ledenev
 
대용량 데이터레이크 마이그레이션 사례 공유 [카카오게임즈 - 레벨 200] - 조은희, 팀장, 카카오게임즈 ::: Games on AWS ...
대용량 데이터레이크 마이그레이션 사례 공유 [카카오게임즈 - 레벨 200] - 조은희, 팀장, 카카오게임즈 ::: Games on AWS ...대용량 데이터레이크 마이그레이션 사례 공유 [카카오게임즈 - 레벨 200] - 조은희, 팀장, 카카오게임즈 ::: Games on AWS ...
대용량 데이터레이크 마이그레이션 사례 공유 [카카오게임즈 - 레벨 200] - 조은희, 팀장, 카카오게임즈 ::: Games on AWS ...Amazon Web Services Korea
 
Best Practices with Azure Kubernetes Services
Best Practices with Azure Kubernetes ServicesBest Practices with Azure Kubernetes Services
Best Practices with Azure Kubernetes ServicesQAware GmbH
 
GitOps is the best modern practice for CD with Kubernetes
GitOps is the best modern practice for CD with KubernetesGitOps is the best modern practice for CD with Kubernetes
GitOps is the best modern practice for CD with KubernetesVolodymyr Shynkar
 
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016Amazon Web Services Korea
 
AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저
AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저
AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저Amazon Web Services Korea
 
GitOps is IaC done right
GitOps is IaC done rightGitOps is IaC done right
GitOps is IaC done rightChen Cheng-Wei
 
Kubernetes internals (Kubernetes 해부하기)
Kubernetes internals (Kubernetes 해부하기)Kubernetes internals (Kubernetes 해부하기)
Kubernetes internals (Kubernetes 해부하기)DongHyeon Kim
 
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요Jo Hoon
 
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례YongSung Yoon
 
Azure Infrastructure as Code and Hashicorp Terraform
Azure Infrastructure as Code and Hashicorp TerraformAzure Infrastructure as Code and Hashicorp Terraform
Azure Infrastructure as Code and Hashicorp TerraformAlex Mags
 

What's hot (20)

Cómo empezar con Amazon EKS
Cómo empezar con Amazon EKSCómo empezar con Amazon EKS
Cómo empezar con Amazon EKS
 
Kubernetes Deployment Strategies
Kubernetes Deployment StrategiesKubernetes Deployment Strategies
Kubernetes Deployment Strategies
 
CI:CD in Lightspeed with kubernetes and argo cd
CI:CD in Lightspeed with kubernetes and argo cdCI:CD in Lightspeed with kubernetes and argo cd
CI:CD in Lightspeed with kubernetes and argo cd
 
Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17
 
Kubernetes 101
Kubernetes 101Kubernetes 101
Kubernetes 101
 
Introduction to Kubernetes Workshop
Introduction to Kubernetes WorkshopIntroduction to Kubernetes Workshop
Introduction to Kubernetes Workshop
 
Terraform
TerraformTerraform
Terraform
 
Helm - Application deployment management for Kubernetes
Helm - Application deployment management for KubernetesHelm - Application deployment management for Kubernetes
Helm - Application deployment management for Kubernetes
 
대용량 데이터레이크 마이그레이션 사례 공유 [카카오게임즈 - 레벨 200] - 조은희, 팀장, 카카오게임즈 ::: Games on AWS ...
대용량 데이터레이크 마이그레이션 사례 공유 [카카오게임즈 - 레벨 200] - 조은희, 팀장, 카카오게임즈 ::: Games on AWS ...대용량 데이터레이크 마이그레이션 사례 공유 [카카오게임즈 - 레벨 200] - 조은희, 팀장, 카카오게임즈 ::: Games on AWS ...
대용량 데이터레이크 마이그레이션 사례 공유 [카카오게임즈 - 레벨 200] - 조은희, 팀장, 카카오게임즈 ::: Games on AWS ...
 
Best Practices with Azure Kubernetes Services
Best Practices with Azure Kubernetes ServicesBest Practices with Azure Kubernetes Services
Best Practices with Azure Kubernetes Services
 
GitOps is the best modern practice for CD with Kubernetes
GitOps is the best modern practice for CD with KubernetesGitOps is the best modern practice for CD with Kubernetes
GitOps is the best modern practice for CD with Kubernetes
 
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
 
Hands-on Helm
Hands-on Helm Hands-on Helm
Hands-on Helm
 
AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저
AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저
AWS와 함께 하는 클라우드 컴퓨팅 - 홍민우 AWS 매니저
 
GitOps is IaC done right
GitOps is IaC done rightGitOps is IaC done right
GitOps is IaC done right
 
Kubernetes internals (Kubernetes 해부하기)
Kubernetes internals (Kubernetes 해부하기)Kubernetes internals (Kubernetes 해부하기)
Kubernetes internals (Kubernetes 해부하기)
 
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
 
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
11st Legacy Application의 Spring Cloud 기반 MicroServices로 전환 개발 사례
 
Azure Infrastructure as Code and Hashicorp Terraform
Azure Infrastructure as Code and Hashicorp TerraformAzure Infrastructure as Code and Hashicorp Terraform
Azure Infrastructure as Code and Hashicorp Terraform
 

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

Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 

Recently uploaded (20)

Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 

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