# Оркестраторы

Для небольшого количества микросервисов достаточно будет использовать docker compose + docker swarm. 

Когда уже бОльшее количество сущностей или когда вы интегрированы в кластер, где есть уже другие проекты и вам с ними нужно взаимодействовать по сети, на помощь придут оркестраторы: k8s, openshift.

![](/pictures/Common/Orchestration/Orchestrators.jpg?raw=true)

## Объекты оркестраторов:

### Нода = Узел

### Кластер (объединение серверов) - виртуальных (Неймспейсы) или физических машин, называемые узлами (нодами сервера)

Если в кластере есть несколько нод, то они объединены в кластерную сеть. Вне зависимости от количества нод, все кластеры Kubernetes имеют одни и те же компоненты (components).

Компонентами кластера могут быть:

* worker node (рабочие узлы кластера) - виртуальная машина, где запускается наше контейнизированное приложение (в openshift мин. 1, макс. 5000). Пример: воркер нода - 8 [Ядер CPU](/2%20ComputerScience/2.0%20Linux/2.0.2%20Processor(CPU).md) и 16г [Озу/Ram](/3%20Memory%20and%20Concurrency/3.1%20Memory/3.1.2%20RandomAccessMemory/3.1.2.1%20RAM.md) 114 [Жесткой памяти диска](/3%20Memory%20and%20Concurrency/3.1%20Memory/3.1.1%20AboutMemory/3.1.1.1%20Memory.md). Здесь запускаются два утилиты:
    * kubelet — отвечает за статус подов на ноде (запуск, останов и управление контейнерами);
    * kube-proxy — компонент, ответственный за маршрутизацию входящего трафика на конкретные контейнеры, работающие в пределах пода;

* master node (управляющие узлы кластера) - на которой расположен Control-Plane(CP) для всего кластера (запускается API-сервер (kube-apiserver), планировщик (kube-scheduler), менеджер контроллеров (kube-controller-manager) и хранилище etcd)
    * kube-apiserver — ключевой компонент системы. Он предоставляет JSON REST API, использующий HTTP в качестве транспорта и используется для организации внешнего и внутреннего доступа к функциям Kubernetes;
    * kube-scheduler — компонент системы (один из контроллеров), который выбирает, на какой ноде должен запускаться какой под, исходя из доступности ресурсов;
    * kube-controller-manager — часть мастер-ноды, запускающая основные контроллеры Kubernetes (Node Controller, Replication Controller, Endpoints Controller, Service Account & Token Controllers);
    * etcd — легкий распределённый движок хранилища ключ-значение (используется для хранения конфигурационных данных приложений в кластере);
    * cloud-controller-manager — часть мастер-ноды, запускающая контроллеры, необходимые для взаимодействия с облачными провайдерами (Node Controller, Route Controller, Service Controller, Volume Controller);

![k8sMasterAndWorkerNodeInteraction](/pictures/Common/Orchestration/k8sMasterAndWorkerNodeInteraction.jpeg?raw=true)

------

### [Неймспейс/Namespace k8s](https://ealebed.github.io/posts/2018/знакомство-с-kubernetes-часть-10-неймспейсы-namespaces/) - виртуальные кластеры размещенные поверх физического

[Kubernetes](./4.3.6.2%20Kubernetes(k8s).md) поддерживает несколько виртуальных кластеров, работающих в одном и том же физическом кластере. Эти виртуальные кластеры называются пространствами имен (Неймспейс/namespace) или неймспейсами (namespaces)

Неймспейсы предназначены для использования в окружениях с множеством пользователей, распределенных между несколькими командами/проектами. Для кластеров Kubernetes с небольшим количеством пользователей (несколько десятков) создавать несколько разных неймспейсов не имеет смысла. 

По дефолту в кластере Kubernetes будет создан неймспейс default, в котором и будут размещаться запускаемые объекты (поды, сервисы, развертывания и т.д.). 

Неймспейсы `kube-public` и `kube-system` используются для запуска служебных объектов Kubernetes, необходимых для корректной работы кластера.

> Нет необходимости использовать разные неймспейсы для разделения нескольких разных ресурсов, н/р, разных версий одного и того же ПО - здесь лучше воспользоваться метками и селекторами (для выделения ресурсов) в одном и том же пространстве имен.

Кроме того, неймспейсы - это способ разделить ресурсы кластера между пользователями (с использованием квот).

------

### Под/Pod - группа из одного или нескольких контейнеров

Под - наименьшая единица в Kubernetes, которая может содержать один или несколько контейнеров, совместно использующих ресурсы и сеть. Поды представляют собой рабочие лошадки, выполняющие контейнеризированные приложения.

Pods - минимальная сущность (юнит) для развертывания в кластере;

------

### Labels vs Selectors vs Annotations

Labels - пары ключ/значение, которые присваиваются объектам (например, подам).

С помощью селекторов пользователь может идентифицировать объект.

Annotations - добавление произвольных неидентифицирующих метаданных к объектам.

![](/pictures//Common/Orchestration/k8sLabelsSelectorsAndAnnotations.png?raw=true)

-------

### Control Plane - центральный головной мозг k8s
 
![k8sMasterAndWorkerNodeInteraction](/pictures/Common/Orchestration/k8sMasterAndWorkerNodeInteraction.jpeg?raw=true)

### Helm

Пакетный менеджер и шаблонизатор yml файлов для k8s

![Helm terminology](/pictures/Common/Orchestration/HelmTerminology.png?raw=true)

---------

[4.3.5 Docker Practise Theme](../4.3.5%20DockerPractise.md) | [Back To iTWiki Contents](https://github.com/eldaroid/iTWiki) | [4.3.6.2 Kubernetes (k8s) Theme](./4.3.6.2%20Kubernetes(k8s).md)