Модуль 1.4: Kustomize — конфігурація без шаблонів
Складність:
[MEDIUM]— необхідний навик для іспиту 2025 рокуЧас на виконання: 35–45 хвилин
Передумови: Модуль 0.1 (робочий кластер), базові знання YAML
Що ви зможете робити
Розділ «Що ви зможете робити»Після цього модуля ви зможете:
- Створити Kustomize overlays для деплойментів у кількох середовищах (dev, staging, production)
- Застосувати патчі, префікси імен, мітки та трансформації ресурсів без зміни базових маніфестів
- Порівняти Kustomize та Helm і обрати правильний інструмент для різних сценаріїв
- Дебажити вихід Kustomize, рендерячи маніфести через
kubectl kustomizeперед застосуванням
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Kustomize — це новинка в програмі CKA 2025. Вас будуть перевіряти на цю тему.
Kustomize вирішує поширену проблему: у вас один і той самий застосунок розгорнутий у dev, staging та production, але кожне середовище потребує дещо іншої конфігурації — різну кількість реплік, різні обмеження ресурсів, різні теги образів.
Без Kustomize вам довелося б:
- Підтримувати окремі YAML-файли для кожного середовища (кошмар дублювання)
- Використовувати шаблони із заповнювачами (додає складності)
Kustomize використовує інший підхід: накладання та патчі. Починаєте з бази, нашаровуєте зміни для конкретного середовища зверху. Без шаблонізації. Чистий YAML. Вбудовано в kubectl.
Аналогія з прозорою плівкою
Уявіть Kustomize як прозорі плівки-накладки для проєктора. Ваш базовий слайд показує структуру застосунку. Для production ви накладаєте плівку, що додає “replicas: 10”. Для dev — плівку, що змінює тег образу. Кожна накладка модифікує базу без її дублювання. Нашаровуйте стільки накладок, скільки потрібно.
Що ви вивчите
Розділ «Що ви вивчите»Після завершення цього модуля ви зможете:
- Створювати бази та оверлеї Kustomize
- Патчити ресурси без зміни оригіналів
- Використовувати типові трансформації (мітки, простори імен, префікси)
- Генерувати ConfigMap та Secret з файлів
- Застосовувати конфігурації Kustomize через kubectl
Частина 1: Концепції Kustomize
Розділ «Частина 1: Концепції Kustomize»1.1 Основна термінологія
Розділ «1.1 Основна термінологія»| Термін | Визначення |
|---|---|
| Base (база) | Оригінальні, повторно використовувані визначення ресурсів |
| Overlay (оверлей) | Налаштування для конкретного середовища |
| Patch (патч) | Частковий YAML, що модифікує ресурс |
| kustomization.yaml | Маніфест, що визначає, що включити та трансформувати |
1.2 Структура каталогів
Розділ «1.2 Структура каталогів»myapp/├── base/ # Спільні, повторно використовувані визначення│ ├── kustomization.yaml│ ├── deployment.yaml│ ├── service.yaml│ └── configmap.yaml│└── overlays/ # Для конкретних середовищ ├── dev/ │ ├── kustomization.yaml │ └── patch-replicas.yaml │ ├── staging/ │ ├── kustomization.yaml │ └── patch-resources.yaml │ └── production/ ├── kustomization.yaml ├── patch-replicas.yaml └── patch-resources.yaml1.3 Як працює Kustomize
Розділ «1.3 Як працює Kustomize»┌────────────────────────────────────────────────────────────────┐│ Потік Kustomize ││ ││ Базові ресурси Патчі оверлею ││ ┌─────────────────┐ ┌─────────────────┐ ││ │ deployment.yaml │ │ patch-prod.yaml │ ││ │ replicas: 1 │ + │ replicas: 10 │ ││ │ image: v1 │ │ image: v2 │ ││ └─────────────────┘ └─────────────────┘ ││ │ │ ││ └──────────────┬───────────────┘ ││ │ ││ ▼ ││ ┌─────────────┐ ││ │ Kustomize │ ││ │ (злиття) │ ││ └──────┬──────┘ ││ │ ││ ▼ ││ Фінальний результат ││ ┌─────────────────┐ ││ │ deployment.yaml │ ││ │ replicas: 10 │ ││ │ image: v2 │ ││ └─────────────────┘ ││ │└────────────────────────────────────────────────────────────────┘Чи знали ви?
Kustomize вбудовано в kubectl починаючи з версії v1.14. Вам не потрібно нічого додатково встановлювати — просто використовуйте
kubectl apply -kабоkubectl kustomize. Саме тому це улюблена тема на іспиті CKA: все працює одразу.
Частина 2: Створення бази
Розділ «Частина 2: Створення бази»2.1 Файл kustomization.yaml
Розділ «2.1 Файл kustomization.yaml»Кожний каталог Kustomize потребує kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomization
resources: - deployment.yaml - service.yaml - configmap.yaml2.2 Базові ресурси
Розділ «2.2 Базові ресурси»apiVersion: apps/v1kind: Deploymentmetadata: name: myappspec: replicas: 1 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: nginx:1.25 ports: - containerPort: 80 resources: requests: memory: "64Mi" cpu: "100m"apiVersion: v1kind: Servicemetadata: name: myappspec: selector: app: myapp ports: - port: 80 targetPort: 802.3 Попередній перегляд базового виводу
Розділ «2.3 Попередній перегляд базового виводу»# Подивитися, що генерує базаkubectl kustomize base/
# Або використовуючи kustomize безпосередньоkustomize build base/Частина 3: Створення оверлеїв
Розділ «Частина 3: Створення оверлеїв»3.1 Простий оверлей
Розділ «3.1 Простий оверлей»apiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomization
resources: - ../../base # Посилання на базу
namePrefix: dev- # Префікс для всіх імен ресурсівnamespace: development # Розмістити все в цьому просторі імен
commonLabels: environment: dev # Додати цю мітку до всіх ресурсів3.2 Оверлей для production з патчами
Розділ «3.2 Оверлей для production з патчами»apiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomization
resources: - ../../base
namePrefix: prod-namespace: production
commonLabels: environment: production
patches: - path: patch-replicas.yaml - path: patch-resources.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: myapp # Має збігатися з іменем базового ресурсуspec: replicas: 10 # Перевизначити кількість реплікapiVersion: apps/v1kind: Deploymentmetadata: name: myappspec: template: spec: containers: - name: myapp resources: requests: memory: "256Mi" cpu: "500m" limits: memory: "512Mi" cpu: "1000m"3.3 Попередній перегляд та застосування оверлеїв
Розділ «3.3 Попередній перегляд та застосування оверлеїв»# Попередній перегляд оверлею для productionkubectl kustomize overlays/production/
# Застосувати до кластераkubectl apply -k overlays/production/
# Застосувати оверлей для devkubectl apply -k overlays/dev/Частина 4: Типові трансформери
Розділ «Частина 4: Типові трансформери»4.1 namePrefix та nameSuffix
Розділ «4.1 namePrefix та nameSuffix»namePrefix: prod-nameSuffix: -v2
# Результат: deployment "myapp" стає "prod-myapp-v2"4.2 namespace
Розділ «4.2 namespace»namespace: production
# Усі ресурси отримують namespace: production4.3 commonLabels
Розділ «4.3 commonLabels»commonLabels: app.kubernetes.io/name: myapp app.kubernetes.io/env: production
# Додається до ВСІХ ресурсів (metadata.labels ТА selector)4.4 commonAnnotations
Розділ «4.4 commonAnnotations»commonAnnotations: team: platform oncall: platform@example.com
# Додається до metadata.annotations усіх ресурсів4.5 images
Розділ «4.5 images»Зміна імен/тегів образів без патчингу:
images: - name: nginx # Оригінальне ім'я образу newName: my-registry/nginx newTag: "2.0"
# Змінює всі образи nginx на my-registry/nginx:2.0Частина 5: Стратегії патчингу
Розділ «Частина 5: Стратегії патчингу»5.1 Strategic Merge Patch (за замовчуванням)
Розділ «5.1 Strategic Merge Patch (за замовчуванням)»Зливає ваш патч із базою:
apiVersion: apps/v1kind: Deploymentmetadata: name: myappspec: template: spec: containers: - name: sidecar # Додається до наявних контейнерів image: busybox command: ["sleep", "infinity"]5.2 JSON 6902 Patch
Розділ «5.2 JSON 6902 Patch»Більш точний контроль за допомогою синтаксису JSON Patch:
patches: - target: kind: Deployment name: myapp patch: |- - op: replace path: /spec/replicas value: 5 - op: add path: /metadata/annotations/patched value: "true"5.3 Цільове застосування патчів
Розділ «5.3 Цільове застосування патчів»Цільовий вибір конкретних ресурсів:
patches: - path: patch-replicas.yaml target: kind: Deployment name: myappЦільовий вибір за міткою:
patches: - path: patch-memory.yaml target: kind: Deployment labelSelector: "tier=frontend"Частина 6: Генератори
Розділ «Частина 6: Генератори»6.1 Генератор ConfigMap
Розділ «6.1 Генератор ConfigMap»Генерація ConfigMap із файлів або літералів:
configMapGenerator: - name: app-config literals: - DATABASE_HOST=postgres - DATABASE_PORT=5432 files: - config.properties
# Створює ConfigMap із хешованим суфіксом у назві# наприклад, app-config-8h2k9d6.2 Генератор Secret
Розділ «6.2 Генератор Secret»secretGenerator: - name: db-credentials literals: - username=admin - password=secret123 type: Opaque
# Створює Secret із хешованим суфіксом у назві6.3 Навіщо хешовані імена?
Розділ «6.3 Навіщо хешовані імена?»app-config-8h2k9d ^^^^^^ хеш вмістуКоли вміст ConfigMap змінюється, хеш змінюється, що змінює ім’я. Це запускає поступове оновлення (rolling update) подів, що використовують цей ConfigMap — вони автоматично виявляють нове посилання.
6.4 Вимкнення хеш-суфіксів
Розділ «6.4 Вимкнення хеш-суфіксів»configMapGenerator: - name: app-config literals: - KEY=value
generatorOptions: disableNameSuffixHash: trueЧастина 7: Приклад із реального життя
Розділ «Частина 7: Приклад із реального життя»7.1 Повна структура каталогів
Розділ «7.1 Повна структура каталогів»webapp/├── base/│ ├── kustomization.yaml│ ├── deployment.yaml│ ├── service.yaml│ └── config/│ └── nginx.conf│└── overlays/ ├── dev/ │ └── kustomization.yaml └── prod/ ├── kustomization.yaml ├── patch-replicas.yaml └── secrets/ └── db-password.txt7.2 Базовий kustomization.yaml
Розділ «7.2 Базовий kustomization.yaml»apiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomization
resources: - deployment.yaml - service.yaml
configMapGenerator: - name: nginx-config files: - config/nginx.conf7.3 Оверлей для production
Розділ «7.3 Оверлей для production»apiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomization
resources: - ../../base
namespace: productionnamePrefix: prod-
commonLabels: environment: production
images: - name: nginx newTag: "1.25-alpine"
patches: - path: patch-replicas.yaml
secretGenerator: - name: db-credentials files: - password=secrets/db-password.txtЧастина 8: Інтеграція з kubectl
Розділ «Частина 8: Інтеграція з kubectl»8.1 Основні команди
Розділ «8.1 Основні команди»# Попередній перегляд виводу kustomizationkubectl kustomize <directory>
# Застосувати kustomization до кластераkubectl apply -k <directory>
# Видалити ресурси з kustomizationkubectl delete -k <directory>
# Порівняти з поточним станом кластераkubectl diff -k <directory>8.2 Команди для іспиту
Розділ «8.2 Команди для іспиту»# Швидке застосування для іспитуkubectl apply -k overlays/production/
# Перевірити, що було створеноkubectl get all -n production
# Якщо потрібно відлагодитиkubectl kustomize overlays/production/ | kubectl apply --dry-run=client -f -Частина 9: Kustomize проти Helm
Розділ «Частина 9: Kustomize проти Helm»| Аспект | Kustomize | Helm |
|---|---|---|
| Підхід | Оверлей/патч | Шаблон |
| Складність вивчення | Нижча | Вища |
| Чистий YAML | Так | Ні (Go-шаблони) |
| Обмін пакетами | Каталоги | Charts |
| Відкат | Не вбудований | Вбудований |
| Найкраще для | Варіантів конфігурації | Складних застосунків |
Використовуйте Kustomize, коли: у вас власні маніфести і потрібні варіації для різних середовищ.
Використовуйте Helm, коли: встановлюєте сторонні застосунки або потребуєте шаблонізації.
Порада для іспиту
На іспиті CKA вас можуть попросити використати Helm або Kustomize. Знайте обидва інструменти. Для швидкої кастомізації середовищ Kustomize налаштовується швидше.
Чи знали ви?
Розділ «Чи знали ви?»-
Kustomize був окремим інструментом до того, як його вбудували в kubectl. Ви й досі можете встановити окремий
kustomizeдля додаткових можливостей. -
Argo CD та Flux (інструменти GitOps) нативно розуміють Kustomize. Ваша структура оверлеїв стає вашою стратегією розгортання.
-
Можна поєднувати Helm та Kustomize. Генеруйте маніфести з Helm, а потім налаштовуйте за допомогою оверлеїв Kustomize.
Типові помилки
Розділ «Типові помилки»| Помилка | Проблема | Рішення |
|---|---|---|
| Неправильний шлях до бази | ”resource not found” | Використовуйте відносні шляхи, як-от ../../base |
| Забули kustomization.yaml | Помилки kubectl | Кожний каталог потребує цього файлу |
| Невідповідність імені патча | Патч не застосовується | metadata.name патча повинно збігатися з базою |
| Відсутній namespace | Ресурси в неправильному просторі імен | Додайте namespace: до оверлею |
| commonLabels ламає селектори | Невідповідність селекторів | Ретельно тестуйте, мітки впливають на селектори |
Тест
Розділ «Тест»-
Яка різниця між базою та оверлеєм у Kustomize?
Відповідь
**База** містить оригінальні, повторно використовувані визначення ресурсів. **Оверлей** посилається на базу та додає налаштування для конкретного середовища (патчі, мітки, простори імен). Оверлеї модифікують бази без їх дублювання. -
Як застосувати конфігурацію Kustomize до вашого кластера?
Відповідь
`kubectl apply -k`, де каталог містить файл kustomization.yaml. Приклад: `kubectl apply -k overlays/production/` -
Чому Kustomize додає хеш-суфікс до згенерованих ConfigMap?
Відповідь
Хеш базується на вмісті ConfigMap. Коли вміст змінюється, хеш змінюється, що змінює ім'я ConfigMap. Поди, що посилаються на ConfigMap, виявляють нове ім'я та запускають поступове оновлення (rolling update), гарантуючи отримання нової конфігурації. -
Вам потрібно змінити тег образу для production, не модифікуючи базу. Як?
Відповідь
Використайте трансформер `images` у kustomization.yaml вашого оверлею: ```yaml images: - name: nginx newTag: "1.25-production" ``` Це змінює всі посилання на образ nginx без зміни базових файлів.
Практична вправа
Розділ «Практична вправа»Завдання: Створити структуру Kustomize для вебзастосунку з оверлеями dev та prod.
Кроки:
- Створіть структуру каталогів:
mkdir -p webapp/base webapp/overlays/dev webapp/overlays/prod- Створіть базовий deployment:
cat > webapp/base/deployment.yaml << 'EOF'apiVersion: apps/v1kind: Deploymentmetadata: name: webappspec: replicas: 1 selector: matchLabels: app: webapp template: metadata: labels: app: webapp spec: containers: - name: webapp image: nginx:1.25 ports: - containerPort: 80EOF- Створіть базовий service:
cat > webapp/base/service.yaml << 'EOF'apiVersion: v1kind: Servicemetadata: name: webappspec: selector: app: webapp ports: - port: 80EOF- Створіть базовий kustomization:
cat > webapp/base/kustomization.yaml << 'EOF'apiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources: - deployment.yaml - service.yamlEOF- Створіть оверлей для dev:
cat > webapp/overlays/dev/kustomization.yaml << 'EOF'apiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources: - ../../basenamePrefix: dev-namespace: developmentcommonLabels: environment: devEOF- Створіть оверлей для prod із патчем:
cat > webapp/overlays/prod/patch-replicas.yaml << 'EOF'apiVersion: apps/v1kind: Deploymentmetadata: name: webappspec: replicas: 5EOF
cat > webapp/overlays/prod/kustomization.yaml << 'EOF'apiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources: - ../../basenamePrefix: prod-namespace: productioncommonLabels: environment: productionimages: - name: nginx newTag: "1.25-alpine"patches: - path: patch-replicas.yamlEOF- Попередній перегляд та порівняння:
echo "=== DEV ===" && kubectl kustomize webapp/overlays/dev/echo "=== PROD ===" && kubectl kustomize webapp/overlays/prod/- Застосуйте оверлей для dev:
kubectl create namespace developmentkubectl apply -k webapp/overlays/dev/kubectl get all -n development- Застосуйте оверлей для prod:
kubectl create namespace productionkubectl apply -k webapp/overlays/prod/kubectl get all -n productionКритерії успіху:
- Розуміння структури база vs оверлей
- Вмієте створювати файли kustomization.yaml
- Вмієте використовувати namePrefix, namespace, commonLabels
- Вмієте створювати та застосовувати патчі
- Вмієте переглядати вивід за допомогою
kubectl kustomize
Очищення:
kubectl delete -k webapp/overlays/dev/kubectl delete -k webapp/overlays/prod/kubectl delete namespace development productionrm -rf webapp/Практичні вправи
Розділ «Практичні вправи»Вправа 1: Kustomize проти kubectl apply (Ціль: 2 хвилини)
Розділ «Вправа 1: Kustomize проти kubectl apply (Ціль: 2 хвилини)»Зрозумійте різницю:
# Створити базуmkdir -p drill1/basecat << 'EOF' > drill1/base/deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginxEOF
cat << 'EOF' > drill1/base/kustomization.yamlapiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources: - deployment.yamlEOF
# Попередній перегляд vs застосуванняkubectl kustomize drill1/base/ # Лише попередній переглядkubectl apply -k drill1/base/ # Справжнє застосуванняkubectl get deploy nginxkubectl delete -k drill1/base/rm -rf drill1Вправа 2: Трансформація простору імен (Ціль: 3 хвилини)
Розділ «Вправа 2: Трансформація простору імен (Ціль: 3 хвилини)»mkdir -p drill2/base drill2/overlays/devcat << 'EOF' > drill2/base/deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: appspec: replicas: 1 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: app image: nginxEOF
cat << 'EOF' > drill2/base/kustomization.yamlapiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources: - deployment.yamlEOF
cat << 'EOF' > drill2/overlays/dev/kustomization.yamlapiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources: - ../../basenamespace: dev-namespacenamePrefix: dev-EOF
# Попередній перегляд — подивіться на трансформаціїkubectl kustomize drill2/overlays/dev/
# Застосуватиkubectl create namespace dev-namespacekubectl apply -k drill2/overlays/dev/kubectl get deploy -n dev-namespace # Показує dev-app
# Очищенняkubectl delete -k drill2/overlays/dev/kubectl delete namespace dev-namespacerm -rf drill2Вправа 3: Трансформація образу (Ціль: 3 хвилини)
Розділ «Вправа 3: Трансформація образу (Ціль: 3 хвилини)»mkdir -p drill3cat << 'EOF' > drill3/deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: webspec: replicas: 1 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: web image: nginx:1.19EOF
cat << 'EOF' > drill3/kustomization.yamlapiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources: - deployment.yamlimages: - name: nginx newTag: "1.25"EOF
# Попередній перегляд — зверніть увагу, що образ змінився на nginx:1.25kubectl kustomize drill3/
# Застосувати та перевіритиkubectl apply -k drill3/kubectl get deploy web -o jsonpath='{.spec.template.spec.containers[0].image}'# Вивід: nginx:1.25
# Очищенняkubectl delete -k drill3/rm -rf drill3Вправа 4: Виправлення несправностей — зламана Kustomization (Ціль: 5 хвилин)
Розділ «Вправа 4: Виправлення несправностей — зламана Kustomization (Ціль: 5 хвилин)»# Створити зламану kustomizationmkdir -p drill4cat << 'EOF' > drill4/kustomization.yamlapiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources: - deployment.yaml # Файл не існує! - service.yaml # Файл не існує!commonLabels: app: myappEOF
# Спробувати зібрати — буде помилкаkubectl kustomize drill4/
# ВАШЕ ЗАВДАННЯ: Виправте, створивши відсутні файлиРішення
cat << 'EOF' > drill4/deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: myappspec: replicas: 1 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: app image: nginxEOF
cat << 'EOF' > drill4/service.yamlapiVersion: v1kind: Servicemetadata: name: myappspec: selector: app: myapp ports: - port: 80EOF
# Тепер працюєkubectl kustomize drill4/rm -rf drill4Вправа 5: Strategic Merge Patch (Ціль: 5 хвилин)
Розділ «Вправа 5: Strategic Merge Patch (Ціль: 5 хвилин)»mkdir -p drill5/base drill5/overlaycat << 'EOF' > drill5/base/deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: appspec: replicas: 1 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: app image: nginx resources: requests: memory: "64Mi" cpu: "100m"EOF
cat << 'EOF' > drill5/base/kustomization.yamlapiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources: - deployment.yamlEOF
# Створити патч для збільшення ресурсів у productioncat << 'EOF' > drill5/overlay/patch-resources.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: appspec: replicas: 3 template: spec: containers: - name: app resources: requests: memory: "256Mi" cpu: "500m" limits: memory: "512Mi" cpu: "1000m"EOF
cat << 'EOF' > drill5/overlay/kustomization.yamlapiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources: - ../basepatches: - path: patch-resources.yamlEOF
# Попередній перегляд результатуkubectl kustomize drill5/overlay/rm -rf drill5Вправа 6: Генератор ConfigMap (Ціль: 3 хвилини)
Розділ «Вправа 6: Генератор ConfigMap (Ціль: 3 хвилини)»mkdir -p drill6cat << 'EOF' > drill6/app.propertiesDATABASE_URL=postgres://localhost:5432/mydbLOG_LEVEL=infoFEATURE_FLAG=enabledEOF
cat << 'EOF' > drill6/kustomization.yamlapiVersion: kustomize.config.k8s.io/v1beta1kind: KustomizationconfigMapGenerator: - name: app-config files: - app.properties literals: - EXTRA_KEY=extra-valueEOF
# Попередній перегляд — зверніть увагу на ConfigMap із хеш-суфіксомkubectl kustomize drill6/rm -rf drill6Вправа 7: Виклик — налаштування для кількох середовищ
Розділ «Вправа 7: Виклик — налаштування для кількох середовищ»Створіть повну структуру Kustomize для 3 середовищ без підглядання в рішення:
Вимоги:
- База: nginx deployment, service
- Dev: 1 репліка, простір імен
dev, образnginx:1.24 - Staging: 2 репліки, простір імен
staging, образnginx:1.25 - Prod: 5 реплік, простір імен
production, образnginx:1.25, додати обмеження ресурсів
mkdir -p challenge/{base,overlays/{dev,staging,prod}}# ВАШЕ ЗАВДАННЯ: Створіть усі файли kustomization.yaml та ресурсівСтруктура рішення
challenge/├── base/│ ├── deployment.yaml│ ├── service.yaml│ └── kustomization.yaml├── overlays/│ ├── dev/│ │ └── kustomization.yaml│ ├── staging/│ │ └── kustomization.yaml│ └── prod/│ ├── kustomization.yaml│ └── patch-resources.yamlПротестуйте кожний: kubectl kustomize challenge/overlays/dev/
Наступний модуль
Розділ «Наступний модуль»Модуль 1.5: CRD та Оператори — розширення Kubernetes за допомогою Custom Resource Definitions.