107 lines
3.6 KiB
Markdown
107 lines
3.6 KiB
Markdown
# Урок 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)
|
||
```
|