init
This commit is contained in:
106
04-generation/02-lifecycle/README.md
Normal file
106
04-generation/02-lifecycle/README.md
Normal 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)
|
||||
```
|
||||
29
04-generation/02-lifecycle/cleanup-debug-pods.yaml
Normal file
29
04-generation/02-lifecycle/cleanup-debug-pods.yaml
Normal file
@@ -0,0 +1,29 @@
|
||||
apiVersion: kyverno.io/v2alpha1
|
||||
kind: ClusterCleanupPolicy
|
||||
metadata:
|
||||
name: cleanup-debug-pods
|
||||
annotations:
|
||||
policies.kyverno.io/title: "Автоудаление debug подов"
|
||||
policies.kyverno.io/category: Governance
|
||||
policies.kyverno.io/severity: low
|
||||
policies.kyverno.io/description: >-
|
||||
Удаляет поды с лейблом purpose=debug старше 4 часов.
|
||||
Запускается каждый час по расписанию.
|
||||
Предотвращает накопление забытых отладочных подов в кластере.
|
||||
spec:
|
||||
schedule: "0 * * * *" # каждый час в :00
|
||||
match:
|
||||
resources:
|
||||
kinds:
|
||||
- Pod
|
||||
namespaces:
|
||||
- default
|
||||
- staging
|
||||
selector:
|
||||
matchLabels:
|
||||
purpose: debug
|
||||
conditions:
|
||||
any:
|
||||
- key: "{{ time_since('', request.object.metadata.creationTimestamp, '') }}"
|
||||
operator: GreaterThan
|
||||
value: "4h"
|
||||
Reference in New Issue
Block a user