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
2018-05-05 16:00:51 +00:00
content_template: templates/concept
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
2018-05-05 16:00:51 +00:00
{{% capture overview %}}
2019-10-09 21:07:50 +00:00
When you deploy Kubernetes, you get a cluster.
{{< glossary_definition term_id = "cluster" length = "all" prepend = "A cluster is" > }}
This document outlines the various components you need to have
a complete and working Kubernetes cluster.
2018-05-05 16:00:51 +00:00
{{% /capture %}}
2017-03-14 21:09:54 +00:00
2018-05-05 16:00:51 +00:00
{{% capture body %}}
2017-03-14 21:09:54 +00:00
## Master Components
2017-05-14 22:49:45 +00:00
Master components provide the cluster's control plane. Master components make global decisions about the
2019-07-03 13:56:35 +00:00
cluster (for example, scheduling), and they detect and respond 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
2018-02-12 22:42:49 +00:00
Master components can be run on any machine in the cluster. However,
2017-05-14 22:49:45 +00:00
for simplicity, set up scripts typically start all master 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:
2017-05-14 22:49:45 +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.
2017-05-14 22:49:45 +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
2018-02-12 22:42:49 +00:00
[cloud-controller-manager ](/docs/tasks/administer-cluster/running-cloud-controller/ ) runs controllers that interact with the underlying cloud providers. The cloud-controller-manager binary is an alpha feature introduced in Kubernetes release 1.6.
2017-03-21 18:49:23 +00:00
2017-07-28 15:23:11 +00:00
cloud-controller-manager runs cloud-provider-specific controller loops only. You must disable these controller loops in the kube-controller-manager. You can disable the controller loops by setting the `--cloud-provider` flag to `external` when starting the kube-controller-manager.
2017-03-21 18:49:23 +00:00
2019-06-04 00:50:59 +00:00
cloud-controller-manager allows the cloud vendor's code and the Kubernetes code to evolve independently of each other. In prior releases, the core Kubernetes code was dependent upon cloud-provider-specific code for functionality. In future releases, code specific to cloud vendors should be maintained by the cloud vendor themselves, and linked to cloud-controller-manager while running Kubernetes.
2017-03-21 18:49:23 +00:00
The following controllers have cloud provider dependencies:
2017-05-14 22:49:45 +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-07-28 15:23:11 +00:00
* Volume Controller: For creating, attaching, and mounting volumes, and interacting with the cloud provider to orchestrate volumes
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
### Container Runtime
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.
2018-05-05 16:00:51 +00:00
{{% /capture %}}
2019-07-09 19:28:25 +00:00
{{% capture whatsnext %}}
* Learn about [Nodes ](/docs/concepts/architecture/nodes/ )
2019-10-02 17:06:08 +00:00
* Learn about [Controllers ](/docs/concepts/architecture/controller/ )
2019-07-09 19:28:25 +00:00
* Learn about [kube-scheduler ](/docs/concepts/scheduling/kube-scheduler/ )
* Read etcd's official [documentation ](https://etcd.io/docs/ )
{{% /capture %}}