# Урок 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 ```