Множеством запущенных контейнеров нужно управлять: отслеживать работоспособность и перезапускать при сбоях, обновлять, разворачивать, масштабировать, останавливать. Такое управление называется оркестрацией.
Наиболее популярная система управления контейнерами — Kubernetes®, также известная как K8S. Это система с открытым исходным кодом, которая автоматизирует операции с контейнерами: мониторинг, распределение нагрузки, предоставление ресурсов и пр.
С помощью Kubernetes решают разнообразные прикладные задачи. Например, кластеры Kubernetes разворачивают на телеком-вышках, при организации умного дома и даже для управления узлами автомобиля.
Из чего состоит Kubernetes
В Kubernetes контейнеры или наборы контейнеров размещаются на подах (pod). Под — это логический хост. Один или несколько подов, а также сервисы для управления подами образуют узел, или ноду (node). Узел — это рабочая машина, виртуальная либо физическая. Однотипные узлы образуют группу узлов.
В свою очередь, узлы объединяются в кластер. У каждого кластера есть своя панель управления (control plane), именно она и обеспечивает оркестрацию. Один из узлов кластера становится главным — мастером (master). Он запускает управляющие процессы Kubernetes: сервер Kubernetes API, планировщик и контроллеры основных ресурсов.
В одном физическом кластере могут находиться несколько виртуальных. Виртуальный кластер называется пространством имён (namespace). В отличие от нод и подов, которые в кластере есть всегда, пространства имён надо использовать тогда, когда в них возникает реальная необходимость. Например, если приложение состоит из сервисов, то для каждого сервиса стоит создать пространство имён. Это поможет управлять разделением ресурсов физического кластера между сервисами.
В кластер Kubernetes можно устанавливать расширения, облегчающие управление. Например, графический веб-интерфейс Dashboard или инструмент для мониторинга ресурсов кластера Container Resource Monitoring. Они необязательны. Единственное обязательное расширение — это внутренний DNS-сервер кластера. Он необходим для общения сервисов между собой.
Что делает Kubernetes
- Автоматическое развёртывание. Вы можете описать состояние контейнеров в виде конфигурации, и Kubernetes автоматически обеспечит заданное состояние: будет развёртывать и удалять контейнеры, перераспределять ресурсы.
- Мониторинг сервисов и балансировка. Kubernetes распределяет сетевой трафик так, чтобы развёртывание было стабильным.
- Оркестрация хранилища. Kubernetes позволяет автоматически смонтировать систему хранения: локальное или облачное хранилище.
- Самоконтроль. Kubernetes перезапускает отказавшие контейнеры, заменяет их и завершает работу контейнеров, которые не соответствуют заданному уровню работоспособности.
Yandex Managed Service for Kubernetes
Kubernetes довольно сложно администрировать, даже если использовать его вместе с облачным хранилищем и не заботиться о физическом предоставлении ресурсов. Чтобы упростить администрирование и интеграцию, в Yandex Cloud есть сервис Managed Service for Kubernetes.
- При использовании Yandex Managed Service for Kubernetes вы создаёте кластер и группы узлов. При этом мастер-ноды, пространство имён, сервис DNS и прочие необходимые элементы развёртываются автоматически. А за обслуживание и обновление всей инфраструктуры кластера отвечает облачный провайдер.
- Приложения, помещённые в такой кластер, автоматически масштабируются: при пиковых нагрузках ресурсы подтягивают, при спаде — освобождают.
- У Yandex Managed Service for Kubernetes есть свой графический интерфейс. Дополнительные расширения не требуются.
- Для хранения Docker-образов для подов кластера используйте Yandex Container Registry.
- Мастер-узел можно настроить так, что он будет автоматически реплицироваться во всех зонах доступности Yandex Cloud.
- Благодаря интеграции с сервисом Yandex Identity and Access Management можно добавлять пользователей в кластеры Kubernetes по учётным записям вашей организации или, например, почте на @yandex.ru.
Практика
Создание кластера: https://practicum.yandex.ru/trainer/ycloud/lesson/166f2f98-e773-4e2a-949e-9c8f61459b24/
Первое приложение в кластере: https://practicum.yandex.ru/trainer/ycloud/lesson/e3ea7298-9654-426d-a8ee-23cf79502572/
Балансировка нагрузки: https://practicum.yandex.ru/trainer/ycloud/lesson/24518656-4d66-450d-b248-81f075156bbd/
Автомасштабирование в Managed Kubernetes
Масштабирование позволяет распределять нагрузку между контейнерами и снизить риск сбоя.
На прошлых уроках мы развернули приложение в кластере из одного пода, а затем масштабировали на три пода. Ручное масштабирование — занятие трудоёмкое и неэффективное. Посмотрим, как его автоматизировать.
Для автомасштабирования подходят инструменты, встроенные в Kubernetes: Horizontal Pod Autoscaler и Cluster Autoscaler. Они решают разные задачи и могут работать как по отдельности, так и совместно.
Horizontal Pod Autoscaler, как понятно из названия, масштабирует поды: увеличивает и уменьшает их количество, когда изменяется нагрузка. Cluster Autoscaler управляет количеством узлов, на которых поды запущены.
Давайте посмотрим на работу этих инструментов поближе.
Horizontal Pod Autoscaler
Horizontal Pod Autoscaler анализирует нагрузку на сервис и исходя из неё создаёт или удаляет поды.
Сервис ориентируется на лимиты (limits
) и запросы (requests
). Первые ограничивают ресурсы, доступные поду с контейнерами: процессор, память и др. Если их не указать, контейнер может забрать все ресурсы ноды. Запросы описывают количество свободных ресурсов, которыми должен располагать узел, чтобы на нём можно было запустить ещё один под с сервисом. Если ресурсов недостаточно, придётся создать дополнительный узел.
И тут в дело вступает наш второй инструмент.
Cluster Autoscaler
Cluster Autoscaler оценивает запросы подов и автоматически изменяет количество узлов кластера Kubernetes:
- Если из-за нехватки ресурсов не удаётся запустить поды, то новые узлы создаются и добавляются в кластер.
- Если узлы недостаточно утилизируются, а их поды можно перенести на другие узлы, то узлы освобождаются и удаляются из кластера.
В Yandex Managed Service for Kubernetes инструмент Cluster Autoscaler включён по умолчанию. Читайте об этом в разделе документации об автомасштабировании группы узлов
Практика
Автомасштабирование в Yandex Managed Kubernetes https://practicum.yandex.ru/trainer/ycloud/lesson/e8cadaf0-e0c4-4f19-a27a-99a58acc5a47/
📂 YandexCloud | Последнее изменение: 15.08.2024 13:21