Юни 10, 2022

3 най-добри практики, които трябва да знаете, когато използвате Kubernetes StatefulSet

Създаването на клъстерирана среда от всякакъв вид включва много работа, за да позволи последователно внедряване и мащабиране. 

Добрата новина е, че можете да управлявате контейнери в мащаб използвайки StatefulSets в Kubernetes. 

StatefulSets са предназначени за стартиране на приложения с състояние на Kubernetes със специално, постоянно съхранение.

В това ръководство ще разгледаме три най-добри практики, от които да се учим, когато използвате Kubernetes StatefulSets.  

Но първо ...

Какво е Kubernetes StatefulSet?

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

Можете да използвате StatefulSets за разгръщане и мащабиране на набор от Pods, което осигурява гаранции за реда и уникалността на Pod.  

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

Въпреки това, за разлика от разгръщането, StatefulSet може да поддържа лепкави самоличности за всеки Pod. Докато модулите са създадени от една и съща спецификация, те не са взаимозаменяеми, което означава, че всеки Pod има постоянен идентификатор, който поддържа по време на всяко пренасрочване. 

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

Докато отделните модули в рамките на StatefulSet могат да бъдат податливи на грешки, постоянният идентификатор на Pod може да улесни съпоставянето на съществуващите томове с новите модули, които заменят тези, които са се провалили.  

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

Друг често срещан случай на използване на StatefulSet е, когато мащабирате нагоре и надолу в определен ред, като например когато искате да започнете с първичния възел, последван от вторичния възел. 

Най-добре е да използвате StatefulSet, когато имате нужда от:

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

Изпитани съвети при използване на StatefulSet

По-долу са дадени няколко най-добри практики за използване на Kubernetes StatefulSet.

1. Използвайте командата kubectl apply a за създаване на ресурс StatefulSet

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

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

Също така, използвайте NTFS като тип съхранение на файлове, ако използвате постоянен диск на Compute Engine. 

Създайте манифест StatefulSet, като използвате StorageClass, който сте дефинирали. 

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

Освен това включете селектор на възли към вашата спецификация на Pod, за да сте сигурни, че вашите Pods са планирани правилно на възлите на Windows Server. 

Накрая създайте ресурс StatefulSet, като изпълните тази команда: 

kubectl приложи -f STATEFULSET_FILE

Не забравяйте да ги замените STATEFULSET_FILE с името на файла на манифеста. 

2. Познайте различните методи за актуализиране на StatefulSet

Можете да актуализирате StatefulSets по различни начини с декларативния метод kubectl се прилага да бъде най-често. 

Така например, ако използвате Google Kubernetes Engine и искате да актуализирате StatefulSet в предпочитания от вас редактор или директно от вашата обвивка, използвайте kubectl редактиране. Можете също да изберете YAML редактор от менюто GKW Workloads в облачната конзола. 

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

Приложете актуализиран или нов файл на манифест, когато актуализирате StatefulSet с помощта на kubectl се прилага. Полезно е, когато правите различни промени в StatefulSet, като например когато мащабирате или посочвате нови версии на приложението.  

Забележка: Използване kubectl се прилага за актуализиране на ресурс работи само когато ресурсът е създаден с помощта на kubectl create – -save-config or kubectl се прилага.

Можете също да използвате StatefulSet's стратегия за актуализиране поле, което ви позволява да настроите и деактивирате автоматизираните непрекъснати актуализации за заявки за ресурси, етикети, ограничения, контейнери и пояснения за Pods в рамките на StatefulSet.  

Познайте различните методи за актуализиране на вашия StatefulSet и определете кой работи най-добре за вас. 

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

Има случаи, когато е по-добре да използвате Kubernetes StatefulSets, отколкото Deployments.

Някои от тези ситуации могат да включват следното.

  • Намаляване или изтриване на StatefulSet. Вашите данни могат да останат в безопасност, когато намалявате или изтривате StatefulSet, тъй като това няма да изтрие томовете, свързани с приложението Stateful. 

Обикновено е по-ценно от автоматичното изчистване на всички свързани StatefulSet ресурси. 

Например, ако MySQL Pod се рестартира или бъде изтрит, можете да получите достъп до данните в същия обем. 

  • Разгръщане и мащабиране на MySQL база данни. Да приемем, че сте разгърнали MySQL база данни в клъстера K8s и сте я мащабирали до три реплики. Предното приложение също иска да получи достъп до вашия разгърнат MySQL клъстер, за да чете и записва данни.  

Заявката за четене се препраща до три модула, но заявката за запис се препраща само към основния или първия модул. След това данните се синхронизират с другите Pods. 

Всичко това е възможно, когато използвате StatefulSets. 

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

Въпреки че е от решаващо значение да знаете най-добрите практики за използване на Kubernetes StatefulSet, също толкова важно е да разберете неговите ограничения, които включват следното. 

  • Хранилището на дадено Pod трябва да бъде предварително осигурено от администратор или предоставено от PersistentVolume Provisioner (въз основа на заявеното клас за съхранение).  
  • StatefulSets не предлагат гаранции за прекратяване на модула, когато StatefulSets са изтрити. За да постигнете грациозно и подредено прекратяване на pods при изтриване на StatefulSet, можете да намалите StatefulSet до нула, преди да изтриете. 
  • StatefulSets изискват услуга без глава, отговорна за мрежовата идентичност на Pods. Ще трябва да създадете тази услуга. 
  • Можете да влезете в повредено състояние, което се нуждае от ръчна намеса, за да се поправи, когато използвате непрекъснати актуализации чрез политиката за управление по подразбиране (Поръчано Готово). 

Използвайте Kubernetes StatefulSet по правилния начин

Администрирането на разпределени системи и приложения за състояние на Kubernetes може да бъде широко и сложно начинание, но не е ракетна наука. 

Започнете с основите и следвайте най-добрите практики, когато използвате StatefulSets, за да направите управлението и стартирането на приложения с състояние на Kubernetes по-ефективно и ефикасно. 

За автора 

Кайри Матос


{"email": "Имейл адресът е невалиден", "url": "Адресът на уебсайта е невалиден", "задължително": "Задължително поле липсва"}