Files
kyverno-2026-example/03-mutation/01-basics/README.md
2026-04-08 20:22:14 +07:00

83 lines
2.8 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.
# Урок 3.1 — Основы мутации ресурсов
## Файлы
| Файл | Описание |
|------|----------|
| `add-standard-labels.yaml` | Автодобавление лейблов managed-by, monitored, cost-center |
| `add-default-resource-requests.yaml` | Дефолтные requests для контейнеров без них |
| `add-default-security-context.yaml` | Безопасный SecurityContext по умолчанию |
## Как проверить результат мутации
```bash
# Применить политики
kubectl apply -f .
# Создать под без лейблов и requests
kubectl apply -f test-resources/pod-before-mutation.yaml
# Посмотреть что изменилось — сравнить с оригиналом
kubectl get pod pod-before-mutation -o yaml | \
grep -A 20 "labels:"
kubectl get pod pod-before-mutation -o yaml | \
grep -A 10 "resources:"
# Dry-run — увидеть результат без реального создания
kubectl apply -f test-resources/pod-before-mutation.yaml \
--dry-run=server -o yaml | \
diff test-resources/pod-before-mutation.yaml - || true
```
## Отладка мутаций через Kyverno CLI
```bash
# Показывает изменённый ресурс в stdout
kyverno apply add-standard-labels.yaml \
--resource test-resources/pod-before-mutation.yaml \
--detailed-results
# Сохранить мутированный ресурс
kyverno apply . \
--resource test-resources/pod-before-mutation.yaml \
> test-resources/pod-after-mutation.yaml
cat test-resources/pod-after-mutation.yaml
```
## Типы patch операций
```yaml
# Strategic Merge — наиболее читаемый, для добавления полей
mutate:
patchStrategicMerge:
metadata:
labels:
+(new-label): value # + = добавить только если нет
# JSON Patch RFC 6902 — для точечных изменений и удаления полей
mutate:
patchesJson6902: |-
- op: add
path: /metadata/annotations/company.com~1reviewed # ~1 = / в имени
value: "true"
- op: replace
path: /spec/replicas
value: 3
- op: remove
path: /spec/template/metadata/annotations/debug
```
## Порядок применения политик
Если несколько политик мутируют один ресурс — они применяются
в **алфавитном порядке** имён политик.
```bash
# Управляйте порядком через числовые префиксы в именах:
# 01-add-labels → 02-add-annotations → 03-add-sidecar
kubectl get mutatingwebhookconfigurations -o yaml | \
grep "name:" | grep kyverno
```