Як розгортати програми в Kubernetes

Kubernetes — одна з найпопулярніших платформ автоматизації для розгортання, масштабування та роботи контейнерів додатків у кластері хостів або вузлів.

У цій статті буде розглянуто один із центральних об’єктів Kubernetes: розгортання. Мета полягає в тому, щоб зрозуміти його поведінку та як його створювати, оновлювати та видаляти.

Що таке розгортання?

Розгортання — це один із об’єктів, які використовуються для запуску модулів. Найкращі практики Kubernetes заохочують до використання розгортань для програм без стану. Без розгортання вам потрібно було б вручну створювати, оновлювати та видаляти кілька модулів, що було б утомливим і нездійсненним для багатьох контейнерів.

Розгортання оголошує один об’єкт у YAML, який не лише створює модулі, але й гарантує, що вони оновлені та працюють. Ви також можете легко автоматично масштабувати свої програми за допомогою розгортання на Kubernetes. Таким чином, розгортання використовується для масштабування, розгортання та відкоту версій ваших програм у Pods.

Розгортання також повідомляє Kubernetes, скільки копій Pod ми хочемо запустити, а Kubernetes подбає про решту. Пов’язаний контролер створить ReplicaSet із вашої конфігурації під час створення розгортання. Контролер, пов’язаний із ReplicaSet, створить ряд модулів з конфігурації ReplicaSet.

Переваги використання розгортання замість безпосереднього створення ReplicaSet:

  • Історизація об’єкта: кожна зміна в об’єкті (через «застосування» або «редагування») створюватиме резервну копію попередньої версії.
  • Керування розгортанням і відкатом: ви можете повернутися до конфігурації, пов’язаної з попереднім пунктом.

Створення розгортання

Існує два методи, які ми можемо використовувати для створення розгортання Kubernetes:

  Проведіть опитування в прямому ефірі під час презентації та отримайте миттєві результати [PowerPoint]

Імперативний метод

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, які розгортання має залишати активними.

Використовуйте мітку вибору, щоб ідентифікувати модулі в розгортанні. Для цього ви можете використовувати мітку розгортання, яка повідомляє, що всі модулі, які відповідають цим міткам, згруповані в розгортанні.

Після цього у вас є об’єкт шаблону, де у вас є модель Pod у вашій специфікації розгортання. Коли розгортання створює модулі, воно створює їх за допомогою цього шаблону. Специфікацію звичайного модуля можна знайти під ключем шаблону.

  Як записати відео вашого браузера Chrome

З цим розгортанням зображення Nginx із мітками буде розгорнуто в Pods. Крім того, ви також повинні бути обережними в цьому пункті, а Pod — це одиниця масштабованості в Kubernetes, тому вам потрібно подумати про шаблон, який ви хочете використовувати, якщо ви розміщуєте кілька контейнерів в одному Pod.

Далі застосуйте файл Yaml new_deployment.yaml, скориставшись такою командою:

kubectl apply -f new_deployment.yaml

Через кілька секунд ви можете отримати статус розгортання за допомогою наступного:

kubectl get all

Отримати та оновити розгортання

Зауважте, що у вас є створені модулі, розгортання, а також набір реплік. Таким чином, розгортання завжди створює набір реплікацій і керує ним. Тепер ви можете використовувати наступну команду для опису розгортання:

kubectl describe deployment nginx-deployment 

Тепер у вас є повний опис розгортання. У ньому висвітлюється стратегія, яка використовується для створення/перебудови модулів, коли оновлення визначено як RollingUpdate.

Стратегія RollingUpdate дозволяє впорядковано переносити одну версію програми до новішої версії. Це стандартна стратегія, яка використовується в Kubernetes.

Окрім цього, ми також маємо такі стратегії:

  • Повторне створення: завершує поточні запущені екземпляри Pod і «відтворює» їх за допомогою нової версії;
  • Синій/зелений: ця стратегія створює два окремі, але ідентичні середовища. У синьому середовищі програма працює як є, тоді як у зеленому середовищі програма працює так, як буде в майбутньому;
  • Canary: стратегія розгортання, де підмножина користувачів бере участь у поступовому випуску програми чи служби.

Якщо ви вибрали «постійне оновлення», ви можете налаштувати його поведінку щодо бажаної кількості реплік.

  • maxSurge дозволяє вказати (у відсотках або абсолютних значеннях), скільки модулів він може створити на додаток до кількості налаштованих реплік.
  • maxUnavailable дозволяє вказати (у відсотках або абсолютних значеннях), скільки модулів можуть бути «недоступними» під час оновлення, залежно від кількості налаштованих реплік.
  Виправити помилку Black Ops 3 ABC на PS4

Залежно від вашої програми та автомасштабувальника ці конфігурації дозволять вам забезпечити QoS або прискорити розгортання.

Далі вам потрібно масштабувати Pods до 10 і змінити тег зображення Nginx на останній.

kubectl scale deployment nginx-deployment --replicas=10

Зауважте, що ми створюємо 5 контейнерів, а з 10 контейнерів доступні 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, щоб навчитися з нуля та стати експертом.