This commit is contained in:
2026-04-08 20:22:14 +07:00
commit 34fbdd1412
96 changed files with 5321 additions and 0 deletions

View File

@@ -0,0 +1,106 @@
# Урок 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)
```