Рейтинг
0.00

Hetzner дата-центры

23 читателя, 286 топиков

Готовый к использованию 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 — от вашего первого кластера до высокодоступной многолокационной архитектуры.

Важная информация для клиента: требуется обновление прошивки



Мы хотели бы сообщить вам, что твердотельные накопители Micron 5200, установленные в ваших выделенных серверах, могут демонстрировать снижение производительности после длительного использования:

По этой причине для решения этих проблем доступно обновление прошивки от производителя. Поэтому просим вас установить обновление как можно скорее.

Почему необходимо обновление?
Согласно имеющейся информации, скорость чтения и записи SSD-накопителей Micron 5200 может снизиться примерно после 65 000 часов работы. SSD-накопители с меньшим временем работы, как правило, не демонстрируют никаких проблем. Тем не менее, мы рекомендуем выполнить обновление в качестве профилактической меры.

Что вам следует сделать?
Пожалуйста, обновите прошивку до версии D1MU040 через систему восстановления, используя команду «update_crucial_micron». Вы можете использовать программное обеспечение smartctl для проверки установленной прошивки на вашем SSD. Для получения дополнительной информации посетите docs.hetzner.com/robot/dedicated-server/troubleshooting/serial-numbers-and-information-on-defective-hard-drives

Обновление занимает до пяти минут на один диск.
Дополнительно: Мы можем выполнить обновление за вас.
В качестве альтернативы, мы будем рады выполнить обновление в удобное для вас время с понедельника по пятницу с 6:00 до 22:00 (CET).
Если вы хотите, чтобы мы выполнили обновление, пожалуйста, отправьте подтвержденный запрос в службу поддержки через административный интерфейс Robot. Для этого сначала выберите затронутый сервер по адресу robot.hetzner.com/server Затем перейдите на вкладку «Поддержка», выберите категорию «Сервер – Нестабильная работа» в разделе «Техническая поддержка» и предоставьте следующую информацию:

Желаемый период технического обслуживания (время простоя до 60 минут)
Подтверждение того, что вы осведомлены о потенциальном риске потери данных.
Обратите внимание, что мы можем продолжить работу только на основании подтвержденного запроса в службу поддержки. Простого ответа на это письмо недостаточно.

По данным производителя, потеря данных, как правило, не ожидается. Однако мы настоятельно рекомендуем создать полную резервную копию ваших данных перед обновлением прошивки.

Каковы последствия обновления?
После успешной установки, как правило, восстанавливается полная производительность ввода-вывода SSD-накопителей. По заявлению производителя, описанные проблемы с производительностью после этого больше не будут возникать.

Спасибо за вашу поддержку.

С наилучшими пожеланиями,
Hetzner Online