10 июня 2022

3 рекомендации, которые вы должны знать при использовании Kubernetes StatefulSet

Создание кластерной среды любого типа требует большой работы, чтобы обеспечить согласованное развертывание и масштабирование. 

Хорошая новость заключается в том, что вы можете управлять контейнерами в масштабе использование StatefulSets в Kubernetes. 

StatefulSets предназначены для запуска приложений с отслеживанием состояния в Kubernetes с выделенным постоянным хранилищем.

В этом руководстве мы рассмотрим три передовых метода, которым можно научиться при использовании Kubernetes StatefulSets.  

Но сначала…

Что такое Kubernetes StatefulSet?

Kubernetes StatefulSet — это объект интерфейса прикладного программирования (API) рабочей нагрузки, используемый для управления приложениями с отслеживанием состояния. 

Вы можете использовать StatefulSets для развертывания и масштабирования набора модулей, что гарантирует порядок и уникальность модулей.  

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

Однако, в отличие от развертывания, StatefulSet может поддерживать фиксированные идентификаторы для каждого модуля. Хотя модули создаются на основе одной и той же спецификации, они не являются взаимозаменяемыми, а это означает, что каждый модуль имеет постоянный идентификатор, который сохраняется при любом изменении расписания. 

Если вы хотите обеспечить постоянство рабочей нагрузки с помощью томов хранилища, используйте StatefulSet как часть решения. 

Хотя отдельные поды в StatefulSet могут быть подвержены ошибкам, постоянный идентификатор пода может упростить сопоставление существующих томов с новыми подами, которые заменят отказавшие.  

Типичный случай использования StatefulSet — когда вам нужно развернуть первичные или вторичные серверы, такие как кластер базы данных, где вам нужно знать имя хоста каждого сервера, чтобы запустить кластер. 

Другой распространенный случай использования StatefulSet — это масштабирование вверх и вниз в определенном порядке, например, когда вы хотите начать с основного узла, за которым следует дополнительный узел. 

Лучше всего использовать StatefulSet, когда вам нужно:

  • Стабильные и четкие сетевые идентификаторы
  • Упорядоченное и уникальное развертывание и масштабирование
  • Постоянное и стабильное хранилище для всего планирования и повторного планирования приложений

Проверенные советы по использованию StatefulSet

Ниже приведены несколько рекомендаций по использованию Kubernetes StatefulSet.

1. Используйте команду kubectl apply для создания ресурса StatefulSet.

Команда использует файлы манифеста для создания, обновления и удаления ресурсов в ваших кластерах. Это декларативный метод настройки объектов, который сохраняет записи, сделанные для живых объектов, без обратного слияния изменений в файлы конфигурации объектов. 

Не забывайте, что нужно создать StorageClass при использовании кластеров с пулами узлов Windows Server, поскольку StorageClass по умолчанию использует ext4 как тип файловой системы (работает только для контейнеров Linux).

Также используйте NTFS в качестве типа хранилища файлов, если вы используете постоянный диск Compute Engine. 

Создайте манифест StatefulSet, используя определенный вами StorageClass. 

Например, ваш манифест может создать четыре Персистентволумеклайм и постоянный объем пары, представляющие четыре постоянных диска Computer Engine. Каждый под в StatefulSet использует один постоянный диск. 

Кроме того, включите селектор узлов в спецификацию вашего модуля, чтобы убедиться, что ваши модули правильно запланированы на узлах Windows Server. 

Наконец, создайте ресурс StatefulSet, выполнив эту команду: 

kubectl применить -f STATEFULSET_FILE

Не забудьте заменить STATEFULSET_FILE с именем файла манифеста. 

2. Знайте различные методы обновления StatefulSet.

Вы можете обновлять StatefulSets различными способами, используя декларативный метод применить кубектл быть самый распространенный. 

Например, если вы используете Google Kubernetes Engine и хотите обновить StatefulSet в предпочитаемом вами редакторе или непосредственно из вашей оболочки, используйте kubectl редактировать. Вы также можете выбрать редактор YAML в меню GKW Workloads в облачной консоли. 

Кроме того, вы можете развернуть обновления спецификации Pods (для ресурса StatefulSet), такие как его конфигурация, образ или запросы и использование ресурсов.  

Примените обновленный или новый файл манифеста при обновлении StatefulSet с помощью применить кубектл. Это полезно при внесении различных изменений в StatefulSet, например при масштабировании или указании новых версий приложения.  

Примечание: использование применить кубектл обновить ресурс работает только тогда, когда ресурс был создан с использованием kubectl создать – -save-config or применить кубектл.

Вы также можете использовать StatefulSet updateСтратегия поле, которое позволяет настраивать и отключать автоматические скользящие обновления для запросов ресурсов, меток, ограничений, контейнеров и аннотаций для модулей в пределах StatefulSet.  

Узнайте о различных методах обновления StatefulSet и определите, какой из них лучше всего подходит для вас. 

3. Определите, когда использовать StatefulSets

Бывают случаи, когда вам лучше использовать Kubernetes StatefulSets, чем Deployments.

Некоторые из этих ситуаций могут включать следующее.

  • Уменьшение масштаба или удаление StatefulSet. Ваши данные могут оставаться в безопасности при уменьшении масштаба или удалении StatefulSet, поскольку при этом не будут удалены тома, связанные с приложением Stateful. 

Обычно это более ценно, чем автоматическая очистка всех связанных ресурсов StatefulSet. 

Например, если модуль MySQL перезапускается или удаляется, вы можете получить доступ к данным в том же томе. 

  • Развертывание и масштабирование базы данных MySQL. Допустим, вы развернули базу данных MySQL в кластере K8s и масштабировали ее до трех реплик. Фронтенд-приложение также хочет получить доступ к вашему развернутому кластеру MySQL для чтения и записи данных.  

Запрос на чтение перенаправляется на три пода, но запрос на запись перенаправляется только в основной или первый под. Затем данные синхронизируются с другими модулями. 

Все это возможно при использовании StatefulSets. 

Ограничения Kubernetes StatefulSet

Хотя крайне важно знать передовой опыт использования Kubernetes StatefulSet, не менее важно понимать его ограничения, в том числе следующие. 

  • Хранилище данного пода должно быть предварительно предоставлено администратором или предоставлено PersistentVolume Provisioner (в зависимости от запрошенного класс хранения).  
  • StatefulSets не дает гарантий завершения работы pod при удалении StatefulSets. Чтобы добиться корректного и упорядоченного завершения работы модулей при удалении StatefulSet, вы можете масштабировать StatefulSet до нуля перед удалением. 
  • Для StatefulSets требуется безголовая служба, отвечающая за сетевую идентификацию модулей. Вам нужно будет создать эту службу. 
  • Вы можете попасть в неработающее состояние, которое требует ручного вмешательства для исправления, когда вы используете последовательные обновления с помощью политики управления подами по умолчанию (ЗаказаноГотово). 

Правильно используйте Kubernetes StatefulSet

Администрирование распределенных систем и приложений с отслеживанием состояния в Kubernetes может быть обширным и сложным делом, но это не высшая математика. 

Начните с основ и следуйте рекомендациям при использовании StatefulSets, чтобы сделать управление и запуск приложений с отслеживанием состояния в Kubernetes более эффективным и действенным. 

Об авторе 

Кайри Маттос


{"email": "Адрес электронной почты недействителен", "url": "Адрес сайта недействителен", "обязателен": "Отсутствует обязательное поле"}