Antecipando o início do curso "Plataforma de infraestrutura baseada em Kubernetes", preparamos uma tradução tradicional de um artigo útil.
Os objetivos de nível de serviço (SLOs) são muito mais fáceis de trabalhar com uma grade de serviços
, (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.

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 .

deploy/voting, : , . .
— 7-day error budget (success rate) (« 7 ( )») , , PromQL.
!
.
, , , PromQL, rate()
, .
, -, . (Gauge) , , .
, emojivoto
, deployment="voting". , 80 %.
SLO
SLO Linkerd, Grafana. !
?
, , SLO. . , . , . SLO .
Buoyant SLO, Kubernetes. , Dive, SLO . Dive Linkerd , , . Dive , , , SLO, .
, — Dive SLO Linkerd Prometheus Grafana, , — SLO!
:
(SLO) . SLO — . « , , ?» , Kubernetes, SLO - : , , .
" Kubernetes". " Kubernetes" .