97 lines
3.5 KiB
Markdown
97 lines
3.5 KiB
Markdown
# Урок 4.1 — Автоматическое создание ConfigMaps и Secrets
|
||
|
||
## Файлы
|
||
|
||
| Файл | Триггер | Что создаёт |
|
||
|------|---------|-------------|
|
||
| `generate-namespace-config.yaml` | Namespace | ConfigMap с мета-данными namespace |
|
||
| `generate-default-networkpolicy.yaml` | Namespace | NetworkPolicy deny-all |
|
||
| `generate-resource-quota.yaml` | Namespace | ResourceQuota по tier |
|
||
| `quota-defaults-configmap.yaml` | — | ConfigMap с квотами (нужен заранее) |
|
||
| `clone-registry-secret.yaml` | Namespace | Копия registry Secret |
|
||
| `generate-developer-rolebinding.yaml` | Namespace+label | RoleBinding для команды |
|
||
| `developer-clusterrole.yaml` | — | ClusterRole developer (нужна заранее) |
|
||
|
||
## Подготовка (применить до политик)
|
||
|
||
```bash
|
||
# 1. Создать ConfigMap с квотами
|
||
kubectl apply -f quota-defaults-configmap.yaml
|
||
|
||
# 2. Создать ClusterRole developer
|
||
kubectl apply -f developer-clusterrole.yaml
|
||
|
||
# 3. Создать мастер-секрет для registry (замените данные на реальные)
|
||
kubectl create secret docker-registry registry-credentials-master \
|
||
--docker-server=registry.company.com \
|
||
--docker-username=robot-account \
|
||
--docker-password=your-token \
|
||
--namespace=kyverno
|
||
|
||
# 4. Применить все политики
|
||
kubectl apply -f generate-namespace-config.yaml
|
||
kubectl apply -f generate-default-networkpolicy.yaml
|
||
kubectl apply -f generate-resource-quota.yaml
|
||
kubectl apply -f clone-registry-secret.yaml
|
||
kubectl apply -f generate-developer-rolebinding.yaml
|
||
```
|
||
|
||
## Тест: создать namespace и проверить генерацию
|
||
|
||
```bash
|
||
# Создать тестовый namespace
|
||
kubectl create namespace test-team \
|
||
--dry-run=client -o yaml | \
|
||
kubectl apply -f -
|
||
|
||
kubectl label namespace test-team \
|
||
team=platform \
|
||
tier=standard \
|
||
environment=staging
|
||
|
||
# Подождать ~5 секунд для генерации, затем проверить
|
||
kubectl get configmap,networkpolicy,resourcequota,rolebinding \
|
||
-n test-team
|
||
|
||
# Детали сгенерированных ресурсов
|
||
kubectl get configmap namespace-config -n test-team -o yaml
|
||
kubectl get networkpolicy default-deny-all -n test-team -o yaml
|
||
kubectl get resourcequota default-quota -n test-team -o yaml
|
||
```
|
||
|
||
## Тест synchronize — защита от случайного удаления
|
||
|
||
```bash
|
||
# Удалить NetworkPolicy вручную
|
||
kubectl delete networkpolicy default-deny-all -n test-team
|
||
|
||
# Kyverno восстановит её через несколько секунд
|
||
sleep 10
|
||
kubectl get networkpolicy -n test-team
|
||
# default-deny-all снова присутствует
|
||
```
|
||
|
||
## Тест cascade delete
|
||
|
||
```bash
|
||
# Удалить namespace — все сгенерированные ресурсы удалятся вместе с ним
|
||
kubectl delete namespace test-team
|
||
|
||
# Проверить что ресурсы не зависли
|
||
kubectl get generaterequests -n kyverno
|
||
```
|
||
|
||
## Мониторинг GenerateRequests
|
||
|
||
```bash
|
||
# Просмотр очереди генерации
|
||
kubectl get generaterequests -n kyverno -o wide
|
||
|
||
# Детали при ошибке
|
||
kubectl describe generaterequests -n kyverno | grep -A 20 "Status:"
|
||
|
||
# Метрики генерации
|
||
kubectl port-forward -n kyverno svc/kyverno-svc-metrics 8000:8000 &
|
||
curl -s http://localhost:8000/metrics | grep kyverno_generate
|
||
```
|