# Урок 4.2 — Управление жизненным циклом генерируемых ресурсов ## Файлы | Файл | Описание | |------|----------| | `cleanup-debug-pods.yaml` | CleanupPolicy — автоудаление debug подов старше 4ч | ## Параметр synchronize — детально ```yaml generate: synchronize: true # живая ссылка: обновляется, восстанавливается, удаляется вместе synchronize: false # создать один раз, дальше независимо ``` | Событие | synchronize: true | synchronize: false | |---------|-------------------|-------------------| | Источник изменился | Генерируемый обновляется | Без изменений | | Генерируемый удалён | Восстанавливается | Не восстанавливается | | Источник удалён | Генерируемый удаляется | Остаётся | ## Применение CleanupPolicy ```bash # CleanupPolicy требует Kyverno >= 1.9 kubectl apply -f cleanup-debug-pods.yaml # Проверить статус kubectl get clustercleanuppolicies ``` ## Тест CleanupPolicy ```bash # Создать 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 ```bash # Все 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 -n kyverno # Типичные причины ошибок: # 1. Нет прав у Kyverno ServiceAccount kubectl get clusterrolebinding | grep kyverno # 2. Ресурс уже существует (не управляется Kyverno) # 3. Синтаксическая ошибка в шаблоне generate ``` ## Взять под управление существующий ресурс ```bash # Если ресурс уже существует и нужно передать его 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 — полный сценарий ```bash # Одна команда создаёт полностью настроенный 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) ```