Files
2026-04-08 20:22:14 +07:00
..
2026-04-08 20:22:14 +07:00
2026-04-08 20:22:14 +07:00
2026-04-08 20:22:14 +07:00
2026-04-08 20:22:14 +07:00
2026-04-08 20:22:14 +07:00

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