Conseils pour la configuration des objectifs de niveau de service (SLO) dans Kubernetes avec Prometheus et Linkerd

En prévision du début du cours "Plateforme d'infrastructure basée sur Kubernetes", nous avons préparé une traduction traditionnelle d'un article utile.


Les objectifs de niveau de service (SLO) sont beaucoup plus faciles à utiliser avec une grille de service

, (SLO, . Service Level Objectives) Kubernetes  Prometheus, ,  Linkerd,  . , , , SLO.

, , , SLO Kubernetes .

SLO Kubernetes

SLO, , . , Google SRE, SLO , , , .

, , , SLO : SLO , , .  Kubernetes, . , SLO , . (. SLO Kubernetes.)

, SLO Kubernetes , . SLO , , ! , Linkerd golden metrics ( ) — , ,  — . Linkerd SLO .

(, SLO, , , . , , , , SLO .)

.

SLO Linkerd Prometheus

, SLO gRPC-, Kubernetes. , SLO.

, Linkerd . Linkerd HTTP gRPC, (pods) . , Prometheus. Prometheus Linkerd, .

, , , Linkerd Prometheus, SLO.

: Linkerd Kubernetes

. , Kubernetes  kubectl, . Linkerd, , Linkerd .

Linkerd:

curl -sL https://run.linkerd.io/install | sh
export PATH=$PATH:$HOME/.linkerd2/bin

(Linkerd   Linkerd.)

, , Kubernetes Linkerd, Linkerd :

linkerd check --pre
linkerd install | kubectl apply -f -
linkerd check

, Emojivoto, :

curl -sL https://run.linkerd.io/emojivoto.yml \
  | linkerd inject - \
  | kubectl apply -f -

. SLO: .

 — , , SLO. ?

. , ,     7 80 %.  SLO. :  (service level indicator — SLI), ; , ;   . :

SLI:

: 80 %

: 7

SLO , 20 % 7- , . ,  — , 20 % «» .

, 7 100 % , 100 %  — . , 7 80 % , 0 % .   80 %,    SLO .

:

= 1–[(1–)/(1–)]

  — SLI, . , , SLI ( ) .

Prometheus

. Prometheus Linkerd, , :

# Get the name of the prometheus pod
$ kubectl -n linkerd get pods
NAME                                      READY   STATUS    RESTARTS   AGE
..
linkerd-prometheus-54dd7dd977-zrgqw       2/2     Running   0          16h

PODNAME, :

kubectl -n linkerd port-forward linkerd-prometheus-PODNAME 9090:9090

 localhost:9090   PromQL, Prometheus.

Tableau de bord Prometheus
Prometheus

, !

Prometheus

100 80 %  — . , Prometheus. Emojivoto, emojivoto .

, :

:

response_total{deployment="voting", direction="inbound", namespace="emojivoto"}

:

response_total{classification="success",deployment="voting",direction="inbound",namespace="emojivoto",..} 46499
response_total{classification="failure",deployment="voting",direction="inbound",namespace="emojivoto",..} 8652

, , : classification. 46 499 8652 .

, 7 ,  classification="success"   [7d]:

:

response_total{deployment="voting", classification="success", direction="inbound", namespace="emojivoto"}[7d]

, PromQL increase() sum(), , :

:

sum(increase(response_total{deployment="voting", classification="success", direction="inbound", namespace="emojivoto"}[7d])) by (namespace, deployment, classification, tls)

:

{classification="success",deployment="voting",namespace="emojivoto",tls="true"} 26445.68142198795

, 7 26 445 (  increase()).

, , , —  classification="success":

:

sum(increase(response_total{deployment="voting", classification="success", direction="inbound", namespace="emojivoto"}[7d])) by (namespace, deployment, classification, tls) / ignoring(classification) sum(increase(response_total{deployment="voting", direction="inbound", namespace="emojivoto"}[7d])) by (namespace, deployment, tls)

:

{deployment="voting",namespace="emojivoto",tls="true"} 0.846113068695625

, 7 84,61 % .

, , . :

= 1–[(1–)/(1–)]

, 80 % (0,8):

:

1 - ((1 - (sum(increase(response_total{deployment="voting", classification="success", direction="inbound", namespace="emojivoto"}[7d])) by (namespace, deployment, classification, tls)) / ignoring(classification) sum(increase(response_total{deployment="voting", direction="inbound", namespace="emojivoto"}[7d])) by (namespace, deployment, tls)) / (1 - .80))

:

{deployment="voting",namespace="emojivoto",tls="true"} 0.2312188519042635

23,12 % .

, !

Grafana

 — , ? ! Linkerd Grafana, Linkerd.

Linkerd,  linkerd dashboard.

Grafana emojivoto, Grafana .

Tableau de bord Linkerd avec intégration Grafana
Linkerd Grafana

 deploy/voting, : , . .

Linkerd dans le tableau de bord Grafana
Linkerd Grafana

 —  7-day error budget (success rate) (« 7 ( )») , , PromQL.

!

Budget de bogue dans Grafana avec les métriques Linkerd
Grafana Linkerd

.

, , , PromQL, rate(), .

, -, . (Gauge) , , .

Budget d'erreur de 7 jours (taux de réussite) au format Jauge.
7 ( ) (Gauge).

, emojivoto,  deployment="voting". , 80 %.

Budget d'erreur sur 7 jours (pourcentage de tentatives réussies) pour tous les services.
7 ( ) .

SLO

SLO Linkerd, Grafana. !

?

, , SLO. . , .  , . SLO .

Buoyant SLO, Kubernetes. ,   Dive, SLO . Dive Linkerd , , . Dive , ,  , SLO, .

Tableau de bord de plongée montrant la conformité du SLO et du budget des bogues sur 7 jours.
Dive, SLO 7- .

,  — Dive SLO Linkerd Prometheus Grafana, , — SLO!

:

(SLO) Kubernetes

(SLO) . SLO — . « , , ?» , Kubernetes, SLO - : , , .


" Kubernetes". " Kubernetes" .


:




All Articles