Модуль 2.2: Деплойменти та ReplicaSets
Складність:
[СЕРЕДНЯ]— Основна тема іспитуЧас на проходження: 45-55 хвилин
Передумови: Модуль 2.1 (Поди)
Що ви зможете робити
Розділ «Що ви зможете робити»Після цього модуля ви зможете:
- Створити Deployments зі стратегією rolling update та налаштувати maxSurge/maxUnavailable
- Виконати розгортання, відкати та перегляд історії в умовах обмеженого часу CKA
- Діагностувати застрягле розгортання, перевіряючи статус ReplicaSet, події подів та доступність ресурсів
- Пояснити ланцюжок володіння Deployment → ReplicaSet → Pod та чому старі ReplicaSets зберігаються
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»У продакшені ви ніколи не запускаєте окремі поди. Ви використовуєте Деплойменти.
Деплойменти є найпоширенішим ресурсом робочого навантаження. Вони забезпечують:
- Запуск кількох реплік вашого додатку
- Поступові оновлення (rolling updates) з нульовим часом простою
- Автоматичні відкати, коли щось іде не так
- Масштабування (збільшення та зменшення кількості)
Іспит CKA перевіряє створення деплойментів, виконання поступових оновлень, масштабування та відкатів. Це фундаментальні навички, які ви будете використовувати щодня.
Аналогія з менеджером автопарку
Уявіть Деплоймент як менеджера автопарку в компанії таксі. Менеджер не керує таксі безпосередньо — він керує водіями (подами). Якщо водій бере лікарняний (под падає), менеджер призначає заміну. Якщо попит зростає (масштабування), менеджер наймає більше водіїв. Під час оновлення транспортних засобів (поступове оновлення), менеджер поступово міняє старі автомобілі на нові, гарантуючи, що у клієнтів завжди є доступні поїздки.
Чому ви навчитеся
Розділ «Чому ви навчитеся»До кінця цього модуля ви зможете:
- Створювати Деплойменти та керувати ними
- Розуміти, як працюють ReplicaSets
- Виконувати поступові оновлення та відкати
- Горизонтально масштабувати додатки
- Призупиняти та відновлювати деплойменти
Частина 1: Основи Деплойменту
Розділ «Частина 1: Основи Деплойменту»1.1 Ієрархія Деплойменту
Розділ «1.1 Ієрархія Деплойменту»┌────────────────────────────────────────────────────────────────┐│ Ієрархія Деплойменту ││ ││ ┌─────────────────────────────────────────────────────────┐ ││ │ Деплоймент │ ││ │ - Бажаний стан (репліки, образ, стратегія) │ ││ │ - Керує ReplicaSets │ ││ └────────────────────────┬────────────────────────────────┘ ││ │ створює та керує ││ ▼ ││ ┌─────────────────────────────────────────────────────────┐ ││ │ ReplicaSet │ ││ │ - Забезпечує роботу N реплік │ ││ │ - Створює/видаляє поди для бажаної кількості │ ││ └────────────────────────┬────────────────────────────────┘ ││ │ створює та керує ││ ▼ ││ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ││ │ Под 1 │ │ Под 2 │ │ Под 3 │ │ Под N │ ││ └─────────┘ └─────────┘ └─────────┘ └─────────┘ ││ │└────────────────────────────────────────────────────────────────┘1.2 Чому не просто ReplicaSets?
Розділ «1.2 Чому не просто ReplicaSets?»| Функція | ReplicaSet | Деплоймент |
|---|---|---|
| Підтримка кількості реплік | ✅ | ✅ |
| Поступові оновлення | ❌ | ✅ |
| Відкат | ❌ | ✅ |
| Історія оновлень | ❌ | ✅ |
| Призупинення/Відновлення | ❌ | ✅ |
Правило: Завжди використовуйте Деплойменти. Ніколи не створюйте ReplicaSets безпосередньо.
1.3 Специфікація Деплойменту
Розділ «1.3 Специфікація Деплойменту»apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: app: nginxspec: replicas: 3 # Desired pod count selector: # How to find pods to manage matchLabels: app: nginx template: # Pod template metadata: labels: app: nginx # Must match selector spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80Критично: Значення
spec.selector.matchLabelsмає збігатися зspec.template.metadata.labels. Якщо вони не збігаються, Деплоймент не керуватиме подами.
Частина 2: Створення Деплойментів
Розділ «Частина 2: Створення Деплойментів»2.1 Імперативні команди (Швидко для іспиту)
Розділ «2.1 Імперативні команди (Швидко для іспиту)»# Create deploymentkubectl create deployment nginx --image=nginx
# Create with specific replicaskubectl create deployment nginx --image=nginx --replicas=3
# Create with portkubectl create deployment nginx --image=nginx --port=80
# Generate YAML (essential for exam!)kubectl create deployment nginx --image=nginx --replicas=3 --dry-run=client -o yaml > deploy.yaml2.2 З YAML
Розділ «2.2 З YAML»apiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80 resources: requests: cpu: 100m memory: 128Mi limits: cpu: 200m memory: 256Mikubectl apply -f nginx-deployment.yaml2.3 Перегляд Деплойментів
Розділ «2.3 Перегляд Деплойментів»# List deploymentskubectl get deploymentskubectl get deploy # Short form
# Detailed viewkubectl get deploy -o wide
# Describe deploymentkubectl describe deployment nginx
# Get deployment YAMLkubectl get deployment nginx -o yaml
# Check rollout statuskubectl rollout status deployment/nginxЧи знали ви?
Команда
kubectl rollout statusблокує виконання до завершення розгортання. Вона ідеально підходить для CI/CD конвеєрів — якщо розгортання завершиться помилкою, команда завершить роботу з ненульовим статусом.
Частина 3: ReplicaSets під капотом
Розділ «Частина 3: ReplicaSets під капотом»3.1 Як працюють ReplicaSets
Розділ «3.1 Як працюють ReplicaSets»Коли ви створюєте Деплоймент:
- Контролер Деплойменту створює ReplicaSet
- Контролер ReplicaSet створює поди
- ReplicaSet гарантує, що бажана кількість реплік збігається з фактичною
# Create a deploymentkubectl create deployment nginx --image=nginx --replicas=3
# See the ReplicaSet createdkubectl get replicasets# NAME DESIRED CURRENT READY AGE# nginx-5d5dd5d5fb 3 3 3 30s
# See pods with owner referencekubectl get pods --show-labels3.2 Іменування ReplicaSet
Розділ «3.2 Іменування ReplicaSet»nginx-5d5dd5d5fb^ ^| || └── Хеш шаблону пода|└── Назва ДеплойментуКоли ви оновлюєте деплоймент, створюється новий ReplicaSet з іншим хешем.
3.3 Не керуйте ReplicaSets безпосередньо
Розділ «3.3 Не керуйте ReplicaSets безпосередньо»# Don't do this - let Deployment manage ReplicaSetskubectl scale replicaset nginx-5d5dd5d5fb --replicas=5 # BAD
# Do this insteadkubectl scale deployment nginx --replicas=5 # GOODЧастина 4: Масштабування
Розділ «Частина 4: Масштабування»4.1 Ручне масштабування
Розділ «4.1 Ручне масштабування»# Scale to specific replicaskubectl scale deployment nginx --replicas=5
# Scale to zero (stop all pods)kubectl scale deployment nginx --replicas=0
# Scale multiple deploymentskubectl scale deployment nginx webapp --replicas=34.2 Редагування Деплойменту
Розділ «4.2 Редагування Деплойменту»# Edit deployment directlykubectl edit deployment nginx# Change spec.replicas and save
# Or patchkubectl patch deployment nginx -p '{"spec":{"replicas":5}}'4.3 Перевірка масштабування
Розділ «4.3 Перевірка масштабування»# Watch pods scalekubectl get pods -w
# Check deployment statuskubectl get deployment nginx# NAME READY UP-TO-DATE AVAILABLE AGE# nginx 5/5 5 5 10m
# Detailed statuskubectl rollout status deployment/nginxЧастина 5: Поступові оновлення
Розділ «Частина 5: Поступові оновлення»5.1 Стратегія оновлення
Розділ «5.1 Стратегія оновлення»apiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: replicas: 4 strategy: type: RollingUpdate # Default strategy rollingUpdate: maxSurge: 1 # Max pods over desired during update maxUnavailable: 1 # Max pods unavailable during update selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.255.2 Візуалізація поступового оновлення
Розділ «5.2 Візуалізація поступового оновлення»┌────────────────────────────────────────────────────────────────┐│ Поступове оновлення ││ (maxSurge=1, maxUnavailable=1) ││ ││ Бажано: 4 репліки ││ ││ Крок 1: Початок зі старої версії ││ [v1] [v1] [v1] [v1] ││ ││ Крок 2: Створення 1 нового пода (maxSurge=1) ││ [v1] [v1] [v1] [v1] [v2-creating] ││ ││ Крок 3: v2 готовий, завершення 1 старого (maxUnavailable=1) ││ [v1] [v1] [v1] [v2] [v1-terminating] ││ ││ Крок 4: Продовження оновлення ││ [v1] [v1] [v2] [v2] [v1-terminating] ││ ││ Крок 5: Продовження оновлення ││ [v1] [v2] [v2] [v2] [v1-terminating] ││ ││ Крок 6: Завершено ││ [v2] [v2] [v2] [v2] ││ │└────────────────────────────────────────────────────────────────┘5.3 Запуск оновлень
Розділ «5.3 Запуск оновлень»# Update image (triggers rolling update)kubectl set image deployment/nginx nginx=nginx:1.26
# Update with record (saves command in history)kubectl set image deployment/nginx nginx=nginx:1.26 --record
# Update environment variablekubectl set env deployment/nginx ENV=production
# Update resourceskubectl set resources deployment/nginx -c nginx --limits=cpu=200m,memory=512Mi
# Edit deployment (any change to pod template triggers update)kubectl edit deployment nginx5.4 Спостереження за оновленнями
Розділ «5.4 Спостереження за оновленнями»# Watch rollout progresskubectl rollout status deployment/nginx
# Watch pods during updatekubectl get pods -w
# Watch ReplicaSetskubectl get rs -wПорада до іспиту
Під час іспиту використовуйте
kubectl set imageдля швидкого оновлення. Це швидше, ніж редагувати YAML. Додайте--record, щоб зберегти команду в історії розгортань.
Частина 6: Відкати
Розділ «Частина 6: Відкати»6.1 Перегляд історії розгортань
Розділ «6.1 Перегляд історії розгортань»# View historykubectl rollout history deployment/nginx
# View specific revisionkubectl rollout history deployment/nginx --revision=26.2 Виконання відкату
Розділ «6.2 Виконання відкату»# Rollback to previous versionkubectl rollout undo deployment/nginx
# Rollback to specific revisionkubectl rollout undo deployment/nginx --to-revision=2
# Verify rollbackkubectl rollout status deployment/nginxkubectl get deployment nginx -o wide6.3 Як працює відкат
Розділ «6.3 Як працює відкат»┌────────────────────────────────────────────────────────────────┐│ Процес відкату ││ ││ Перед відкатом: ││ ┌─────────────────────────────────────────────────┐ ││ │ ReplicaSet v1 (репліки: 0) ← стара версія │ ││ │ ReplicaSet v2 (репліки: 4) ← поточна │ ││ └─────────────────────────────────────────────────┘ ││ ││ kubectl rollout undo deployment/nginx ││ ││ Після відкату: ││ ┌─────────────────────────────────────────────────┐ ││ │ ReplicaSet v1 (репліки: 4) ← відновлено │ ││ │ ReplicaSet v2 (репліки: 0) ← зменшено │ ││ └─────────────────────────────────────────────────┘ ││ ││ Деплоймент зберігає старі ReplicaSets для можливості відкату ││ │└────────────────────────────────────────────────────────────────┘6.4 Керування історією
Розділ «6.4 Керування історією»apiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: revisionHistoryLimit: 10 # Keep 10 old ReplicaSets (default) # Set to 0 to disable rollback capabilityБойова історія: Випадковий простій продакшену
Команда розгорнула зламаний образ у продакшені. Почалася паніка. Інженер, який знав про
kubectl rollout undo, врятував ситуацію за лічені секунди. Інженер, який не знав, витратив 20 хвилин, намагаючись з’ясувати попередній тег образу. Знайте свої команди відкату!
Частина 7: Призупинення та Відновлення
Розділ «Частина 7: Призупинення та Відновлення»7.1 Навіщо призупиняти?
Розділ «7.1 Навіщо призупиняти?»Призупиніть деплоймент, щоб:
- Внести кілька змін без запуску кількох розгортань
- Згрупувати оновлення
- Виконувати налагодження без створення нових подів
7.2 Використання призупинення/відновлення
Розділ «7.2 Використання призупинення/відновлення»# Pause deploymentkubectl rollout pause deployment/nginx
# Make multiple changes (no rollout triggered)kubectl set image deployment/nginx nginx=nginx:1.26kubectl set resources deployment/nginx -c nginx --limits=cpu=200mkubectl set env deployment/nginx ENV=production
# Resume - triggers single rollout with all changeskubectl rollout resume deployment/nginx
# Watch the rolloutkubectl rollout status deployment/nginxЧастина 8: Стратегія Recreate
Розділ «Частина 8: Стратегія Recreate»8.1 Коли використовувати Recreate
Розділ «8.1 Коли використовувати Recreate»Використовуйте Recreate, коли:
- Додаток не може виконувати кілька версій одночасно
- Несумісність схеми бази даних між версіями
- Обмежені ресурси (неможливо запустити додаткові поди)
apiVersion: apps/v1kind: Deploymentmetadata: name: databasespec: replicas: 1 strategy: type: Recreate # All pods deleted, then new pods created selector: matchLabels: app: database template: metadata: labels: app: database spec: containers: - name: db image: postgres:158.2 Recreate проти RollingUpdate
Розділ «8.2 Recreate проти RollingUpdate»| Аспект | RollingUpdate | Recreate |
|---|---|---|
| Час простою | Нуль (якщо налаштовано правильно) | Так |
| Використання ресурсів | Вище під час оновлення | Без змін |
| Складність | Вища | Проста |
| Варіант використання | Додатки без стану (Stateless) | Зі станом (Stateful), несумісні версії |
Частина 9: Умови Деплойменту (Conditions)
Розділ «Частина 9: Умови Деплойменту (Conditions)»9.1 Перевірка умов
Розділ «9.1 Перевірка умов»# View conditionskubectl get deployment nginx -o jsonpath='{.status.conditions[*].type}'
# Detailed conditionskubectl describe deployment nginx | grep -A10 Conditions9.2 Типові умови
Розділ «9.2 Типові умови»| Умова | Значення |
|---|---|
Available | Доступна мінімальна кількість реплік |
Progressing | Виконується розгортання |
ReplicaFailure | Не вдалося створити поди |
Чи знали ви?
Розділ «Чи знали ви?»-
Деплойменти є декларативними: Ви вказуєте бажаний стан, Kubernetes з’ясовує, як його досягти.
-
ReplicaSets є незмінними (immutable): Коли ви оновлюєте Деплоймент, створюється новий ReplicaSet. Старий зберігається для відкату.
-
Стратегія за замовчуванням — RollingUpdate з
maxSurge: 25%таmaxUnavailable: 25%. -
--recordзастарів у нових версіях, але все ще працює. Тепер анотації відстежують зміни автоматично.
Типові помилки
Розділ «Типові помилки»| Помилка | Проблема | Рішення |
|---|---|---|
| Мітки не збігаються з селектором | Деплоймент не керує подами | Переконайтеся, що selector.matchLabels збігається з template.metadata.labels |
| Відсутні ліміти ресурсів | Поди можуть виснажити інші робочі навантаження | Завжди встановлюйте requests та limits |
| Відкат без перевірки | Може відновити зламану версію | Спочатку перевірте rollout history --revision=N |
Використання тегу latest | Розгортання може не запуститися | Використовуйте теги конкретних версій |
| Неперевірене розгортання | Припущення успіху | Завжди виконуйте rollout status |
Тест
Розділ «Тест»-
Що відбувається при оновленні образу Деплойменту?
Відповідь
Запускається поступове оновлення (rolling update): створюється новий ReplicaSet з новим образом. Поди поступово створюються в новому ReplicaSet, тоді як поди в старому ReplicaSet завершуються, контролюючись `maxSurge` та `maxUnavailable`. -
Як відкотити деплоймент до ревізії 3?
Відповідь
`kubectl rollout undo deployment/nginx --to-revision=3`Це збільшує масштаб ReplicaSet з ревізії 3 і зменшує поточний ReplicaSet.
-
Яка різниця між стратегіями RollingUpdate та Recreate?
Відповідь
**RollingUpdate**: Поступово замінює старі поди новими, підтримуючи доступність. **Recreate**: Спочатку завершує всі існуючі поди, потім створює нові — викликає час простою. -
Вам потрібно змінити образ, ресурси та змінні середовища. Як зробити одне розгортання замість трьох?
Відповідь
```bash kubectl rollout pause deployment/nginx kubectl set image deployment/nginx nginx=nginx:1.26 kubectl set resources deployment/nginx -c nginx --limits=cpu=200m kubectl set env deployment/nginx ENV=production kubectl rollout resume deployment/nginx ```
Практичне завдання
Розділ «Практичне завдання»Завдання: Повний життєвий цикл деплойменту — створення, масштабування, оновлення, відкат.
Кроки:
- Створіть деплоймент:
kubectl create deployment webapp --image=nginx:1.24 --replicas=3kubectl rollout status deployment/webapp- Перевірте деплоймент та ReplicaSet:
kubectl get deployment webappkubectl get replicasetkubectl get pods -l app=webapp- Масштабуйте деплоймент:
kubectl scale deployment webapp --replicas=5kubectl get pods -w # Watch pods scale up- Оновіть образ (поступове оновлення):
kubectl set image deployment/webapp nginx=nginx:1.25 --recordkubectl rollout status deployment/webapp- Перевірте історію розгортань:
kubectl rollout history deployment/webappkubectl get replicaset # Notice two ReplicaSets now- Розгорніть “погану” версію:
kubectl set image deployment/webapp nginx=nginx:broken --recordkubectl rollout status deployment/webapp # Will hang or failkubectl get pods # Some in ImagePullBackOff- Відкотіться до попередньої версії:
kubectl rollout undo deployment/webappkubectl rollout status deployment/webappkubectl get pods # Back to healthy state- Перевірте історію та відкотіться до конкретної ревізії:
kubectl rollout history deployment/webappkubectl rollout undo deployment/webapp --to-revision=1kubectl rollout status deployment/webapp- Очищення:
kubectl delete deployment webappКритерії успіху:
- Вмію створювати деплойменти імперативно та декларативно
- Розумію ієрархію Деплоймент → ReplicaSet → Под
- Вмію масштабувати деплойменти
- Вмію виконувати поступові оновлення
- Вмію робити відкат до попередніх версій
- Розумію історію розгортань
Практичні вправи
Розділ «Практичні вправи»Вправа 1: Тест на швидкість створення Деплойменту (Ціль: 2 хвилини)
Розділ «Вправа 1: Тест на швидкість створення Деплойменту (Ціль: 2 хвилини)»# Create deploymentkubectl create deployment nginx --image=nginx:1.25 --replicas=3
# Verifykubectl rollout status deployment/nginxkubectl get deploy nginxkubectl get rskubectl get pods -l app=nginx
# Cleanupkubectl delete deployment nginxВправа 2: Поступове оновлення (Ціль: 3 хвилини)
Розділ «Вправа 2: Поступове оновлення (Ціль: 3 хвилини)»# Create deploymentkubectl create deployment web --image=nginx:1.24 --replicas=4
# Wait for readykubectl rollout status deployment/web
# Update imagekubectl set image deployment/web nginx=nginx:1.25
# Watch the rolloutkubectl rollout status deployment/web
# Verify new imagekubectl get deployment web -o jsonpath='{.spec.template.spec.containers[0].image}'
# Cleanupkubectl delete deployment webВправа 3: Відкат (Ціль: 3 хвилини)
Розділ «Вправа 3: Відкат (Ціль: 3 хвилини)»# Create deploymentkubectl create deployment app --image=nginx:1.24 --replicas=3kubectl rollout status deployment/app
# Update 1kubectl set image deployment/app nginx=nginx:1.25 --recordkubectl rollout status deployment/app
# Update 2 (bad version)kubectl set image deployment/app nginx=nginx:bad --record# Don't wait - it will fail
# Check historykubectl rollout history deployment/app
# Rollbackkubectl rollout undo deployment/appkubectl rollout status deployment/app
# Verify rolled backkubectl get deployment app -o jsonpath='{.spec.template.spec.containers[0].image}'# Should be nginx:1.25
# Cleanupkubectl delete deployment appВправа 4: Масштабування (Ціль: 2 хвилини)
Розділ «Вправа 4: Масштабування (Ціль: 2 хвилини)»# Create deploymentkubectl create deployment scale-test --image=nginx --replicas=2
# Scale upkubectl scale deployment scale-test --replicas=5kubectl get pods -l app=scale-test
# Scale downkubectl scale deployment scale-test --replicas=1kubectl get pods -l app=scale-test
# Scale to zerokubectl scale deployment scale-test --replicas=0kubectl get pods -l app=scale-test # No pods
# Scale back upkubectl scale deployment scale-test --replicas=3
# Cleanupkubectl delete deployment scale-testВправа 5: Призупинення та Відновлення (Ціль: 3 хвилини)
Розділ «Вправа 5: Призупинення та Відновлення (Ціль: 3 хвилини)»# Create deploymentkubectl create deployment paused --image=nginx:1.24 --replicas=2kubectl rollout status deployment/paused
# Pausekubectl rollout pause deployment/paused
# Make multiple changes (no rollout triggered)kubectl set image deployment/paused nginx=nginx:1.25kubectl set env deployment/paused ENV=productionkubectl set resources deployment/paused -c nginx --requests=cpu=100m
# Check - still old imagekubectl get deployment paused -o jsonpath='{.spec.template.spec.containers[0].image}'
# Resume - single rolloutkubectl rollout resume deployment/pausedkubectl rollout status deployment/paused
# Verify all changes appliedkubectl get deployment paused -o yaml | grep -E "image:|ENV|cpu"
# Cleanupkubectl delete deployment pausedВправа 6: Стратегія Recreate (Ціль: 3 хвилини)
Розділ «Вправа 6: Стратегія Recreate (Ціль: 3 хвилини)»# Create deployment with Recreate strategycat << 'EOF' | kubectl apply -f -apiVersion: apps/v1kind: Deploymentmetadata: name: recreate-demospec: replicas: 3 strategy: type: Recreate selector: matchLabels: app: recreate-demo template: metadata: labels: app: recreate-demo spec: containers: - name: nginx image: nginx:1.24EOF
kubectl rollout status deployment/recreate-demo
# Update - watch all pods terminate then new ones createkubectl set image deployment/recreate-demo nginx=nginx:1.25
# Watch pods (all old terminate, then all new create)kubectl get pods -w -l app=recreate-demo
# Cleanupkubectl delete deployment recreate-demoВправа 7: Генерація та модифікація YAML (Ціль: 5 хвилин)
Розділ «Вправа 7: Генерація та модифікація YAML (Ціль: 5 хвилин)»# Generate YAMLkubectl create deployment myapp --image=nginx:1.25 --replicas=3 --dry-run=client -o yaml > myapp.yaml
# View generated YAMLcat myapp.yaml
# Add resource limits using sed or editcat << 'EOF' >> myapp.yaml---# Note: Need to edit the file properly, this is just for demonstrationEOF
# Apply the deploymentkubectl apply -f myapp.yaml
# Update via editkubectl edit deployment myapp# Change replicas to 5, save
# Verifykubectl get deployment myapp
# Cleanupkubectl delete -f myapp.yamlrm myapp.yamlВправа 8: Виклик - Повний життєвий цикл
Розділ «Вправа 8: Виклик - Повний життєвий цикл»Не підглядаючи в рішення, виконайте цей робочий процес менш ніж за 5 хвилин:
- Створіть деплоймент
lifecycle-testз nginx:1.24, 3 репліки - Масштабуйте до 5 реплік
- Оновіть до nginx:1.25
- Перевірте історію розгортань
- Оновіть до nginx:1.26
- Відкотіться до nginx:1.24 (ревізія 1)
- Видаліть деплоймент
# YOUR TASK: Complete the workflowРішення
# 1. Createkubectl create deployment lifecycle-test --image=nginx:1.24 --replicas=3kubectl rollout status deployment/lifecycle-test
# 2. Scalekubectl scale deployment lifecycle-test --replicas=5
# 3. Update to 1.25kubectl set image deployment/lifecycle-test nginx=nginx:1.25 --recordkubectl rollout status deployment/lifecycle-test
# 4. Check historykubectl rollout history deployment/lifecycle-test
# 5. Update to 1.26kubectl set image deployment/lifecycle-test nginx=nginx:1.26 --recordkubectl rollout status deployment/lifecycle-test
# 6. Rollback to revision 1kubectl rollout undo deployment/lifecycle-test --to-revision=1kubectl rollout status deployment/lifecycle-test
# Verify it's 1.24kubectl get deployment lifecycle-test -o jsonpath='{.spec.template.spec.containers[0].image}'
# 7. Deletekubectl delete deployment lifecycle-testНаступний модуль
Розділ «Наступний модуль»Модуль 2.3: DaemonSets та StatefulSets — Спеціалізовані контролери робочих навантажень.