Мета
- Масштабування застосунку за допомогою kubectl.
Масштабування Застосунку
Раніше ми створили Deployment, а потім робили його загальнодоступним за допомогою Service. Deployment створив лише один Pod для запуску нашого pfcnjceyre. Зі збільшенням трафіку, нам потрібно масштабувати застосунок, щоб відповідати зростаючим вимогам користувачів.
Якщо ви ще не працювали над попередніми розділами, почніть з Використання minikube для створення кластера.
Масштабування досягається зміною кількості реплік в Deployment.
Зміст:
- Масштабування Deployment
Ви можете створити Deployment з початку з декількома екземплярами, використовуючи параметр --replicas для команди створення Deployment kubectl
Примітка:
Якщо ви спробуєте це після попереднього розділу, то, можливо, ви видалили Service, який створили, або створили Service з type: NodePort. У цьому розділі припускається, що для Deployment kubernetes-bootcamp створено Service з type: LoadBalancer.
Якщо ви не видалили Service, створений в попередньому розділі, спочатку видаліть цей Service, а потім запустіть наступну команду для створення нового Service з параметром type встановленим на LoadBalancer:
kubectl expose deployment/kubernetes-bootcamp --type="LoadBalancer" --port 8080
Огляд масштабування
Масштабування 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
Примітка:
Якщо ви використовуєте minikube з Docker Desktop як драйвер контейнера, потрібен тунель minikube. Це через те, що контейнери всередині Docker Desktop ізольовані від вашого компʼютера-хосту.
В окремому вікні термінала виконайте:minikube service kubernetes-bootcamp --url
Вивід виглядає так:
http://127.0.0.1:51082
! Оскільки ви використовуєте драйвер Docker на darwin, термінал повинен бути відкритий для його запуску.
Потім використовуйте наданий URL для доступу до застосунку:curl 127.0.0.1:51082
Зменшення розгортання
Щоб зменшити 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ʼів було завершено.
Якщо ви готові, переходьте до Виконання поступового оновлення.