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

Apr 30, 2018 07:32 · 436 words · 3 minute read kubernetes

В данной статье предлагаю перечислить и кратко рассмотреть базовые понятия 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 есть свой набор терминов, который дает некоторое представление об организации ресурсов кластера. О ресурсах нужно думать как о некотором наборе строительных блоков или абстракций, которые предоставляются 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, но нужно хотя бы знать о них, чтобы понимать как лучше взаимодействовать с кластером. В следующей статье цикла будем подробно рассматривать Pods.

tweet Share