83 lines
2.7 KiB
Markdown
83 lines
2.7 KiB
Markdown
# Урок 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}'
|
||
```
|