# Компоненты Kubernetes

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->
При развёртывании Kubernetes вы имеете дело с кластером.
<p><p>Kubernetes-кластер состоит из набор рабочих машин, называемых узлами, которые запускают контейнеризированные приложения. Кластер имеет как минимум один рабочий узел.</p></p>
<p>В рабочих узлах размещены поды, которые являются компонентами приложения. <a class='glossary-tooltip' title='Уровень оркестрации контейнеров, предоставляющий API и интерфейсы для определения, развёртывания и управления жизненным циклом контейнеров.' data-bs-toggle='tooltip' data-bs-placement='top' href='/ru/docs/reference/glossary/?all=true#term-control-plane' target='_blank' aria-label='Управляющий слой'>Управляющий слой</a> управляет рабочими узлами и подами в кластере. В production-средах управляющий слой обычно запускается на нескольких компьютерах, а кластер, как правило, развёртывается на нескольких узлах, гарантируя отказоустойчивость и высокую доступность.</p>

На этой странице в общих чертах описываются различные компоненты, необходимые для работы кластера Kubernetes.

Ниже показана диаграмма кластера Kubernetes со всеми связанными компонентами.

![Компоненты Kubernetes](/images/docs/components-of-kubernetes.svg)



<!-- body -->

## Компоненты управляющего слоя

Компоненты управляющего слоя (control plane) отвечают за основные операции кластера (например, планирование), а также обрабатывают события кластера (например, запускают новый <a class='glossary-tooltip' title='Самый маленький и простой объект в Kubernetes. Под — это набор запущенных контейнеров в кластере.' data-bs-toggle='tooltip' data-bs-placement='top' href='/ru/docs/concepts/workloads/pods/pod-overview/' target='_blank' aria-label='под'>под</a>, когда поле `replicas` развертывания не соответствует требуемому количеству реплик).

Компоненты управляющего слоя могут быть запущены на любой машине в кластере. Однако, для простоты, сценарии настройки обычно запускают все компоненты управляющего слоя на одном компьютере и в то же время не позволяют запускать пользовательские контейнеры на этом компьютере. Смотрите страницу [Создание высоконадёжных кластеров](/docs/admin/high-availability/) для примера настройки нескольких ведущих виртуальных машин.

### kube-apiserver

<p>API-сервер — компонент <a class='glossary-tooltip' title='Уровень оркестрации контейнеров, предоставляющий API и интерфейсы для определения, развёртывания и управления жизненным циклом контейнеров.' data-bs-toggle='tooltip' data-bs-placement='top' href='/ru/docs/reference/glossary/?all=true#term-control-plane' target='_blank' aria-label='управляющего слоя'>управляющего слоя</a> Kubernetes,
который делает доступным Kubernetes API. API-сервер — это фронтенд управляющего слоя Kubernetes.</p>
<p>Основной реализацией API-сервера Kubernetes является <a href="/docs/reference/generated/kube-apiserver/">kube-apiserver</a>.
kube-apiserver предназначен для горизонтального масштабирования, то есть он масштабируется при развёртывании
на множество инстансов. Вы можете запускать несколько экземпляров kube-apiserver и балансировать трафик между ними.</p>

### etcd

<p>Консистентное и высокодоступное хранилище данных в формате «ключ-значение», которое используется как основное хранилище всех данных кластера Kubernetes.</p>
<p>Если ваш кластер Kubernetes использует etcd в качестве основного хранилища, убедитесь, что у вас <a href="/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster">настроено резервное копирование</a> данных.</p>
<p>Вы можете найти подробную информацию о etcd в <a href="https://etcd.io/docs/">официальной документации</a>.</p>

### kube-scheduler

<p>Компонент управляющего слоя (control plane), который отслеживает недавно созданные поды без назначенного для них узла и выбирает узел, на котором они должны работать.</p>
<p>При планировании учитывается множество факторов, включая индивидуальные
и общие требования к ресурсам, ограничения по железу/программному обеспечению/политикам,
конфигурацию принадлежности (affinity) и непринадлежности (anti-affinity)
узлов/подов, местонахождение данных, взаимодействие между рабочими
нагрузками и дедлайны.</p>

### kube-controller-manager

<p>Компонент управляющего слоя, который запускает процессы <a class='glossary-tooltip' title='Управляющий цикл, который отслеживает общее состояние кластера через API-сервер и вносит изменения, пытаясь привести текущее состояние к желаемому.' data-bs-toggle='tooltip' data-bs-placement='top' href='/ru/docs/concepts/architecture/controller/' target='_blank' aria-label='контроллера'>контроллера</a>.</p>
<p>С логической точки зрения каждый <a class='glossary-tooltip' title='Управляющий цикл, который отслеживает общее состояние кластера через API-сервер и вносит изменения, пытаясь привести текущее состояние к желаемому.' data-bs-toggle='tooltip' data-bs-placement='top' href='/ru/docs/concepts/architecture/controller/' target='_blank' aria-label='контроллер'>контроллер</a> представляет собой отдельный процесс. Но для упрощения все они скомпилированы в один бинарный файл и выполняются в одном процессе.</p>

Эти контроллеры включают:

  * Контроллер узла (Node Controller): уведомляет и реагирует на сбои узла.
  * Контроллер репликации (Replication Controller): поддерживает правильное количество подов для каждого объекта контроллера репликации в системе.
  * Контроллер конечных точек (Endpoints Controller): заполняет объект конечных точек (Endpoints), то есть связывает сервисы (Services) и поды (Pods).
  * Контроллеры учетных записей и токенов (Account & Token Controllers): создают стандартные учетные записи и токены доступа API для новых пространств имен.

### cloud-controller-manager

[cloud-controller-manager](/docs/tasks/administer-cluster/running-cloud-controller/) запускает контроллеры, которые взаимодействуют с основными облачными провайдерами. Двоичный файл cloud-controller-manager — это альфа-функциональность, появившиеся в Kubernetes 1.6.

cloud-controller-manager запускает только циклы контроллера, относящиеся к облачному провайдеру. Вам нужно отключить эти циклы контроллера в kube-controller-manager. Вы можете отключить циклы контроллера, установив флаг `--cloud-provider` со значением `external` при запуске kube-controller-manager.

С помощью cloud-controller-manager код как облачных провайдеров, так и самого Kubernetes может разрабатываться независимо друг от друга. В предыдущих версиях код ядра Kubernetes зависел от кода, предназначенного для функциональности облачных провайдеров. В будущих выпусках код, специфичный для облачных провайдеров, должен поддерживаться самим облачным провайдером и компоноваться с cloud-controller-manager во время запуска Kubernetes.

Следующие контроллеры зависят от облачных провайдеров:

  * Контроллер узла (Node Controller): проверяет облачный провайдер, чтобы определить, был ли удален узел в облаке после того, как он перестал работать
  * Контроллер маршрутов (Route Controller): настраивает маршруты в основной инфраструктуре облака
  * Контроллер сервисов (Service Controller): создаёт, обновляет и удаляет балансировщики нагрузки облачного провайдера.
  * Контроллер тома (Volume Controller): создаёт, присоединяет и монтирует тома, а также взаимодействует с облачным провайдером для оркестрации томов.

## Компоненты узла

Компоненты узла работают на каждом узле, поддерживая работу подов и среды выполнения Kubernetes.

### kubelet

<p>Агент, работающий на каждом узле в кластере. Он следит за тем, чтобы контейнеры были запущены в поде.</p>
<p><a href="/docs/reference/command-line-tools-reference/kubelet/">Kubelet</a> принимает набор PodSpecs, которые определяются разными способами и гарантируют работоспособность и исправность определённых в них контейнеров. Kubelet не отвечает за контейнеры, не созданные Kubernetes.</p>

### kube-proxy

<p>kube-proxy — сетевой прокси, работающий на каждом <a class='glossary-tooltip' title='Узел — рабочая машина в Kubernetes.' data-bs-toggle='tooltip' data-bs-placement='top' href='/ru/docs/concepts/architecture/nodes/' target='_blank' aria-label='узле'>узле</a> в кластере и реализующий часть концепции <a class='glossary-tooltip' title='Способ представления приложения, запущенного в наборе подов, в виде сетевого сервиса.' data-bs-toggle='tooltip' data-bs-placement='top' href='/ru/docs/concepts/services-networking/service/' target='_blank' aria-label='сервиса'>сервиса</a> Kubernetes.</p>
<p><a href="/docs/reference/command-line-tools-reference/kube-proxy/">kube-proxy</a> поддерживает сетевые правила на узлах. Эти правила разрешают сетевое взаимодействие с вашимии подами из сетевых сессий внутри и снаружи кластера.</p>
<p>kube-proxy использует уровень фильтрации пакетов операционной системы, если он доступен. В ином случае kube-proxy сам перенаправляет трафик.</p>

### Среда выполнения контейнера

<p>Фундаментальный компонент, который позволяет Kubernetes эффективно запускать контейнеры. Он отвечает за управление исполнением и жизненным циклом контейнеров в рамках Kubernetes.</p>
<p>Kubernetes поддерживает различные среды для запуска контейнеров: <a class='glossary-tooltip' title='Исполняемая среда для контейнеров с фокусом на простоту, надежность и переносимость' data-bs-toggle='tooltip' data-bs-placement='top' href='https://containerd.io/docs/' target='_blank' aria-label='containerd'>containerd</a>,
<a class='glossary-tooltip' title='Легковесная исполняемая среда для контейнеров, разработанная специально для Kubernetes' data-bs-toggle='tooltip' data-bs-placement='top' href='https://cri-o.io/#what-is-cri-o' target='_blank' aria-label='CRI-O'>CRI-O</a> и любые реализации <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md">Kubernetes CRI (Container Runtime
Interface)</a>.</p>

## Дополнения

Дополнения используют ресурсы Kubernetes (<a class='glossary-tooltip' title='Гарантирует, что копия пода выполняется на множестве узлов кластера.' data-bs-toggle='tooltip' data-bs-placement='top' href='/ru/docs/concepts/workloads/controllers/daemonset' target='_blank' aria-label='DaemonSet'>DaemonSet</a>, <a class='glossary-tooltip' title='Управляет реплицированным приложением в кластере.' data-bs-toggle='tooltip' data-bs-placement='top' href='/ru/docs/concepts/workloads/controllers/deployment/' target='_blank' aria-label='Деплоймент (Deployment)'>Деплоймент (Deployment)</a> и т.д.) для расширения функциональности кластера. Поскольку дополнения охватывают весь кластер, ресурсы относятся к пространству имен `kube-system`.

Некоторые из дополнений описаны ниже; более подробный список доступных расширений вы можете найти на странице [Дополнения](/docs/concepts/cluster-administration/addons/).

### DNS

Хотя прочие дополнения не являются строго обязательными, однако при этом у всех Kubernetes-кластеров должен быть [кластерный DNS](/docs/concepts/services-networking/dns-pod-service/), так как многие примеры предполагают его наличие.

Кластерный DNS — это DNS-сервер наряду с другими DNS-серверами в вашем окружении, который обновляет DNS-записи для сервисов Kubernetes.

Контейнеры, запущенные посредством Kubernetes, автоматически включают этот DNS-сервер в свои DNS.

### Веб-интерфейс (Dashboard)

[Dashboard](/docs/tasks/access-application-cluster/web-ui-dashboard/) — это универсальный веб-интерфейс для кластеров Kubernetes. С помощью этой панели, пользователи могут управлять и устранять неполадки кластера и приложений, работающих в кластере.

### Мониторинг ресурсов контейнера

[Мониторинг ресурсов контейнера](/docs/tasks/debug-application-cluster/resource-usage-monitoring/) записывает общие метрики о контейнерах в виде временных рядов в центральной базе данных и предлагает пользовательский интерфейс для просмотра этих данных.

### Логирование кластера

Механизм [логирования кластера](/docs/concepts/cluster-administration/logging/) отвечает за сохранение логов контейнера в централизованном хранилище логов с возможностью их поиска/просмотра.


## Что дальше

* Подробнее про [узлы](/docs/concepts/architecture/nodes/)
* Подробнее про [контроллеры](/docs/concepts/architecture/controller/)
* Подробнее про [kube-scheduler](/docs/concepts/scheduling/kube-scheduler/)
* Официальная [документация](https://etcd.io/docs/) etcd
