init
This commit is contained in:
82
03-mutation/02-sidecar/README.md
Normal file
82
03-mutation/02-sidecar/README.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# Урок 3.2 — Автоматическое добавление sidecar контейнеров
|
||||
|
||||
## Файлы
|
||||
|
||||
| Файл | Описание |
|
||||
|------|----------|
|
||||
| `inject-fluent-bit.yaml` | Opt-in injection Fluent Bit (по аннотации) |
|
||||
| `fluent-bit-configmap.yaml` | ConfigMap с конфигурацией Fluent Bit |
|
||||
| `inject-prometheus-exporter.yaml` | Opt-in injection Prometheus exporter |
|
||||
|
||||
## Подготовка
|
||||
|
||||
```bash
|
||||
# Применить ConfigMap (нужен до создания подов с Fluent Bit)
|
||||
kubectl apply -f fluent-bit-configmap.yaml
|
||||
|
||||
# Применить политики injection
|
||||
kubectl apply -f inject-fluent-bit.yaml
|
||||
kubectl apply -f inject-prometheus-exporter.yaml
|
||||
```
|
||||
|
||||
## Тестирование Fluent Bit injection
|
||||
|
||||
```bash
|
||||
# Под БЕЗ аннотации — sidecar не добавится
|
||||
kubectl apply -f test-resources/pod-no-logging.yaml
|
||||
kubectl get pod pod-no-logging -o jsonpath='{.spec.containers[*].name}'
|
||||
# Вывод: app
|
||||
|
||||
# Под С аннотацией — sidecar добавится автоматически
|
||||
kubectl apply -f test-resources/pod-with-logging.yaml
|
||||
kubectl get pod pod-with-logging -o jsonpath='{.spec.containers[*].name}'
|
||||
# Вывод: app fluent-bit
|
||||
|
||||
# Проверить конфигурацию sidecar
|
||||
kubectl describe pod pod-with-logging | grep -A 30 "fluent-bit:"
|
||||
|
||||
# Удалить тесты
|
||||
kubectl delete pod pod-no-logging pod-with-logging
|
||||
```
|
||||
|
||||
## Тестирование Prometheus exporter injection
|
||||
|
||||
```bash
|
||||
kubectl apply -f test-resources/pod-with-monitoring.yaml
|
||||
|
||||
kubectl get pod pod-with-monitoring \
|
||||
-o jsonpath='{.spec.containers[*].name}'
|
||||
# Вывод: app prometheus-exporter
|
||||
|
||||
# Проверить аннотации
|
||||
kubectl get pod pod-with-monitoring \
|
||||
-o jsonpath='{.metadata.annotations}' | jq .
|
||||
|
||||
kubectl delete pod pod-with-monitoring
|
||||
```
|
||||
|
||||
## Opt-in vs Opt-out
|
||||
|
||||
```yaml
|
||||
# Opt-in: срабатывает только при наличии аннотации
|
||||
preconditions:
|
||||
- key: "{{ request.object.metadata.annotations.\"logging.company.com/enabled\" }}"
|
||||
operator: Equals
|
||||
value: "true"
|
||||
|
||||
# Opt-out: срабатывает везде, кроме явно исключённых
|
||||
preconditions:
|
||||
- key: "{{ request.object.metadata.annotations.\"logging.company.com/disabled\" || 'false' }}"
|
||||
operator: NotEquals
|
||||
value: "true"
|
||||
```
|
||||
|
||||
## Защита от дублирования
|
||||
|
||||
```bash
|
||||
# Попробовать создать под, который уже содержит fluent-bit
|
||||
kubectl apply -f test-resources/pod-already-has-sidecar.yaml
|
||||
# Sidecar НЕ будет дублирован (precondition NotIn защищает)
|
||||
kubectl get pod pod-already-has-sidecar \
|
||||
-o jsonpath='{.spec.containers[*].name}'
|
||||
```
|
||||
Reference in New Issue
Block a user