95 lines
3.1 KiB
Markdown
95 lines
3.1 KiB
Markdown
# Урок 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
|
|
```
|
|
|
|
## Дебаг мутаций
|
|
|
|
```bash
|
|
# Посмотреть мутированный под
|
|
kubectl get pod my-pod -o yaml | grep -A 20 "labels:"
|
|
|
|
# Проверить через dry-run
|
|
kubectl apply -f pod.yaml --dry-run=server -o yaml | grep -A 5 "labels:"
|
|
|
|
# Kyverno CLI для локального тестирования
|
|
kyverno apply add-standard-labels.yaml --resource pod.yaml
|
|
``` |