mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			120 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
<!-- BEGIN MUNGE: UNVERSIONED_WARNING -->
 | 
						|
 | 
						|
<!-- BEGIN STRIP_FOR_RELEASE -->
 | 
						|
 | 
						|
<img src="http://kubernetes.io/kubernetes/img/warning.png" alt="WARNING"
 | 
						|
     width="25" height="25">
 | 
						|
<img src="http://kubernetes.io/kubernetes/img/warning.png" alt="WARNING"
 | 
						|
     width="25" height="25">
 | 
						|
<img src="http://kubernetes.io/kubernetes/img/warning.png" alt="WARNING"
 | 
						|
     width="25" height="25">
 | 
						|
<img src="http://kubernetes.io/kubernetes/img/warning.png" alt="WARNING"
 | 
						|
     width="25" height="25">
 | 
						|
<img src="http://kubernetes.io/kubernetes/img/warning.png" alt="WARNING"
 | 
						|
     width="25" height="25">
 | 
						|
 | 
						|
<h2>PLEASE NOTE: This document applies to the HEAD of the source tree</h2>
 | 
						|
 | 
						|
If you are using a released version of Kubernetes, you should
 | 
						|
refer to the docs that go with that version.
 | 
						|
 | 
						|
<!-- TAG RELEASE_LINK, added by the munger automatically -->
 | 
						|
<strong>
 | 
						|
The latest release of this document can be found
 | 
						|
[here](http://releases.k8s.io/release-1.4/docs/design/architecture.md).
 | 
						|
 | 
						|
Documentation for other releases can be found at
 | 
						|
[releases.k8s.io](http://releases.k8s.io).
 | 
						|
</strong>
 | 
						|
--
 | 
						|
 | 
						|
<!-- END STRIP_FOR_RELEASE -->
 | 
						|
 | 
						|
<!-- END MUNGE: UNVERSIONED_WARNING -->
 | 
						|
 | 
						|
# Kubernetes architecture
 | 
						|
 | 
						|
A running Kubernetes cluster contains node agents (`kubelet`) and master
 | 
						|
components (APIs, scheduler, etc), on top of a distributed storage solution.
 | 
						|
This diagram shows our desired eventual state, though we're still working on a
 | 
						|
few things, like making `kubelet` itself (all our components, really) run within
 | 
						|
containers, and making the scheduler 100% pluggable.
 | 
						|
 | 
						|

 | 
						|
 | 
						|
## The Kubernetes Node
 | 
						|
 | 
						|
When looking at the architecture of the system, we'll break it down to services
 | 
						|
that run on the worker node and services that compose the cluster-level control
 | 
						|
plane.
 | 
						|
 | 
						|
The Kubernetes node has the services necessary to run application containers and
 | 
						|
be managed from the master systems.
 | 
						|
 | 
						|
Each node runs Docker, of course.  Docker takes care of the details of
 | 
						|
downloading images and running containers.
 | 
						|
 | 
						|
### `kubelet`
 | 
						|
 | 
						|
The `kubelet` manages [pods](../user-guide/pods.md) and their containers, their
 | 
						|
images, their volumes, etc.
 | 
						|
 | 
						|
### `kube-proxy`
 | 
						|
 | 
						|
Each node also runs a simple network proxy and load balancer (see the
 | 
						|
[services FAQ](https://github.com/kubernetes/kubernetes/wiki/Services-FAQ) for
 | 
						|
more details). This reflects `services` (see
 | 
						|
[the services  doc](../user-guide/services.md) for more details) as defined in
 | 
						|
the Kubernetes API on each node and can do simple TCP and UDP stream forwarding
 | 
						|
(round robin) across a set of backends.
 | 
						|
 | 
						|
Service endpoints are currently found via [DNS](../admin/dns.md) or through
 | 
						|
environment variables (both
 | 
						|
[Docker-links-compatible](https://docs.docker.com/userguide/dockerlinks/) and
 | 
						|
Kubernetes `{FOO}_SERVICE_HOST` and `{FOO}_SERVICE_PORT` variables are
 | 
						|
supported). These variables resolve to ports managed by the service proxy.
 | 
						|
 | 
						|
## The Kubernetes Control Plane
 | 
						|
 | 
						|
The Kubernetes control plane is split into a set of components. Currently they
 | 
						|
all run on a single _master_ node, but that is expected to change soon in order
 | 
						|
to support high-availability clusters. These components work together to provide
 | 
						|
a unified view of the cluster.
 | 
						|
 | 
						|
### `etcd`
 | 
						|
 | 
						|
All persistent master state is stored in an instance of `etcd`. This provides a
 | 
						|
great way to store configuration data reliably. With `watch` support,
 | 
						|
coordinating components can be notified very quickly of changes.
 | 
						|
 | 
						|
### Kubernetes API Server
 | 
						|
 | 
						|
The apiserver serves up the [Kubernetes API](../api.md). It is intended to be a
 | 
						|
CRUD-y server, with most/all business logic implemented in separate components
 | 
						|
or in plug-ins. It mainly processes REST operations, validates them, and updates
 | 
						|
the corresponding objects in `etcd` (and eventually other stores).
 | 
						|
 | 
						|
### Scheduler
 | 
						|
 | 
						|
The scheduler binds unscheduled pods to nodes via the `/binding` API. The
 | 
						|
scheduler is pluggable, and we expect to support multiple cluster schedulers and
 | 
						|
even user-provided schedulers in the future.
 | 
						|
 | 
						|
### Kubernetes Controller Manager Server
 | 
						|
 | 
						|
All other cluster-level functions are currently performed by the Controller
 | 
						|
Manager. For instance, `Endpoints` objects are created and updated by the
 | 
						|
endpoints controller, and nodes are discovered, managed, and monitored by the
 | 
						|
node controller. These could eventually be split into separate components to
 | 
						|
make them independently pluggable.
 | 
						|
 | 
						|
The [`replicationcontroller`](../user-guide/replication-controller.md) is a
 | 
						|
mechanism that is layered on top of the simple [`pod`](../user-guide/pods.md)
 | 
						|
API. We eventually plan to port it to a generic plug-in mechanism, once one is
 | 
						|
implemented.
 | 
						|
 | 
						|
 | 
						|
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
 | 
						|
[]()
 | 
						|
<!-- END MUNGE: GENERATED_ANALYTICS -->
 |