Kubernetes е една от най-популярните платформи за автоматизация за внедряване, мащабиране и работа с контейнери за приложения в клъстер от хостове или възли.
Тази статия ще обсъди един от централните обекти в Kubernetes: внедряването. Целта е да разберете поведението му и как да го създавате, актуализирате и изтривате.
Съдържание
Какво е внедряване?
Разполагането е един от обектите, използвани за стартиране на Pods. Най-добрите практики на Kubernetes насърчават използването на внедрявания за приложения без състояние. Без внедряване ще трябва ръчно да създавате, актуализирате и изтривате множество Pods, което би било досадно и неосъществимо за много Pods.
Внедряването декларира един обект в YAML, който не само създава подовете, но също така гарантира, че те са актуални и работят. Можете също така лесно да мащабирате автоматично своите приложения, като използвате внедряване в Kubernetes. По този начин внедряването се използва за мащабиране, внедряване и връщане назад на версии на вашите приложения в Pods.
Внедряването също така казва на Kubernetes колко копия на Pod искаме да стартираме, а Kubernetes се грижи за останалото. Свързаният контролер ще създаде ReplicaSet от вашата конфигурация при създаване на внедряване. Контролерът, свързан с ReplicaSet, ще създаде поредица от подове от конфигурацията на ReplicaSet.
Предимствата на използването на внедряване вместо директно създаване на ReplicaSet са:
- Историзиране на обекта: всяка промяна в обекта (чрез „прилагане“ или „редактиране“) ще създаде резервно копие на предишната версия.
- Управление на внедряване и връщане назад: Можете да се върнете към конфигурация във връзка с предишната точка.
Създаване на внедряване
Има два метода, които можем да използваме, за да създадем внедряване на 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 могат да бъдат „недостъпни“ по време на актуализацията, в зависимост от броя на конфигурираните реплики.
В зависимост от вашето приложение и вашия автоматичен скалер, тези конфигурации ще ви позволят да осигурите 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, за да научите от нулата и да станете експерт.