Исполнительная точка зрения — «Что?»

Kubernetes (K8s) стал естественным выбором приложений для работы в облаке, даже если приложение само является Kubernetes.

Gardener — это управляемая Kubernetes как услуга с открытым исходным кодом, которая предлагает гомогенные кластеры K8s потенциально в любом облаке с возможностью настройки и масштабирования.

Gardener использовал возможность самостоятельного хостинга Kubernetes для размещения K8 в K8, чтобы предлагать K8 как услугу в масштабе. Под «масштабом» понимается не только количество узлов в кластере, но и количество кластеров в целом.

Перспектива продукта — «Почему?»

Ниже приведены НЕСКОЛЬКО ключевых особенностей Gardener как «продукта», который предлагает полностью управляемые K8 как услугу помимо стандартных функций K8, которые он наследует:

  • Эффективные операции второго дня
    Это включает в себя обновления, исправления, усиление безопасности и другое обслуживание. Кроме того, Kubernetes обеспечивает гибкость настройки политик и процедур для удовлетворения постоянно меняющихся требований организаций (и клиентов).
  • Демократизация мультиоблачных сред и переносимость
    Организация может принять решение о переносе своих приложений из частного облака в общедоступное или наоборот, либо контейнерные приложения могут быть распределены по мультиоблачным средам. В этом случае разработчики могут сосредоточиться на разработке, а не на базовой инфраструктуре.
  • Снижение общей стоимости владения
    Управление кластером Kubernetes в масштабе будет сложной задачей как с точки зрения ресурсов центра обработки данных, так и с точки зрения человеческих ресурсов в виде администраторов и инженеров K8s. Gardener в значительной степени уменьшит это бремя своих клиентов, выполняя большую часть тяжелой работы самостоятельно.
  • Единая панель управления
    Несмотря на то, что существует довольно много инструментов с открытым исходным кодом для создания и развертывания кластеров K8s, когда их число растет и когда кластеры распределяются между разными облачными провайдерами, становится трудно управлять экосистемой. С Gardener управление кластерами K8s в разных облаках осуществляется из единой панели управления, поддерживаемой элегантной панелью управления Gardener.

Инженерная перспектива — «Как?»

Как упоминалось ранее в этом блоге, Gardener вдохновлен Kubernetes и его возможностями самостоятельного размещения. Итак, дизайн Gardener можно лучше понять, если есть четкое представление о Kubernetes. Вот кратко о компонентах родного K8s.

Kubernetes имеет

  • Плоскость управления, которая управляет кластером Kubernetes в целом, на котором размещается основной компонент — сервер API.
  • Кластер K8s состоит из нескольких узлов K8s (это могут быть виртуальные машины или физические серверы), на которых фактически размещаются контейнерные приложения.
  • Эти контейнерные приложения внутри них работают как Pods, основные или атомарные вычислительные единицы, которые K8 может создавать и управлять ими.

Аналогично этому, Гарднер

  • Стрелять, аналогично Pods. Игровая площадка, состоящая только из узлов K8s для потребления клиентом.
  • Seed, аналогично K8s Node. Он содержит плоскость управления Shoot в пространстве имен Shoot вместе с пользовательскими контроллерами для пользовательских ресурсов, специфичных для Gardener.
  • Сад, аналог K8s Control Plane. Он управляет всей этой Экосистемой Садовника.

Архитектура Садовника выглядит примерно так, как показано ниже —

Все эти кластеры Shoot, Seed и Garden обязательно являются кластерами Kubernetes.

Приведенная выше схема архитектуры может немного напугать любого, кто плохо знаком с Kubernetes как таковым. На приведенной ниже диаграмме делается попытка чрезмерно абстрагировать концепцию, чтобы дать поверхностное представление о Гарденере.

Компоненты садовника

Gardener поставляется с набором специальных компонентов Gardener, дизайн которых снова вдохновлен компонентами K8s. Тем не менее, они служат более важной цели, предлагая бесперебойную работу, предоставляя K8s как услугу.

Компоненты садового кластера

  • Сервер Gardener API
    Сервер Gardener API — это собственное расширение Kubernetes, основанное на уровне агрегации. Он регистрируется через объект APIService и предназначен для работы внутри кластера Kubernetes, чей API он хочет расширить. Благодаря этому Kubernetes узнает о создании пользовательских объектов ресурсов (таких как CloudProfile, Project, Seed, Shoot и т. д.).
  • Диспетчер контроллера садовника
    Диспетчер контроллера садовника (GCM) запускает несколько циклов управления, которые помогают согласовывать Project ресурсы и выполнять необходимые действия с устаревшими проектами.
  • Gardener Scheduler
    Подобно Kube-Scheduler, который назначает Nodes на Pods, Gardener Scheduler назначает Seeds на Shoots. Стратегия планирования упоминается в записи намерения Shoot. Он может быть основан на стратегии того же региона или стратегии минимального расстояния.
  • Панель инструментов садовника
    Панель управления садовника — это графический веб-интерфейс для садовника.

Компоненты исходного кластера

Узлы K8s кластера семян размещают плоскость управления Shoot вместе с некоторыми специфическими компонентами Gardener, а именно:

  • Gardenlet
    Аналогично K8s, где у каждого узла есть основной агент с именем kubelet, который управляет жизненным циклом модулей. В Gardener есть Gardenlet per Seed, который управляет жизненным циклом тех побегов, чьи плоскости управления он содержит.
  • etcd
    Gardener использует компонент etcd-backup-restore для регулярного резервного копирования etcd, поддерживающего кластер Shoot, и восстановления в случае аварии. Развёртывается как sidecar через etcd-druid.
  • Диспетчер контроллеров компьютеров
    В каждом пространстве имен Shoot в Seed запускается диспетчер контроллеров компьютеров (MCM), который управляет узлами/машинами кластера Shoot. Machine-controller-manager создаст, загрузит, обновит, масштабирует и удалит узлы кластера Shoot и лежащие в его основе виртуальные машины.

Типичный поток

Типичный процесс предложения кластера Kubernetes для потребления будет состоять из следующих шагов:

  1. Создайте namespace в Seed для Shoot для плоскости управления Shoot
  2. Сгенерируйте secrets для рабочих узлов, чтобы общаться с плоскостью управления
  3. Создайте инфраструктуру, которая в основном состоит из настройки сети
  4. Разверните плоскость управления shoot в пространстве имен shoot в кластере seed с помощью MCM.
  5. Создайте машину CRDs в кластере Seed
  6. Подождите, пока сервер API кластера Shoot не ответит.
  7. Наконец, разверните kube-systemдемонов, таких как kube-proxy и далее add-ons

и вы можете идти.

Еще несколько ключевых моментов о Gardener

  • Несмотря на то, что на основе K8s, Gardener может управлять базовой инфраструктурой с помощью Machine Controller Manager.
  • Gardener также поддерживает резервное копирование и восстановление etcd с поддержкой полных моментальных снимков и дельта-снимков по сравнению с полными снимками.
  • Поддержка пользовательской операционной системы с учетом тесной связи между приложением и операционной системой.
  • Непрерывная оценка производительности и оповещения с интеграцией таких инструментов, как Grafana и Prometheus.

Вывод

В заключение, Gardener — это полностью управляемая Kubernetes как услуга, сделанная правильно. Благодаря усилиям сообщества открытого исходного кода он становится еще лучше, решая настоящие проблемы предприятий.

Gardener — это то, что создано для Cloud Native и предоставляется как услуга!

С уважением и благодарностью,
Самарт Деягонд

Эта статья представляет собой обзор Gardener. Для более глубокого понимания см. Ниже ссылки-

  1. Садовник GitHub
  2. Садовник — ботаник Kubernetes от Vasu C и Rafael
  3. Ютуб-канал садовника