使用Prometheus和Linkerd在Kubernetes中设置服务级别目标(SLO)的指南

预期课程“基于Kubernetes的基础架构平台”的开始,我们准备了有用文章的传统翻译。


(SLO)

, (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

, !

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 .

具有Grafana集成的Linkerd仪表板
Linkerd Grafana

 deploy/voting, : , . .

Grafana仪表板中的Linkerd
Linkerd Grafana

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

!

具有Linkerd指标的Grafana中的错误预算
Grafana Linkerd

.

, , , PromQL, rate(), .

, -, . (Gauge) , , .

标尺格式的7天错误预算(成功率)。
7 ( ) (Gauge).

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

所有服务的7天错误预算(成功尝试的百分比)。
7 ( ) .

SLO

SLO Linkerd, Grafana. !

?

, , SLO. . , .  , . SLO .

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

潜水仪表板显示了7天的SLO和错误预算合规性。
Dive, SLO 7- .

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

:

(SLO) Kubernetes

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


" Kubernetes". " Kubernetes" .


:




All Articles