Files
kyverno-2026-example/04-generation/02-lifecycle/README.md
2026-04-08 20:22:14 +07:00

107 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Урок 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 <name> -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)
```