2017-03-14 21:09:54 +00:00
---
2018-02-27 18:51:46 +00:00
reviewers:
2017-03-14 21:09:54 +00:00
- lavalamp
title: Kubernetes Components
2020-05-30 19:10:23 +00:00
content_type: concept
2020-06-22 22:01:16 +00:00
description: >
A Kubernetes cluster consists of the components that represent the control plane
and a set of machines called nodes.
2018-06-06 23:51:26 +00:00
weight: 20
2019-02-21 16:24:20 +00:00
card:
name: concepts
weight: 20
2017-03-14 21:09:54 +00:00
---
2017-07-28 15:23:11 +00:00
2020-05-30 19:10:23 +00:00
<!-- overview -->
2019-10-09 21:07:50 +00:00
When you deploy Kubernetes, you get a cluster.
2020-01-16 13:24:22 +00:00
{{< glossary_definition term_id = "cluster" length = "all" prepend = "A Kubernetes cluster consists of" > }}
2019-10-09 21:07:50 +00:00
This document outlines the various components you need to have
a complete and working Kubernetes cluster.
2019-11-13 10:45:12 +00:00
Here's the diagram of a Kubernetes cluster with all the components tied together.

2017-03-14 21:09:54 +00:00
2020-05-30 19:10:23 +00:00
<!-- body -->
2020-01-16 13:24:22 +00:00
## Control Plane Components
2017-03-14 21:09:54 +00:00
2020-04-18 12:45:57 +00:00
The control plane's components make global decisions about the cluster (for example, scheduling), as well as detecting and responding to cluster events (for example, starting up a new {{< glossary_tooltip text = "pod" term_id = "pod" > }} when a deployment's `replicas` field is unsatisfied).
2017-03-14 21:09:54 +00:00
2020-04-18 12:45:57 +00:00
Control plane components can be run on any machine in the cluster. However,
for simplicity, set up scripts typically start all control plane components on
2018-02-12 22:42:49 +00:00
the same machine, and do not run user containers on this machine. See
2017-09-23 10:41:18 +00:00
[Building High-Availability Clusters ](/docs/admin/high-availability/ ) for an example multi-master-VM setup.
2017-08-04 13:35:15 +00:00
2017-03-14 21:09:54 +00:00
### kube-apiserver
2018-05-05 16:00:51 +00:00
{{< glossary_definition term_id = "kube-apiserver" length = "all" > }}
2017-03-14 21:09:54 +00:00
### etcd
2018-05-05 16:00:51 +00:00
{{< glossary_definition term_id = "etcd" length = "all" > }}
2018-01-25 22:34:06 +00:00
### kube-scheduler
2018-05-05 16:00:51 +00:00
{{< glossary_definition term_id = "kube-scheduler" length = "all" > }}
2017-03-14 21:09:54 +00:00
### kube-controller-manager
2018-05-05 16:00:51 +00:00
{{< glossary_definition term_id = "kube-controller-manager" length = "all" > }}
2017-03-14 21:09:54 +00:00
These controllers include:
2020-03-18 01:49:32 +00:00
* Node controller: Responsible for noticing and responding when nodes go down.
* Replication controller: Responsible for maintaining the correct number of pods for every replication
2017-03-14 21:09:54 +00:00
controller object in the system.
2020-03-18 01:49:32 +00:00
* Endpoints controller: Populates the Endpoints object (that is, joins Services & Pods).
* Service Account & Token controllers: Create default accounts and API access tokens for new namespaces.
2017-07-28 15:23:11 +00:00
2017-03-17 22:35:21 +00:00
### cloud-controller-manager
2020-03-18 01:49:32 +00:00
{{< glossary_definition term_id = "cloud-controller-manager" length = "short" > }}
2017-03-21 18:49:23 +00:00
2020-03-18 01:49:32 +00:00
The cloud-controller-manager only runs controllers that are specific to your cloud provider.
If you are running Kubernetes on your own premises, or in a learning environment inside your
own PC, the cluster does not have a cloud controller manager.
2017-03-21 18:49:23 +00:00
2020-03-18 01:49:32 +00:00
As with the kube-controller-manager, the cloud-controller-manager combines several logically
independent control loops into a single binary that you run as a single process. You can
scale horizontally (run more than one copy) to improve performance or to help tolerate failures.
2017-03-21 18:49:23 +00:00
2020-03-18 01:49:32 +00:00
The following controllers can have cloud provider dependencies:
2017-03-21 18:49:23 +00:00
2020-03-18 01:49:32 +00:00
* Node controller: For checking the cloud provider to determine if a node has been deleted in the cloud after it stops responding
* Route controller: For setting up routes in the underlying cloud infrastructure
* Service controller: For creating, updating and deleting cloud provider load balancers
2017-03-17 22:35:21 +00:00
2018-02-12 22:42:49 +00:00
## Node Components
Node components run on every node, maintaining running pods and providing the Kubernetes runtime environment.
### kubelet
2018-05-05 16:00:51 +00:00
{{< glossary_definition term_id = "kubelet" length = "all" > }}
2018-02-12 22:42:49 +00:00
### kube-proxy
2019-06-06 01:32:12 +00:00
{{< glossary_definition term_id = "kube-proxy" length = "all" > }}
2018-02-12 22:42:49 +00:00
2019-11-09 15:37:02 +00:00
### Container runtime
2018-02-12 22:42:49 +00:00
2019-06-06 01:32:12 +00:00
{{< glossary_definition term_id = "container-runtime" length = "all" > }}
2018-02-12 22:42:49 +00:00
## Addons
2017-03-14 21:09:54 +00:00
2019-07-12 00:39:05 +00:00
Addons use Kubernetes resources ({{< glossary_tooltip term_id = "daemonset" > }},
{{< glossary_tooltip term_id = "deployment" > }}, etc)
to implement cluster features. Because these are providing cluster-level features, namespaced resources
for addons belong within the `kube-system` namespace.
2017-03-14 21:09:54 +00:00
2019-07-12 00:39:05 +00:00
Selected addons are described below; for an extended list of available addons, please
see [Addons ](/docs/concepts/cluster-administration/addons/ ).
2017-03-14 21:09:54 +00:00
2018-02-12 22:42:49 +00:00
### DNS
2017-03-14 21:09:54 +00:00
2017-05-14 22:49:45 +00:00
While the other addons are not strictly required, all Kubernetes clusters should have [cluster DNS ](/docs/concepts/services-networking/dns-pod-service/ ), as many examples rely on it.
2017-03-14 21:09:54 +00:00
2017-05-14 22:49:45 +00:00
Cluster DNS is a DNS server, in addition to the other DNS server(s) in your environment, which serves DNS records for Kubernetes services.
2017-03-14 21:09:54 +00:00
2017-05-14 22:49:45 +00:00
Containers started by Kubernetes automatically include this DNS server in their DNS searches.
2017-03-14 21:09:54 +00:00
2018-02-12 22:42:49 +00:00
### Web UI (Dashboard)
2017-03-14 21:09:54 +00:00
2017-08-24 21:09:42 +00:00
[Dashboard ](/docs/tasks/access-application-cluster/web-ui-dashboard/ ) is a general purpose, web-based UI for Kubernetes clusters. It allows users to manage and troubleshoot applications running in the cluster, as well as the cluster itself.
2017-05-14 22:49:45 +00:00
2018-02-12 22:42:49 +00:00
### Container Resource Monitoring
2017-03-14 21:09:54 +00:00
2017-09-23 10:41:18 +00:00
[Container Resource Monitoring ](/docs/tasks/debug-application-cluster/resource-usage-monitoring/ ) records generic time-series metrics
2017-03-14 21:09:54 +00:00
about containers in a central database, and provides a UI for browsing that data.
2018-02-12 22:42:49 +00:00
### Cluster-level Logging
2017-03-14 21:09:54 +00:00
2019-10-09 21:07:50 +00:00
A [cluster-level logging ](/docs/concepts/cluster-administration/logging/ ) mechanism is responsible for
2017-03-14 21:09:54 +00:00
saving container logs to a central log store with search/browsing interface.
2020-05-30 19:10:23 +00:00
## {{% heading "whatsnext" %}}
2019-07-09 19:28:25 +00:00
* Learn about [Nodes ](/docs/concepts/architecture/nodes/ )
2019-10-02 17:06:08 +00:00
* Learn about [Controllers ](/docs/concepts/architecture/controller/ )
2020-04-08 01:35:50 +00:00
* Learn about [kube-scheduler ](/docs/concepts/scheduling-eviction/kube-scheduler/ )
2019-07-09 19:28:25 +00:00
* Read etcd's official [documentation ](https://etcd.io/docs/ )
2020-05-30 19:10:23 +00:00