Урок 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)