Кратко (TL;DR)
Kubernetes на Hetzner Cloud — это не управляемый сервис, однако бесчисленное множество команд запускают там продакшен-кластеры. Официальные интеграции с открытым исходным кодом делают это возможным: hcloud-cloud-controller-manager (HCCM) связывает кластер с API Hetzner Cloud и Robot, драйвер CSI предоставляет тома для постоянного хранения, а частные сети (Private Networks) и балансировщики нагрузки дополняют архитектуру кластера. Опираясь на эти интеграции, сообщество разработало такие инструменты, как terraform-hcloud-kube-hetzner, hetzner-k3s и модули Terraform на базе Talos, которые позволяют развернуть готовый к продакшену кластер всего за несколько шагов.
Зачем нужен 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 Cloud?
Kubernetes на Hetzner Cloud: запускайте самостоятельно, не создавая всё с нуля
Запуск Kubernetes на Hetzner Cloud — это осознанный выбор: полный контроль над собственным кластером вместо зависимости от управляемого сервиса. То, что сначала может показаться большим объемом ручной работы, на самом деле поддерживается хорошо развитой экосистемой. Тема «hetzner-cloud» на GitHub в настоящее время содержит 383 публичных репозитория, и почти все самые популярные из них — это инструменты для Kubernetes. terraform-hcloud-kube-hetzner (3,9 тыс. звезд) и (3,7 тыс. звезд) вместе имеют более 7500 звезд.
Собственные официальные интеграции Hetzner с открытым исходным кодом обеспечивают основу: Cloud Controller Manager, CSI-драйвер, провайдер Terraform и hcloud CLI. Они сопоставляют ресурсы Kubernetes, такие как узлы, службы и тома, непосредственно с ресурсами Hetzner Cloud. Давайте рассмотрим каждый компонент подробнее.
Cloud Controller Manager: мост к API
(HCCM) соединяет кластер Kubernetes с API Hetzner Cloud и Robot. Он реализует интерфейсы, определенные Kubernetes в вышестоящем пакете k8s.io/cloud-provider — механизм, который позволяет каждому облачному провайдеру интегрировать свою собственную логику в общий набор контроллеров. В HCCM эту работу выполняют четыре контроллера:
- Контроллер узлов (Node Controller): инициализирует каждый узел Kubernetes и добавляет метаданные, такие как тип инстанса и идентификатор провайдера. Этот идентификатор соответствует идентификатору сервера в Hetzner Cloud или Robot с префиксом hcloud:// или hrobot://, что обеспечивает неизменяемую связь между узлом Kubernetes и сервером.
- Контроллер жизненного цикла узлов (Node Lifecycle Controller): отслеживает узлы, которые больше не «готовы», проверяет, существует ли связанный сервер или был ли он выключен, и очищает объекты узлов, чьи серверы больше не существуют.
- Контроллер маршрутов (Routes Controller): создает маршрут в частной сети для каждого узла, сопоставляя его Pod CIDR с его частным IP-адресом. Это позволяет трафику, предназначенному для подов на узле, перемещаться напрямую по частной сети без накладных расходов оверлейной сети, такой как VXLAN.
- Контроллер служб (Service Controller): автоматически создает и настраивает балансировщик нагрузки Hetzner Cloud для каждой службы Kubernetes типа LoadBalancer.
Последний раунд оптимизаций показывает, насколько активно развивается этот компонент: общий кэш для контроллеров узлов и событийно-ориентированная сверка маршрутов вместо периодической сверки сокращают количество запросов к API Hetzner Cloud примерно на 76% во время масштабирования и на 94% в установившемся режиме. Изменение контроллера маршрутов не ограничилось HCCM. Оно также было внесено непосредственно в основной проект Kubernetes как KEP-5237 — пример того, как работа над интеграцией Hetzner приносит пользу вышестоящему проекту. Вы можете найти все подробности в нашей статье в блоге «Как мы сократили количество запросов к API в Hetzner Cloud Controller Manager». Все улучшения включены в HCCM версии v1.33 и выше.
Драйвер CSI: постоянное хранилище для рабочих нагрузок с сохранением состояния
Базы данных, очереди сообщений, мониторинг — едва ли какой-либо продакшен-кластер может обойтись без постоянного хранилища. Официальный csi-driver представляет собой драйвер интерфейса хранения контейнеров (Container Storage Interface) для Hetzner Cloud, который поддерживает тома ReadWriteOnce в Kubernetes и других оркестраторах контейнеров.
Для пользователей процесс следует стандартным рабочим процессам Kubernetes: вы создаете PersistentVolumeClaim, используя StorageClass hcloud-volumes, и назначаете его поду. Затем Kubernetes автоматически подготавливает PersistentVolume с помощью CSI-драйвера. Для этого драйвер создает том Hetzner Cloud, подключает его к соответствующему узлу и делает хранилище доступным для пода.
Сети и балансировка нагрузки: как движется трафик
Два дополнительных продукта Hetzner Cloud дополняют картину:
Частные сети (Private Networks) позволяют соединять узлы кластера через частную сеть. То, как вы настраиваете сеть подов внутри кластера, зависит от выбранного вами сетевого решения. Одним из вариантов является Routes Controller от HCCM, который создает маршруты, делающие сеть подов каждого узла доступной через его частный IP-адрес.
Балансировщики нагрузки служат внешней точкой входа. Контроллер сервисов HCCM управляет ими автоматически: все, что вам нужно — это создать Сервис типа LoadBalancer в вашем классе, а Kubernetes создаст и настроит соответствующий Hetzner Cloud Load Balancer. В типичных конфигурациях он принимает трафик из интернета и перенаправляет его через Частную сеть на контроллер Ingress, например Traefik, запущенный на рабочих узлах.
Вокруг этих официальных компонентов сформировалась удивительно активная экосистема сообщества. Особо выделяются следующие проекты:
(3,9 тыс. звезд) обещает «оптимизированный и не требующий обслуживания Kubernetes на Hetzner Cloud одной командой». Он объединяет Terraform с k3s, легковесным дистрибутивом Kubernetes.
(3,7 тыс. звезд) использует аналогичный подход в качестве автономного интерфейса командной строки. Согласно собственному описанию, он предлагает самый простой и быстрый способ развертывания готовых к работе в продакшене кластеров Kubernetes на Hetzner Cloud, также используя k3s.
Конфигурации на базе Talos предлагают иной подход к операционной системе: Talos — это минималистичная ОС на базе API, созданная исключительно для Kubernetes. В дополнение к модулю Terraform terraform-hcloud-talos (349 звезд), модуль Kubernetes hcloud-k8s реализует подход, используемый в официальном учебном пособии сообщества для частных кластеров.
cluster-api-provider-hetzner (1,1 тыс. звезд) позволяет создавать кластеры Kubernetes и управлять ими декларативно на Hetzner Cloud и выделенных серверах (bare metal). Проект создан на базе API кластера Kubernetes и в первую очередь ориентирован на опытных пользователей, желающих автоматизировать управление своими кластерами.
Кроме того, существуют официальные интеграции Hetzner, которые работают «под капотом» почти во всех этих конфигурациях: провайдер Terraform (728 звезд), (1,8 тыс. звезд) — и, конечно же, сам HCCM и драйвер CSI. Обзор других проектов Kubernetes на Hetzner Cloud можно найти в Kubernetes section of our awesome-hcloud list.
Эталонная архитектура для производственных сред
Как на самом деле выглядит готовый к продакшену кластер? В руководстве сообщества «Частный кластер Kubernetes с помощью Terraform и Talos» представлена архитектура, объединяющая все компоненты:
- Три узла плоскости управления для высокодоступной плоскости управления (etcd, kube-apiserver, kube-scheduler)
- Рабочие узлы без публичных IP-адресов, распределенные по группам размещения (Placement Groups), чтобы гарантировать работу виртуальных машин на «железе» с разными физическими характеристиками
- Частная сеть (например, 10.21.0.0/16) в качестве магистральной сети кластера
- Виртуальная машина egress, выполняющая роль шлюза NAT, которая предоставляет частным узлам доступ в интернет, а также доступ по SSH для запуска kubectl и talosctl
- Балансировщик нагрузки Hetzner, управляемый Kubernetes, в качестве точки входа для ingress-nginx
- Longhorn для распределенного постоянного хранения и cert-manager для TLS-сертификатов
- Cluster Autoscaler, который при необходимости подготавливает дополнительные рабочие узлы
Для автоматического масштабирования в Hetzner Cloud предусмотрен официальный cloud provider integration for the Kubernetes Cluster Autoscaler. Он позволяет при необходимости автоматически развертывать дополнительные облачные серверы в качестве рабочих узлов. Когда они больше не нужны, автошкалировщик может удалить их. Это позволяет вашей инфраструктуре адаптироваться к требованиям приложений к ресурсам.
Для еще более высокой доступности вы можете распределить рабочие узлы и балансировщики нагрузки по нескольким локациям и добавить резервные виртуальные машины egress. В руководстве подробно описаны оба варианта.
Какой подход подходит для вашего проекта?
Выбор правильного подхода зависит не столько от размера вашего кластера, сколько от ваших конкретных требований:
- Быстрое создание и запуск работающего кластера: Если вы хотите начать работу с минимальными усилиями, хорошим выбором станут hetzner-k3s или terraform-hcloud-kube-hetzner. Оба они позволяют за короткое время развернуть кластер с официальными интеграциями.
- Инфраструктура как код с максимальным уровнем защиты: Конфигурации Terraform на базе Talos особенно хорошо подходят, если вам нужна неизменяемая (immutable) операционная система, управляемая полностью через API, и полностью изолированный частный кластер, как показано в эталонной архитектуре выше.
- Полный контроль над каждым компонентом: Если вы создаете кластер вручную или с помощью собственных средств автоматизации, вы можете установить HCCM и драйвер CSI напрямую и самостоятельно принимать решения по каждой детали — от сетевой топологии до стратегии хранения.
- Декларативное управление кластером: Если вы хотите автоматизировать создание, управление и обновление кластеров Kubernetes, Cluster API Provider Hetzner предлагает нативное для Kubernetes решение для облачных и физических сред.
Все четыре подхода имеют общую основу: Cloud Controller Manager, драйвер CSI, частные сети и балансировщики нагрузки. Как только вы поймете, как эти компоненты работают вместе, вы сможете принимать обоснованные решения о том, какие инструменты использовать, и эффективнее устранять неполадки, если что-то пойдет не так.
Заключение
Kubernetes на Hetzner Cloud сочетает в себе официальные интеграции с открытым исходным кодом и активную экосистему сообщества. HCCM преобразует концепции Kubernetes в облачные ресурсы, драйвер CSI обеспечивает постоянное хранение данных, а частные сети и балансировщики нагрузки образуют сетевую основу. Такие проекты, как kube-hetzner, hetzner-k3s и модули Talos, опираются на эти компоненты для создания готовых к продакшену кластеров за короткое время. Если вы хотите узнать больше, вы можете найти исходный код всех этих проектов на GitHub, а также более 350 руководств в сообществе Hetzner — от вашего первого кластера до высокодоступной мультирегиональной архитектуры.
Инжиниринг
Максимилиан Фейкс
Стажер, разработка программного обеспечения konsoleH












