Kubernetes: вводная заметка

Last updated on 12.09.2019

Данным материалом я начну маленький цикл заметок по мере моего знакомства с Kubernetes или, как его ещё называют, k8s. Зачем всё это надо? Это современный и востребованный продукт, а потому лучше с ним познакомиться немного поближе для расширения кругозора. Да и вообще, всегда стоит идти в ногу со временем и быть в курсе всех последних технологий.

Лучший способ начать изучение – читать оф. доку. Здесь же я буду формировать готовые материалы с пояснением некоторых моментов, которые по началу могут казаться не совсем понятными и\или очевидными.

Я составил для себя следующий план освоения k8s :

Ниже опишу по первым двум пунктам из плана.

Что такое Kubernetes простыми словами

Kubernetes – опенсорсная разработка компании Google на языке Go с 2014 года, также именуемая, как k8s. Данная платформа нужна для централизованного размещения, взаимодействия и управлением контейнеров (например, Docker).

Что умеет Kubernetes

  • Поднимать упавшие контейнеры;
  • Балансировать трафик в зависимости от нагрузки;
  • Мониторить СХД;
  • Проверять работоспособность приложений;
  • Реплицировать ноды с приложениями;
  • Мониторить ресурсы;
  • Предоставлять аутентификацию и авторизацию;
  • И многое другое…

Оркестрация контейнеров

Для гибкости и масштабирования используется координация взаимодействия двух и более контейнеров, называемая оркестрация. Kubernetes лишь один из инструментов по оркестрированию. Имеются также и другие: нативный Docker Swarm или Mesos.

Схема архитектуры

Основные составные и сущности k8s

Master Server (ведущий узел, head)

Основной сервер, через который происходит всё управление Kubernetes. Таких серверов может быть несколько для разделения нагрузки и отказоустойчивости. На нём располагаются такие основные компоненты, как kube-apiserver, etcd, kube-controller-manager, kube-scheduler, разного рода addons (провайдеры DNS, kube-ui, fluentd-elasticsearch и система мониторинга cluster-monitoring). Эти компоненты также могут быть разнесены по узлам, но, как правило, располагаются на одном мастер сервере.

etcd (распределённое отслеживаемое хранилище)

Является хранилищем конфигурации, взаимодействует с компонентами.

API Server

Один из ключевых составных механизмов. Предоставляется REST API, позволяет клиентам управлять контейнерами и нагрузкой.

Планировщик (scheduler)

Используется для для назначения узлов (nodes) подам. При создании пода планировщик понимает, что у новосозданного пода нет узла и назначает его (но не запускает под!).

kube-controller-manager

Является отдельным процессом , который проверяет состояние кластера (в т.ч. и узлов) через API, выполняет необходимые изменения, работает с пространством имён (namespace), отвечает за поддержание правильного количества модулей для каждого объекта контроллера репликации в системе – в общем, функций достаточно много и в начале для понимания пока хватит этого.

kubectl

Управляет кластером k8s, является интерфейсом командной строки.

Node (узел)

Сервер, на котором будут располагаться контейнеры с приложениями. Также бывает обычно несколько экземпляров.

А далее начинается самое интересное. Так называемые сущности или абстракции, расположенные на нодах.

Pod (под)

Поды содержат в себе контейнеры, которые связаны между собой логически. Внутри пода контейнеры имеют один IP-адрес и пространство портов, а также доступ к общему локальному хранилищу узла. При удалении пода, хранилище внутри него также уничтожается. Экземпляры подов имеют уникальный ID для их различия.

Services

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

У сервисов есть несколько типов:

  • ClusterIP – используется по умолчанию для доступа только внутри кластера. Чтобы попадать на ресурсы извне, запускается прокси (kubectl proxy) . Такой вариант подходит обычно для траблшутинга или разового доступа. На проде так лучше не делать;
  • NodePort. Название говорит за себя. На ноде открывается порт (есть ограниченный диапазон: 30000-32767), и через открытый порт трафик идёт сначала до сервиса, а потом уже попадает в нужный под. Идея использования такая: один порт – один сервис. Для прода также не особо подходит, т.к. у нод может меняться IP-адрес.
Ingress

По сути своей не является сервисом, а скорее как точка входа или маршрутизатор для трафика. Используется обычно для работы с L7 (http). После его объявления\создания в кластере, ingress сам по себе бесполезен. Для дальнейшей работы должен применяться Ingress Controller. Например, nginx controller.

Namespaces

Предоставляет своё пространство имён для сущностей k8s. Используется для логического разделения окружения . Также задаёт ограничения на использование ресурсов.

ReplicaSet

k8s позволяет оркестрировать контейнеры. Для этого изначального использовалась сущность Replication Controller, а сейчас – ReplicaSet, который позволяет создавать несколько экземпляров подов, масштабировать по горизонтали, а также отслеживать их состояние.

Deployment

Данная сущность определяет кол-во реплик, которое будет создано, а планировщик смотрит за тем, чтобы в случае возникновения проблем новые поды создавались согласно описания Deployment.

Простыми словами можно сказать, что ReplicaSet – набор подов, а Deployment – набор ReplicaSet с более высоким уровнем абстракции.

Labels\Selectors

Для идентификации приложений и взаимодействия между ними используются метки и селекторы. Используются при создании объектов кластера, далее могут идентифицироваться как набор объектов с одной общей меткой.

Для дальнейшего понимания, надо будет пробовать уже на практике создавать свои поды, сервисы, деплойменты и посмотреть, как всё это взаимодействует. Поэтому следующий шаг – подготовка к созданию кластера.

Ваш комментарий будет первым

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *