Знакомство с Kubernetes. Часть 0: Что это?
Apr 15, 2018 14:17 · 479 words · 3 minute read
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
в виртуальной машине на локальном компьютере.
Также, если есть в наличии один (или несколько) компьютеров (или виртуальных машин) и желание “покопаться” поглубже, можно настроить свой кластер самостоятельно (чем мы и займемся в следующей статье).