Готовый к использованию Kubernetes в облаке Hetzner

Эффективное применение CCM, CSI и экосистемы открытого исходного кода
Почему Kubernetes? Кто его использует и для чего?
Kubernetes — это платформа с открытым исходным кодом, которая автоматизирует развертывание, масштабирование и управление контейнеризированными приложениями. Первоначально разработанная в Google и выпущенная в 2014 году, она стала стандартом де-факто для оркестровки контейнеров. Ее основные преимущества можно суммировать в трех пунктах:
- Автоматическое масштабирование: во время пиковых нагрузок кластер автоматически запускает дополнительные экземпляры и уменьшает их количество при снижении спроса. Даже такие организации, работающие с большими объемами данных, как CERN, используют Kubernetes для быстрого масштабирования своих систем в ответ на внезапные всплески спроса.
- Самовосстановление: если выходит из строя контейнер или даже целый узел, Kubernetes автоматически перезапускает затронутые рабочие нагрузки или перемещает их на другие узлы. Приложение остается доступным, и никому не нужно вставать посреди ночи.
- Последовательная работа: будь то микросервисная архитектура, традиционное веб-приложение или конвейер CI/CD, все использует одни и те же декларативные конфигурации и работает согласованно, независимо от базовой инфраструктуры.
- Пользователи Kubernetes столь же разнообразны: команды, работающие с SaaS-приложениями или микросервисами, которым необходимо обрабатывать изменяющиеся нагрузки, команды DevOps, стремящиеся автоматизировать развертывание, и организации, желающие объединить несколько приложений на общей инфраструктуре и управлять ими согласованно.
Анализ экосистемы показывает, насколько разнообразны варианты использования Kubernetes в Hetzner Cloud. Самым популярным проектом сообщества по этой теме, получившим 5,7 тыс. звезд, является, что несколько неожиданно, руководство «Кластеры Kubernetes для любителей», а такие инструменты, как hetzner-k3s, явно обещают «готовые к использованию в производственной среде» кластеры. От проектов выходного дня до производственных систем — экосистема охватывает все.
Если вы используете одну виртуальную машину с Docker Compose для небольшой статической конфигурации, Kubernetes вам не обязательно нужен. Он становится интересным, когда начинают иметь значение доступность, масштабируемость и автоматизация. И именно тогда возникает вопрос: как правильно настроить Kubernetes в облаке Hetzner?

Kubernetes в облаке Hetzner: запустите его самостоятельно, не создавая все с нуля.
Запуск Kubernetes в Hetzner Cloud — это осознанный выбор: полный контроль над собственным кластером вместо зависимости от управляемого сервиса. То, что на первый взгляд может показаться большим объемом ручной работы, на самом деле поддерживается хорошо развитой экосистемой. В теме GitHub «hetzner-cloud» в настоящее время перечислены 383 публичных репозитория, и почти все самые популярные из них — это инструменты для Kubernetes. Только terraform-hcloud-kube-hetzner (3,9 тыс. звезд) и hetzner-k3s (3,7 тыс. звезд) имеют в сумме более 7500 звезд.
Основой служат собственные официальные интеграции Hetzner с открытым исходным кодом: Cloud Controller Manager, драйвер CSI, провайдер Terraform и CLI hcloud. Они напрямую сопоставляют ресурсы Kubernetes, такие как узлы, сервисы и тома, с ресурсами Hetzner Cloud. Давайте рассмотрим каждый компонент подробнее.

Cloud Controller Manager: мост к API
hcloud -cloud-controller-manager (HCCM) подключает кластер Kubernetes к API Hetzner Cloud и Robot. Он реализует интерфейсы, определенные Kubernetes в пакете k8s.io/cloud-provider — механизм, позволяющий каждому облачному провайдеру интегрировать свою собственную логику в общий набор контроллеров. В HCCM эту работу выполняют четыре контроллера:
- Контроллер узлов: инициализирует каждый узел Kubernetes и добавляет метаданные, такие как тип экземпляра и идентификатор поставщика. Этот идентификатор соответствует идентификатору сервера в Hetzner Cloud или Robot, с префиксом или – обеспечивая неизменяемую связь между узлом Kubernetes и сервером .hcloud://hrobot://
- Контроллер жизненного цикла узлов: отслеживает узлы, которые больше не «готовы», проверяет, существует ли связанный с ними сервер или он был выключен, и удаляет объекты узлов, серверы которых больше не существуют.
- Контроллер маршрутов: Создает маршрут в частной сети для каждого узла, сопоставляя CIDR его пода с его частным IP-адресом. Это позволяет трафику, предназначенному для подов на узле, проходить напрямую через частную сеть, без накладных расходов, связанных с использованием оверлейной сети, такой как VXLAN.
- Контроллер сервисов: автоматически создает и настраивает балансировщик нагрузки Hetzner Cloud Load Balancer для каждого сервиса Kubernetes соответствующего типа .LoadBalancer.
Последний раунд оптимизаций показывает, насколько активно разрабатывается этот компонент: общий кэш для контроллеров узлов и согласование маршрутов на основе событий вместо периодического согласования сокращают количество запросов к API Hetzner Cloud примерно на 76% при масштабировании и на 94% в стабильном режиме. Изменения в контроллере маршрутов не ограничились HCCM. Они также были напрямую внесены в основной проект Kubernetes в рамках KEP-5237 — пример того, как работа над интеграцией Hetzner приносит пользу основному проекту. Все подробности вы можете найти в нашей статье в блоге «Как мы сократили количество запросов к API в Hetzner Cloud Controller Manager». Все улучшения включены в HCCM версии 1.33 и более поздние версии.

Драйвер CSI: Постоянное хранилище для рабочих нагрузок с сохранением состояния.
Базы данных, очереди сообщений, мониторинг — практически ни один производственный кластер не может обойтись без постоянного хранилища. Официальный csi-драйвер — это драйвер интерфейса контейнерного хранилища для Hetzner Cloud, который поддерживает тома ReadWriteOnce в Kubernetes и других оркестраторах контейнеров.
Для пользователей процесс соответствует стандартным рабочим процессам Kubernetes: вы создаете PersistentVolumeClaim, используя StorageClass, и назначаете его поду. Затем Kubernetes автоматически выделяет PersistentVolume через драйвер CSI. Для этого драйвер создает Hetzner Cloud Volume, подключает его к соответствующему узлу и предоставляет хранилище поду .hcloud-volumes
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: hcloud-volumesСетевые технологии и балансировка нагрузки: как происходит обмен трафиком.
Картину дополняют еще два облачных продукта Hetzner:
- Частные сети позволяют соединять узлы кластера через частную сеть. Способ настройки сети подов внутри кластера зависит от выбранного вами сетевого решения. Один из вариантов — контроллер маршрутов HCCM, который создает маршруты, обеспечивающие доступ к сети подов каждого узла через его частный IP-адрес.
- Балансировщики нагрузки обеспечивают внешнюю точку входа. Контроллер сервисов HCCM управляет ими автоматически: все, что вам нужно, это экземпляр в вашем кластере, и Kubernetes создаст и настроит соответствующий балансировщик нагрузки Hetzner Cloud. В типичных конфигурациях он принимает трафик из интернета и перенаправляет его по частной сети на контроллер входящего трафика, например, работающий на рабочих узлах .ServiceLoadBalancerTraefik
Экосистема сообщества: четыре способа построения кластера
Вокруг этих официальных компонентов сформировалась удивительно активная общественная экосистема. Следующие проекты заслуживают особого внимания:
terraform-hcloud-kube-hetzner (3,9 тыс. звезд) обещает «оптимизированный и не требующий обслуживания Kubernetes в облаке Hetzner Cloud одной командой». Он объединяет Terraform с k3s, легковесным дистрибутивом Kubernetes.
hetzner-k3s (3,7 тыс. звезд) использует аналогичный подход в качестве автономного интерфейса командной строки. Согласно собственному описанию, он предлагает самый простой и быстрый способ развертывания готовых к использованию кластеров Kubernetes в облаке Hetzner, также с использованием k3s.
В конфигурациях на основе Talos используется другой подход к операционной системе: Talos — это минималистичная ОС с API-интерфейсом, созданная исключительно для Kubernetes. В дополнение к модулю Terraform terraform-hcloud-talos (349 звезд), модуль Kubernetes hcloud-k8s предоставляет подход, используемый в официальном руководстве сообщества для частных кластеров.
cluster-api-provider-hetzner (1,1 тыс. звезд) позволяет декларативно создавать и управлять кластерами Kubernetes в облаке Hetzner и на физических серверах. Проект основан на Kubernetes Cluster API и в первую очередь ориентирован на опытных пользователей, желающих автоматизировать операции с кластерами.
Кроме того, в большинстве этих конфигураций за кулисами работают официальные интеграции Hetzner: провайдер Terraform (728 звезд), hcloud-CLI (1,8 тыс. звезд) — и, конечно же, сами HCCM и драйвер CSI. Обзор других проектов Kubernetes на Hetzner Cloud можно найти в разделе Kubernetes нашего списка awesome-hcloud.
Эталонная архитектура для производственных сред
Как на самом деле выглядит кластер, готовый к использованию в производственной среде? В руководстве сообщества «Частный кластер Kubernetes с использованием Terraform и Talos» представлена архитектура, объединяющая все компоненты:
- Три узла плоскости управления для обеспечения высокой доступности плоскости управления (etcd, kube-apiserver, kube-scheduler)
- Рабочие узлы без публичных IP-адресов, распределенные по группам размещения, обеспечивают работу виртуальных машин на различном физическом оборудовании.
- Частная сеть (например, 10.21.0.0/16) в качестве основы кластера.
- Исходящая виртуальная машина, выступающая в качестве NAT-шлюза, позволяет частным узлам получать доступ к интернету и обеспечивает SSH-доступ для запуска kubectl и talosctl.
- Балансировщик нагрузки Hetzner, управляемый Kubernetes, служит точкой входа для ingress-nginx.
- Longhorn для распределенного постоянного хранения данных и cert-manager для TLS-сертификатов
- Cluster Autoscaler — это инструмент, который выделяет дополнительные рабочие узлы по мере необходимости.
Для автоматического масштабирования в облаке Hetzner существует официальная интеграция облачного провайдера с Kubernetes Cluster Autoscaler. Она позволяет автоматически выделять дополнительные облачные серверы в качестве рабочих узлов по мере необходимости. Когда они больше не нужны, Autoscaler может их удалить. Это позволяет вашей инфраструктуре адаптироваться к потребностям ваших приложений в ресурсах.
Для еще большей высокой доступности можно распределить рабочие узлы и балансировщики нагрузки по нескольким локациям и добавить резервные виртуальные машины для исходящего трафика. В руководстве пошагово описаны оба варианта.
Какой подход подходит для вашего проекта?
Выбор правильного подхода зависит не столько от размера вашего кластера, сколько от ваших конкретных требований:
- Быстро разверните работающий кластер: если вы хотите начать работу с минимальными усилиями, hetzner-k3s или terraform-hcloud-kube-hetzner — хороший выбор. Оба позволяют развернуть кластер с официальными интеграциями за короткое время.
- Инфраструктура как код с максимальным уровнем защиты: конфигурации Terraform на основе Talos особенно хорошо подходят, если вам нужна неизменяемая операционная система, полностью управляемая API, и полностью приватный кластер — как показано в приведенной выше эталонной архитектуре.
- Полный контроль над каждым компонентом: если вы создаете кластер вручную или с помощью собственных инструментов автоматизации, вы можете установить HCCM и драйвер CSI напрямую и самостоятельно определить все детали — от топологии сети до стратегии хранения данных.
- Декларативное управление кластерами: Если вы хотите автоматизировать создание, управление и обновление кластеров Kubernetes, поставщик API для кластеров Hetzner предлагает решение, разработанное специально для Kubernetes, как для облачных, так и для физических серверов.
Все четыре подхода основаны на одном принципе: Cloud Controller Manager, драйвер CSI, частные сети и балансировщики нагрузки. Поняв, как эти компоненты взаимодействуют друг с другом, вы сможете принимать обоснованные решения о выборе инструментов и более эффективно устранять неполадки в случае возникновения проблем.
Заключение
Kubernetes в облаке Hetzner сочетает в себе официальные интеграции с открытым исходным кодом и активную экосистему сообщества. HCCM преобразует концепции Kubernetes в облачные ресурсы, драйвер CSI обеспечивает постоянное хранилище, а частные сети и балансировщики нагрузки формируют сетевую основу. Такие проекты, как kube-hetzner, hetzner-k3s и модули Talos, основаны на этих компонентах и позволяют быстро создавать готовые к работе кластеры. Для более подробного изучения вы можете найти исходный код всех этих проектов на GitHub, а также более 350 руководств в сообществе Hetzner — от вашего первого кластера до высокодоступной многолокационной архитектуры.
0 комментариев
Вставка изображения
Оставить комментарий