Files
2026-04-08 20:22:14 +07:00
..
2026-04-08 20:22:14 +07:00
2026-04-08 20:22:14 +07:00

Урок 4.2 — Управление жизненным циклом генерируемых ресурсов

Файлы

Файл Описание
cleanup-debug-pods.yaml CleanupPolicy — автоудаление debug подов старше 4ч

Параметр synchronize — детально

generate:
  synchronize: true   # живая ссылка: обновляется, восстанавливается, удаляется вместе
  synchronize: false  # создать один раз, дальше независимо
Событие synchronize: true synchronize: false
Источник изменился Генерируемый обновляется Без изменений
Генерируемый удалён Восстанавливается Не восстанавливается
Источник удалён Генерируемый удаляется Остаётся

Применение CleanupPolicy

# CleanupPolicy требует Kyverno >= 1.9
kubectl apply -f cleanup-debug-pods.yaml

# Проверить статус
kubectl get clustercleanuppolicies

Тест CleanupPolicy

# Создать debug-под
kubectl run debug-test \
  --image=busybox:1.36 \
  --labels="purpose=debug" \
  --restart=Never \
  -- sleep 3600

# Принудительно запустить cleanup (изменив schedule на ближайшую минуту)
# Или подождать час и проверить:
kubectl get pod debug-test

# Проверить логи cleanup controller
kubectl logs -n kyverno \
  -l app.kubernetes.io/component=cleanup-controller \
  --tail=30

Диагностика GenerateRequests

# Все GenerateRequests
kubectl get generaterequests -n kyverno

# Зависшие в Processing статусе
kubectl get generaterequests -n kyverno \
  -o jsonpath='{range .items[?(@.status.state=="Failed")]}{.metadata.name}{"\n"}{end}'

# Детали конкретного
kubectl describe generaterequest <name> -n kyverno

# Типичные причины ошибок:
# 1. Нет прав у Kyverno ServiceAccount
kubectl get clusterrolebinding | grep kyverno
# 2. Ресурс уже существует (не управляется Kyverno)
# 3. Синтаксическая ошибка в шаблоне generate

Взять под управление существующий ресурс

# Если ресурс уже существует и нужно передать его Kyverno:
kubectl label configmap namespace-config \
  -n my-namespace \
  kyverno.io/managed=true

# Или удалить ресурс, Kyverno пересоздаст его
kubectl delete configmap namespace-config -n my-namespace
# Kyverno создаст новый через background controller

Bootstrap Namespace — полный сценарий

# Одна команда создаёт полностью настроенный namespace:
kubectl create namespace payments-service
kubectl label namespace payments-service \
  team=payments \
  tier=premium \
  environment=production

# Через ~10 секунд:
kubectl get all,configmap,secret,networkpolicy,resourcequota,rolebinding \
  -n payments-service

# Ожидаемый результат:
# configmap/namespace-config
# networkpolicy/default-deny-all
# resourcequota/default-quota (с premium квотами)
# secret/registry-credentials
# rolebinding/developer-access (для группы payments-developers)