В Deckhouse Kubernetes Platform механизм Circuit Breaker реализуется средствами Istio (модуль istio
) и обеспечивает следующие возможности:
- временное исключение эндпоинта из балансировки, если превышен лимит ошибок;
- настройка лимитов на количество TCP-соединений и количество запросов в сторону одного эндпоинта;
- выявление зависших запросов и обрывание их с кодом ошибки (HTTP request timeout).
Пример настройки Circuit Breaker
Для выявления проблемных эндпоинтов используются настройки outlierDetection
в кастомном ресурсе DestinationRule.
Более подробно алгоритм Outlier Detection описан в документации Envoy.
Пример:
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: reviews-cb-policy
spec:
host: reviews.prod.svc.cluster.local
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100 # Максимальное число соединений в сторону host, суммарно для всех эндпоинтов.
http:
maxRequestsPerConnection: 10 # Каждые 10 запросов соединение будет пересоздаваться.
outlierDetection:
consecutive5xxErrors: 7 # Допускается 7 ошибок (включая `5xx`, TCP-таймауты и HTTP-таймауты)
interval: 5m # в течение 5 минут,
baseEjectionTime: 15m # после которых эндпоинт будет исключен из балансировки на 15 минут.
Также для настройки HTTP-таймаутов используется ресурс VirtualService. Эти таймауты учитываются и при подсчёте статистики ошибок на эндпоинтах.
Пример:
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: my-productpage-rule
namespace: myns
spec:
hosts:
- productpage
http:
- timeout: 5s
route:
- destination:
host: productpage