You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardexpand all lines: docs/design/README.md
+53-13
Original file line number
Diff line number
Diff line change
@@ -34,19 +34,59 @@ Documentation for other releases can be found at
34
34
35
35
# Kubernetes Design Overview
36
36
37
-
Kubernetes is a system for managing containerized applications across multiple hosts, providing basic mechanisms for deployment, maintenance, and scaling of applications.
38
-
39
-
Kubernetes establishes robust declarative primitives for maintaining the desired state requested by the user. We see these primitives as the main value added by Kubernetes. Self-healing mechanisms, such as auto-restarting, re-scheduling, and replicating containers require active controllers, not just imperative orchestration.
40
-
41
-
Kubernetes is primarily targeted at applications composed of multiple containers, such as elastic, distributed micro-services. It is also designed to facilitate migration of non-containerized application stacks to Kubernetes. It therefore includes abstractions for grouping containers in both loosely coupled and tightly coupled formations, and provides ways for containers to find and communicate with each other in relatively familiar ways.
42
-
43
-
Kubernetes enables users to ask a cluster to run a set of containers. The system automatically chooses hosts to run those containers on. While Kubernetes's scheduler is currently very simple, we expect it to grow in sophistication over time. Scheduling is a policy-rich, topology-aware, workload-specific function that significantly impacts availability, performance, and capacity. The scheduler needs to take into account individual and collective resource requirements, quality of service requirements, hardware/software/policy constraints, affinity and anti-affinity specifications, data locality, inter-workload interference, deadlines, and so on. Workload-specific requirements will be exposed through the API as necessary.
44
-
45
-
Kubernetes is intended to run on a number of cloud providers, as well as on physical hosts.
46
-
47
-
A single Kubernetes cluster is not intended to span multiple availability zones. Instead, we recommend building a higher-level layer to replicate complete deployments of highly available applications across multiple zones (see [the multi-cluster doc](../admin/multi-cluster.md) and [cluster federation proposal](../proposals/federation.md) for more details).
48
-
49
-
Finally, Kubernetes aspires to be an extensible, pluggable, building-block OSS platform and toolkit. Therefore, architecturally, we want Kubernetes to be built as a collection of pluggable components and layers, with the ability to use alternative schedulers, controllers, storage systems, and distribution mechanisms, and we're evolving its current code in that direction. Furthermore, we want others to be able to extend Kubernetes functionality, such as with higher-level PaaS functionality or multi-cluster layers, without modification of core Kubernetes source. Therefore, its API isn't just (or even necessarily mainly) targeted at end users, but at tool and extension developers. Its APIs are intended to serve as the foundation for an open ecosystem of tools, automation systems, and higher-level API layers. Consequently, there are no "internal" inter-component APIs. All APIs are visible and available, including the APIs used by the scheduler, the node controller, the replication-controller manager, Kubelet's API, etc. There's no glass to break -- in order to handle more complex use cases, one can just access the lower-level APIs in a fully transparent, composable manner.
37
+
Kubernetes is a system for managing containerized applications across multiple
38
+
hosts, providing basic mechanisms for deployment, maintenance, and scaling of
39
+
applications.
40
+
41
+
Kubernetes establishes robust declarative primitives for maintaining the desired
42
+
state requested by the user. We see these primitives as the main value added by
43
+
Kubernetes. Self-healing mechanisms, such as auto-restarting, re-scheduling, and
44
+
replicating containers require active controllers, not just imperative
45
+
orchestration.
46
+
47
+
Kubernetes is primarily targeted at applications composed of multiple
48
+
containers, such as elastic, distributed micro-services. It is also designed to
49
+
facilitate migration of non-containerized application stacks to Kubernetes. It
50
+
therefore includes abstractions for grouping containers in both loosely coupled
51
+
and tightly coupled formations, and provides ways for containers to find and
52
+
communicate with each other in relatively familiar ways.
53
+
54
+
Kubernetes enables users to ask a cluster to run a set of containers. The system
55
+
automatically chooses hosts to run those containers on. While Kubernetes's
56
+
scheduler is currently very simple, we expect it to grow in sophistication over
57
+
time. Scheduling is a policy-rich, topology-aware, workload-specific function
58
+
that significantly impacts availability, performance, and capacity. The
59
+
scheduler needs to take into account individual and collective resource
60
+
requirements, quality of service requirements, hardware/software/policy
61
+
constraints, affinity and anti-affinity specifications, data locality,
62
+
inter-workload interference, deadlines, and so on. Workload-specific
63
+
requirements will be exposed through the API as necessary.
64
+
65
+
Kubernetes is intended to run on a number of cloud providers, as well as on
66
+
physical hosts.
67
+
68
+
A single Kubernetes cluster is not intended to span multiple availability zones.
69
+
Instead, we recommend building a higher-level layer to replicate complete
70
+
deployments of highly available applications across multiple zones (see
71
+
[the multi-cluster doc](../admin/multi-cluster.md) and [cluster federation proposal](../proposals/federation.md)
72
+
for more details).
73
+
74
+
Finally, Kubernetes aspires to be an extensible, pluggable, building-block OSS
75
+
platform and toolkit. Therefore, architecturally, we want Kubernetes to be built
76
+
as a collection of pluggable components and layers, with the ability to use
77
+
alternative schedulers, controllers, storage systems, and distribution
78
+
mechanisms, and we're evolving its current code in that direction. Furthermore,
79
+
we want others to be able to extend Kubernetes functionality, such as with
80
+
higher-level PaaS functionality or multi-cluster layers, without modification of
81
+
core Kubernetes source. Therefore, its API isn't just (or even necessarily
82
+
mainly) targeted at end users, but at tool and extension developers. Its APIs
83
+
are intended to serve as the foundation for an open ecosystem of tools,
84
+
automation systems, and higher-level API layers. Consequently, there are no
85
+
"internal" inter-component APIs. All APIs are visible and available, including
86
+
the APIs used by the scheduler, the node controller, the replication-controller
87
+
manager, Kubelet's API, etc. There's no glass to break -- in order to handle
88
+
more complex use cases, one can just access the lower-level APIs in a fully
89
+
transparent, composable manner.
50
90
51
91
For more about the Kubernetes architecture, see [architecture](architecture.md).
0 commit comments