Знакомство с Kubernetes. Часть 0: Что это?

Apr 15, 2018 14:17 · 479 words · 3 minute read kubernetes

Kubernetes - это проект с открытым исходным кодом для управления “флотом” контейнеров на нескольких хостах, объединенных в кластер. Данный инструмент призван обеспечить основные механизмы развертывания, обслуживания и масштабирования приложений, упакованных в контейнеры.

Разработка Kubernetes была начата в Google, которая уже более десяти лет использует похожий инструмент (закрытый и недоступный для сообщества) для оркестрации контейнеров - Borg. В данный момент Kubernetes передан под управление Cloud Native Computing Foundation (CNCF) и теперь поддерживается многими компаниями, в том числе Microsoft, RedHat, IBM и Docker.

Если вы используете контейнеры (docker/rkt - здесь под контейнером мы понимаем упакованное приложение со всеми необходимыми для работы зависимостями), то рано или поздно возникает вопрос с развертыванием, обновлением, масштабированием контейнеров, балансировкой траффика между ними, обнаружением сервисов и т. д. Именно эти (и некоторые другие) проблемы и призван решить Kubernetes.

Взаимодействуя с API можно описать желаемое состояние вашего приложения (например, количество реплик или размещение на определенном хосте) и Kubernetes сделает все необходимое для обеспечения соответствия текущей инфраструктуры желаемой - будет запускать поды (группы из одного или нескольких контейнеров), реплицировать их, “поднимать”, если некоторые поды “упадут” и т.д..

Kubernetes довольно гибкий, кластер можно поднять практически в любом месте. Например, Kubernetes присутствует в Docker for Mac, его легко установить и запустить на компьютере под управлением Windows и тем более Linux. Естественно, Kubernetes работает на Google Compute Engine (GKE) и с некоторыми особенностями на виртуалках других облачных провайдеров (AWS, Azure).

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

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

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

Наилучший способ познакомиться с работой в кластере под управлением Kubernetes - установить его. Самый простой способ - “поиграть” с кубернетесом на сайте Play with Kubernetes. Второй по сложности вариант - установить Minikube - утилиту командной строки для настройки и запуска однонодового кластера Kubernetes в виртуальной машине на локальном компьютере. Также, если есть в наличии один (или несколько) компьютеров (или виртуальных машин) и желание “покопаться” поглубже, можно настроить свой кластер самостоятельно (чем мы и займемся в следующей статье).

tweet Share