Как да разположите приложения в Kubernetes

Kubernetes е една от най-популярните платформи за автоматизация за внедряване, мащабиране и работа с контейнери за приложения в клъстер от хостове или възли.

Тази статия ще обсъди един от централните обекти в Kubernetes: внедряването. Целта е да разберете поведението му и как да го създавате, актуализирате и изтривате.

Какво е внедряване?

Разполагането е един от обектите, използвани за стартиране на Pods. Най-добрите практики на Kubernetes насърчават използването на внедрявания за приложения без състояние. Без внедряване ще трябва ръчно да създавате, актуализирате и изтривате множество Pods, което би било досадно и неосъществимо за много Pods.

Внедряването декларира един обект в YAML, който не само създава подовете, но също така гарантира, че те са актуални и работят. Можете също така лесно да мащабирате автоматично своите приложения, като използвате внедряване в Kubernetes. По този начин внедряването се използва за мащабиране, внедряване и връщане назад на версии на вашите приложения в Pods.

Внедряването също така казва на Kubernetes колко копия на Pod искаме да стартираме, а Kubernetes се грижи за останалото. Свързаният контролер ще създаде ReplicaSet от вашата конфигурация при създаване на внедряване. Контролерът, свързан с ReplicaSet, ще създаде поредица от подове от конфигурацията на ReplicaSet.

Предимствата на използването на внедряване вместо директно създаване на ReplicaSet са:

  • Историзиране на обекта: всяка промяна в обекта (чрез „прилагане“ или „редактиране“) ще създаде резервно копие на предишната версия.
  • Управление на внедряване и връщане назад: Можете да се върнете към конфигурация във връзка с предишната точка.
  Как да групирате картини и фигури в MS Word

Създаване на внедряване

Има два метода, които можем да използваме, за да създадем внедряване на Kubernetes:

Императивен метод

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

За да използвате императивния метод, просто използвайте командата по-долу:

kubectl create deployment nginx-deployment --image nginx --port=80

Декларативен метод

В този метод трябва да декларирате всичко и когато използвате този код, Kubernetes просто чете вашите дефиниции и създава точно както е представено или декларирано.

За да използвате декларативно внедряване, ще трябва да създадете YAML файл.

YAML файл за внедряване с име new_deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  #Specifies the number of Pod Copies
  replicas: 3
 #Selects the Pod to be managed by the deployment
  selector:
    #Matches the defined labels
    matchLabels:
      deploy: example
  template:
    metadata:
      #Specifies the labels on the Pod.
       labels:
         deploy: example
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.2 

В този YAML файл, след като дефинирате версията на Kubernetes API, типа на обекта, който създавате, и името на внедряването, има секцията със спецификации. В този раздел първо дефинирате ключа за реплики, който показва броя на екземплярите на Pod, които внедряването трябва да поддържа активни.

Използвайте етикет за избор, за да идентифицирате Pods в разгръщането. За това можете да използвате етикета за разгръщане, който казва, че всички подове, които съответстват на тези етикети, са групирани в разгръщане.

След това имате шаблонен обект, където имате модел на Pod във вашата спецификация за внедряване. Когато внедряването създава Pods, то ги създава с помощта на този шаблон. Спецификацията на обикновен пакет може да бъде намерена под ключа на шаблона.

  Как да настроите настроението на стаята с интелигентно осветление

С това внедряване изображенията на Nginx с етикети ще бъдат внедрени в Pods. Освен това, вие също трябва да внимавате по този въпрос, а Pod е единицата за мащабируемост в Kubernetes, така че трябва да помислите за модела, който искате да използвате, ако поставите няколко контейнера в един и същ Pod.

След това приложете new_deployment.yaml Yaml файла, използвайте следната команда:

kubectl apply -f new_deployment.yaml

След няколко секунди можете да получите състоянието на внедряване, като използвате следното:

kubectl get all

Извличане и актуализиране на внедряването

Обърнете внимание, че имате създадени Pods, внедряването и също Replicaset. Така че внедряването винаги създава и управлява Replicaset. Сега можете да използвате следната команда, за да опишете внедряването:

kubectl describe deployment nginx-deployment 

Сега имате пълно описание на внедряването. Той подчертава стратегията, използвана за създаване/възстановяване на модулите, когато актуализацията е дефинирана като RollingUpdate.

Стратегията RollingUpdate позволява организирана миграция на една версия на приложение към по-нова версия. Това е стратегията по подразбиране, използвана в Kubernetes.

В допълнение към това имаме и следните стратегии:

  • Пресъздай: Прекратява текущо работещите екземпляри на Pod и ги „пресъздава“ с новата версия;
  • Синьо/Зелено: Тази стратегия създава две отделни, но идентични среди. В синята среда приложението работи както е, докато в зелената среда приложението работи така, както ще бъде в бъдеще;
  • Canary: Стратегия за внедряване, при която подмножество от потребители участва в постепенното пускане на приложение или услуга.

Ако изберете „подвижна актуализация“, можете да конфигурирате поведението му относно желания брой реплики.

  • maxSurge ви позволява да посочите (в процент или абсолютно изражение) колко Pods може да създаде в допълнение към броя на текущо конфигурираните реплики.
  • maxUnavailable ви позволява да посочите (в процент или абсолютно изражение) колко Pods могат да бъдат „недостъпни“ по време на актуализацията, в зависимост от броя на конфигурираните реплики.
  Как да преименувам име на домейн weblogic?

В зависимост от вашето приложение и вашия автоматичен скалер, тези конфигурации ще ви позволят да осигурите QoS или да ускорите вашите внедрявания.

След това трябва да мащабирате Pods до 10 и да промените етикета на изображението на Nginx до най-новия.

kubectl scale deployment nginx-deployment --replicas=10

Имайте предвид, че имаме 5 контейнера, които се създават, и от 10 Pods имаме 5 налични.

След няколко секунди използвайте следната команда:

kubectl get all

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

Изтриване на вашето разполагане

За да изтриете внедряване на Kubernetes, можете да използвате следните команди:

kubectl delete deploy nginx-deployment 
kubectl delete deploy new_deployment.yaml

Helm: Опростяване на внедряването

Когато искате да внедрите сложно приложение, което използва десетки или дори стотици ресурси на Kubernetes, инструментът kubectl става неподходящ, поради което е разработен инструментът Helm. Helm е мениджър на пакети за Kubernetes, който се основава на kubectl и опростява внедряването на приложения.

В речника на Helm приложението се нарича освобождаване. Той е свързан с диаграма, т.е. колекция от конфигурационни файлове във формат YAML, съдържащи глобални променливи и шаблони, описващи ресурсите на Kubernetes.

Заключение

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

Можете също така да разгледате някои от най-добрите уроци на Kubernetes, за да научите от нулата и да станете експерт.