Запуск кількох екземплярів вашого застосунку

Масштабування застосунку вручну за допомогою kubectl.

Мета

  • Масштабування застосунку за допомогою kubectl.

Масштабування Застосунку

Раніше ми створили Deployment, а потім робили його загальнодоступним за допомогою Service. Deployment створив лише один Pod для запуску нашого pfcnjceyre. Зі збільшенням трафіку, нам потрібно масштабувати застосунок, щоб відповідати зростаючим вимогам користувачів.

Якщо ви ще не працювали над попередніми розділами, почніть з Використання minikube для створення кластера.

Масштабування досягається зміною кількості реплік в Deployment.


Зміст:

  • Масштабування Deployment

Ви можете створити Deployment з початку з декількома екземплярами, використовуючи параметр --replicas для команди створення Deployment kubectl

Огляд масштабування


Масштабування Deployment гарантує створення нових Podʼів і їх призначення на Вузли з вільними ресурсами. Масштабування збільшить кількість Podʼів до нового бажаного стану. Kubernetes також підтримує автоматичне масштабування Podʼів, але це виходить за рамки цього посібника. Також можливе масштабування до нуля, і це призведе до завершення всіх Podʼів вказаного Deployment.

Запуск кількох екземплярів застосунку вимагає засобів для розподілу трафіку між ними. У Service є вбудований балансер навантаження, який розподілить мережевий трафік на всі Podʼи, що виставлені Deployment. Service будуть постійно відстежувати робочі Podʼи, використовуючи точки доступу, щоб гарантувати, що трафік направляється лише на доступні Podʼи.

Масштабування досягається зміною кількості реплік в Deployment.


Якщо у вас є кілька екземплярів застосунку, ви зможете робити оновлення без перерв. Ми розглянемо це в наступному розділі посібника. Тепер перейдемо до термінала та масштабуємо наш застосунок.

Масштабування Deployment

Щоб переглянути свій Deployment, використовуйте команду get deployments:

kubectl get deployments

Вивід повинен бути схожий на:

    NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
    kubernetes-bootcamp   1/1     1            1           11m
    

Маємо 1 Pod. Якщо цього немає, виконайте команду ще раз. Тут маємо:

  • NAME — назви Deployment в кластері.
  • READY — показує співвідношення поточних/бажаних реплік
  • UP-TO-DATE — показує кількість реплік, які були оновлені для досягнення бажаного стану.
  • AVAILABLE — показує, скільки реплік застосунку доступні користувачам.
  • AGE — показує час, протягом якого застосунок працює.

Щоб переглянути ReplicaSet, створений Deployment, виконайте:

kubectl get rs

Зверніть увагу, що назва ReplicaSet завжди форматується як [DEPLOYMENT-NAME]-[ВИПАДКОВИЙ-РЯДОК]. Випадковий рядок генерується випадковим чином та використовує pod-template-hash як основу для створеня.

Два важливі стовпці цього виводу:

  • DESIRED — показує бажану кількість реплік застосунку, яку ви визначаєте під час створення Deployment. Це бажаний стан.
  • CURRENT — показує, скільки реплік в цей час працюють.

Далі масштабуймо Deployment до 4 реплік. Ми використаємо команду kubectl scale, за якою слідує тип Deployment, назва та бажана кількість екземплярів:

kubectl scale deployments/kubernetes-bootcamp --replicas=4

Щоб знову переглянути свої Deployment, використовуйте get deployments:

kubectl get deployments

Зміни були застосовані, і у нас є 4 екземпляри застосунку. Далі перевірмо, чи змінилася кількість Podʼів:

kubectl get pods -o wide

Тепер є 4 Podʼа з різними IP-адресами. Зміна була зареєстрована в журналі подій Deployment. Щоб перевірити це, використовуйте команду describe:

kubectl describe deployments/kubernetes-bootcamp

Ви також можете побачити, що у виводі цієї команди тепер є 4 репліки.

Балансування навантаження

Перевіримо, чи Service балансує трафік. Щоб дізнатися зовнішній IP та порт, ми можемо використовувати команду describe, як ми дізнались в попередній частині посібника:

kubectl describe services/kubernetes-bootcamp

Створіть змінну середовища з іменем NODE_PORT, яка має значення як порт Вузла:

export NODE_PORT="$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')"

echo NODE_PORT=$NODE_PORT

Далі ми запустимо curl з зовнішньою IP-адресою та портом. Виконайте команду кілька разів:

curl http://"$(minikube ip):$NODE_PORT"

Ми потрапляємо на різні Podʼи при кожному запиті. Це демонструє, що балансування навантаження працює.

Вивід має бути схожим на:

Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-wp67j | v=1
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-hs9dj | v=1
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-4hjvf | v=1
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-wp67j | v=1
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-4hjvf | v=1
                     

Зменшення розгортання

Щоб зменшити Deployment до 2 реплік, знову запустіть команду scale:

kubectl scale deployments/kubernetes-bootcamp --replicas=2

Перевірте Deployment, щоб переконатися, що зміни були застосовані, за допомогою команди get deployments:

kubectl get deployments

Кількість реплік зменшилася до 2. Перегляньте кількість Podʼів за допомогою get pods:

kubectl get pods -o wide

Це підтверджує, що роботу двох Podʼів було завершено.

Якщо ви готові, переходьте до Виконання поступового оновлення.

Змінено October 21, 2024 at 1:36 PM PST: upstream sync (c606a3ee0c)