Урок 3.1 — Основы мутации ресурсов
Файлы
| Файл | Описание |
|---|---|
add-standard-labels.yaml |
Автодобавление лейблов managed-by, monitored, cost-center |
add-default-resource-requests.yaml |
Дефолтные requests для контейнеров без них |
add-default-security-context.yaml |
Безопасный SecurityContext по умолчанию |
Как проверить результат мутации
# Применить политики
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
# Показывает изменённый ресурс в 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 операций
# 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
Порядок применения политик
Если несколько политик мутируют один ресурс — они применяются в алфавитном порядке имён политик.
# Управляйте порядком через числовые префиксы в именах:
# 01-add-labels → 02-add-annotations → 03-add-sidecar
kubectl get mutatingwebhookconfigurations -o yaml | \
grep "name:" | grep kyverno