в kubernetes

Знакомство с Kubernetes. Часть 2: Терминология


В данной статье предлагаю перечислить и кратко рассмотреть базовые понятия Kubernetes — это будет основой для понимания работы оркестратора и пригодится перед ознакомлением с остальными статьями цикла.

Архитектура Kubernetes гораздо проще, чем кажется на первый взгляд — вы не взаимодействуете напрямую с нодами, на которых запущено приложение. Вся работа с кластером Kubernetes осуществляется через панель управления (dashboard), API или с помощью инструмента командной строки (kubectl), который в свою очередь взаимодействует с API Kubernetes.

Далее мы будем использовать именно kubectl — для распространения информации о желаемом состоянии приложения в кластере (проще говоря о развертывании / удалении) или для сбора данных о текущем состоянии инфраструктуры.

В кластере Kubernetes может быть два типа узлов — мастеры (masters) и ноды (nodes). На мастерах — управляющих узлах кластера — запускается API-сервер (kube-apiserver), планировщик (kube-scheduler), менеджер контроллеров (kube-controller-manager) и хранилище etcd.

На нодах — рабочих узлах кластера — запускаются еще два дополнительных компонента, а именно kube-proxy и kubelet. Первый используется для маршрутизации траффика, а второй — за получение инструкций от управляющего узла и приведение подов на данном рабочем узле в желаемое состояние. Кроме тога, на рабочих нодах могут запускаться (и запускаются) дополнительные плагины (например flannel), для организации сетевого взаимодействия или мониторинга и сбора метрик. Контейнеры (docker/rkt и т.д.) с приложением запускаются на рабочих узлах (нодах).

Схематично кластер Kubernetes выглядит примерно так:

У Kubernetes есть свой набор терминов, который дает некоторое представление об организации ресурсов кластера. О ресурсах нужно думать как о некотором наборе строительных блоков или абстракций, которые предоставляются API Kubernetes для запуска программного обеспечения в кластере. Подробно каждый из этих ресурсов мы рассмотрим в отдельных статьях, а сейчас просто перечислим их:

  • Pods — минимальная сущность (юнит) для развертывания в кластере;
  • ReplicaSets (ранее Replication Controller) — гарантирует, что в определенный момент времени будет запущено нужно кол-во контейнеров;
  • Deployments — обеспечивает декларативные (declarative) обновления для Pods и ReplicaSets;
  • StatefulSets — используется для управления приложениями с сохранением состояния;
  • DaemonSet — гарантирует, что определенный под будет запущен на всех (или некоторых) нодах;
  • Jobs (в том числе CronJob) — создает один (или несколько) подов и гарантирует, что после выполнения команды они будут успешно завершены (terminated);
  • Labels and Selectors — пары ключ/значение, которые присваиваются объектам (например, подам). С помощью селекторов пользователь может идентифицировать объект;
  • Namespaces — виртуальные кластеры размещенные поверх физического;
  • Services — абстракция, которая определяет логический набор подов и политику доступа к ним;
  • Annotations — добавление произвольных неидентифицирующих метаданных к объектам;
  • ConfigMaps — позволяет переопределить конфигурацию запускаемых подов;
  • Secrets — используются для хранения конфиденциальной информации (пароли, токены, ssh-ключи).

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

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