Знакомство с Kubernetes. Часть 2: Терминология
Apr 30, 2018 07:32 · 436 words · 3 minute read
В данной статье предлагаю перечислить и кратко рассмотреть базовые понятия 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.