@@ -11,13 +11,13 @@ min-kubernetes-server-version: v1.18
11
11
Controlar o comportamento do servidor da API Kubernetes em uma situação de sobrecarga
12
12
é uma tarefa chave para administradores de cluster. O {{< glossary_tooltip
13
13
term_id="kube-apiserver" text="kube-apiserver" >}} tem alguns controles disponíveis
14
- (ou seja, as _ flags_ ` --max-requests-inflight ` e ` --max-mutating-requests-inflight ` )
15
- para limitar a quantidade de trabalho pendente que será aceito,
14
+ (ou seja, as _ flags_ ` --max-requests-inflight ` e ` --max-mutating-requests-inflight ` )
15
+ para limitar a quantidade de trabalho pendente que será aceito,
16
16
evitando que uma grande quantidade de solicitações de entrada sobrecarreguem, e
17
17
potencialmente travando o servidor da API, mas essas _ flags_ não são suficientes para garantir
18
18
que as solicitações mais importantes cheguem em um período de alto tráfego.
19
19
20
- O recurso de prioridade e imparcialidade da API (APF) é uma alternativa que melhora
20
+ O recurso de prioridade e imparcialidade da API (do inglês _ API Priority and Fairness _ , APF) é uma alternativa que melhora
21
21
as limitações mencionadas acima. A APF classifica
22
22
e isola os pedidos de uma forma mais refinada. Também introduz
23
23
uma quantidade limitada de filas, para que nenhuma solicitação seja rejeitada nos casos
@@ -31,7 +31,7 @@ usam informantes e reagem a falhas de solicitações da API com exponencial
31
31
back-off, e outros clientes que também funcionam desta forma.
32
32
33
33
{{< caution >}}
34
- Solicitações classificadas como "de longa duração" — principalmente relógios — não são
34
+ Solicitações classificadas como "de longa duração" — principalmente _ watches _ — não são
35
35
sujeitas ao filtro da prioridade e imparcialidade da API. Isso também é verdade para
36
36
a _ flag_ ` --max-requests-inflight ` sem o recurso da APF ativado.
37
37
{{< /caution >}}
@@ -40,14 +40,14 @@ a _flag_ `--max-requests-inflight` sem o recurso da APF ativado.
40
40
41
41
## Ativando/Desativando a prioridade e imparcialidade da API
42
42
43
- O recurso de prioridade e imparcialidade da API é controlado por um portão de recurso
43
+ O recurso de prioridade e imparcialidade da API é controlado por um feature gate
44
44
e está habilitado por padrão. Veja [ Portões de Recurso] ( /docs/reference/command-line-tools-reference/feature-gates/ )
45
45
para uma explicação geral dos portões de recursos e como habilitar e
46
46
desativá-los. O nome da porta de recurso para APF é
47
47
"APIPriorityAndFairness". Este recurso também envolve um {{<
48
48
glossary_tooltip term_id="api-group" text="API Group" >}} com: (a) um
49
49
Versão ` v1alpha1 ` , desabilitada por padrão, e (b) ` v1beta1 ` e
50
- Versões ` v1beta2 ` , habilitadas por padrão. Você pode desativar o portão de recurso
50
+ Versões ` v1beta2 ` , habilitadas por padrão. Você pode desativar o feature gate
51
51
e versões beta do grupo de APIs adicionando a seguinte
52
52
_ flag_ para sua invocação ` kube-apiserver ` :
53
53
@@ -66,7 +66,7 @@ recurso de prioridade e imparcialidade da API, mesmo que outras _flags_ o tenha
66
66
67
67
## Conceitos
68
68
69
- Existem vários recursos distintos envolvidos na APF.
69
+ Existem vários recursos distintos envolvidos na APF.
70
70
As solicitações recebidas são classificadas por atributos da solicitação usando
71
71
_ FlowSchemas_ e atribuídos a níveis de prioridade. Os níveis de prioridade adicionam um grau de
72
72
isolamento mantendo limites de simultaneidade separados, para que as solicitações atribuídas
@@ -166,23 +166,23 @@ PriorityLevelConfiguration é maior do que o permitido por seu nível de simulta
166
166
O campo ` type ` de sua especificação determina o que acontecerá com solicitações extras.
167
167
Um tipo de 'Reject' significa que o excesso de tráfego será imediatamente rejeitado com
168
168
um erro HTTP 429 (Too Many Requests). Um tipo de ` Queue ` significa que as solicitações
169
- acima do limite será enfileirado, com as técnicas de
169
+ acima do limite será enfileirado, com as técnicas de
170
170
_ shuffle sharding_ e _ fair queuing_ usadas
171
171
para equilibrar o progresso entre os fluxos de solicitação.
172
172
173
173
A configuração de enfileiramento permite ajustar o algoritmo de _ fair queuing_ para um
174
174
nível de prioridade. Os detalhes do algoritmo podem ser lidos no
175
175
[ proposta de melhoria] ( #whats-next ) , mas resumindo:
176
176
177
- * Aumentar as 'filas' reduz a taxa de colisões entre diferentes fluxos,
177
+ - Aumentar as 'filas' reduz a taxa de colisões entre diferentes fluxos,
178
178
o custo do aumento do uso de memória. Um valor de 1 aqui efetivamente desabilita a
179
179
lógica de _ fair queuing_ , mas ainda permite que as solicitações sejam enfileiradas.
180
180
181
- * Aumentar o ` queueLengthLimit ` permite que tráfegos maiores sejam
181
+ - Aumentar o ` queueLengthLimit ` permite que tráfegos maiores sejam
182
182
sustentados sem deixar de lado nenhum pedido, ao custo de aumento
183
183
latência e uso de memória.
184
184
185
- * Alterar ` handSize ` permite ajustar a probabilidade de colisões entre
185
+ - Alterar ` handSize ` permite ajustar a probabilidade de colisões entre
186
186
fluxos diferentes e a simultaneidade geral disponível para um único fluxo em um
187
187
situação de sobrecarga.
188
188
@@ -235,7 +235,7 @@ certifique-se de que dois FlowSchemas não tenham o mesmo `matchingPrecedence`.
235
235
{{< /caution >}}
236
236
237
237
Um FlowSchema corresponde a uma determinada solicitação se pelo menos uma de suas ` regras `
238
- são correspondidas. Uma regra corresponde se pelo menos um de seus ` assuntos ` * e * pelo menos
238
+ são correspondidas. Uma regra corresponde se pelo menos um de seus ` assuntos ` _ e _ pelo menos
239
239
uma de suas ` resourceRules ` ou ` nonResourceRules ` (dependendo se a
240
240
solicitação de entrada é para um recurso ou URL de não-recurso) corresponde à solicitação.
241
241
@@ -262,18 +262,18 @@ obrigatória e sugerida.
262
262
### Objetos de configuração obrigatórios
263
263
264
264
Os quatro objetos de configuração obrigatórios refletem no
265
- comportamento de guarda-corpo . Este é o comportamento que os servidores tinham antes
265
+ comportamento do _ guardrail _ embutido . Este é o comportamento que os servidores tinham antes
266
266
desses objetos existirem e, quando esses objetos existem, suas especificações refletem
267
267
esse comportamento. Os quatro objetos obrigatórios são os seguintes.
268
268
269
- * O nível de prioridade obrigatório ` exempt ` é usado para solicitações que são
269
+ - O nível de prioridade obrigatório ` exempt ` é usado para solicitações que são
270
270
não sujeito a controle de fluxo: eles sempre serão despachados
271
271
imediatamente. O FlowSchema obrigatório ` exempt ` classifica todos
272
272
solicitações do grupo ` system:masters ` para este nível de prioridade.
273
273
Você pode definir outros FlowSchemas que direcionam outras solicitações
274
274
a este nível de prioridade, se apropriado.
275
275
276
- * O nível de prioridade obrigatório ` catch-all ` é usado em combinação com
276
+ - O nível de prioridade obrigatório ` catch-all ` é usado em combinação com
277
277
o FlowSchema ` catch-all ` obrigatório para garantir que todas as solicitações
278
278
recebam algum tipo de classificação. Normalmente você não deve confiar
279
279
nesta configuração catch-all, e deve criar seu próprio FlowSchema catch-all
@@ -293,28 +293,28 @@ configuração funcionará melhor.
293
293
294
294
A configuração sugerida agrupa as solicitações em seis níveis de prioridade:
295
295
296
- * O nível de prioridade ` node-high ` é para atualizações de integridade dos nós.
296
+ - O nível de prioridade ` node-high ` é para atualizações de integridade dos nós.
297
297
298
- * O nível de prioridade ` system ` é para solicitações não relacionadas à integridade do
298
+ - O nível de prioridade ` system ` é para solicitações não relacionadas à integridade do
299
299
grupo ` system:nodes ` , ou seja, Kubelets, que deve ser capaz de contatar
300
300
o servidor de API para que as cargas de trabalho possam ser agendadas
301
301
eles.
302
302
303
- * O nível de prioridade ` leader-election ` é para solicitações de eleição de líder de
303
+ - O nível de prioridade ` leader-election ` é para solicitações de eleição de líder de
304
304
controladores embutidos (em particular, solicitações para ` endpoints ` , ` configmaps ` ,
305
305
ou ` leases ` vindo do ` system:kube-controller-manager ` ou
306
- usuários ` system:kube-scheduler ` e contas de serviço no namespace ` kube-system ` ).
306
+ usuários ` system:kube-scheduler ` e contas de serviço no namespace ` kube-system ` ).
307
307
Estes são importantes para isolar de outro tráfego porque as falhas
308
308
na eleição do líder fazem com que seus controladores falhem e reiniciem, o que por sua vez
309
309
causa tráfego mais caro à medida que os novos controladores sincronizam seus informantes.
310
310
311
- * O nível de prioridade ` workload-high ` é para outras solicitações de controladores built-in.
311
+ - O nível de prioridade ` workload-high ` é para outras solicitações de controladores built-in.
312
312
313
- * O nível de prioridade ` workload-low ` é para solicitações de qualquer outra conta de serviço,
314
- que normalmente incluirá todas as solicitações de controladores em execução
313
+ - O nível de prioridade ` workload-low ` é para solicitações de qualquer outra conta de serviço,
314
+ que normalmente incluirá todas as solicitações de controladores em execução
315
315
_ Pods_ .
316
316
317
- * O nível de prioridade ` global-default ` trata de todos os outros tráfegos, por exemplo,
317
+ - O nível de prioridade ` global-default ` trata de todos os outros tráfegos, por exemplo,
318
318
comandos ` kubectl ` interativos executados por usuários não privilegiados.
319
319
320
320
Os FlowSchemas sugeridos servem para direcionar as solicitações para os
@@ -375,7 +375,7 @@ nem sugeridos, mas são anotados
375
375
376
376
## Isenção de simultaneidade da verificação de integridade
377
377
378
- A configuração sugerida não dá nenhum tratamento especial à saúde
378
+ A configuração sugerida não dá nenhum tratamento especial a checagem de saúde das requisições
379
379
verifique solicitações em kube-apiservers de seus kubelets locais --- que
380
380
tendem a usar a porta segura, mas não fornecem credenciais. Com o
381
381
configuração sugerida, essas solicitações são atribuídas ao ` global-default `
@@ -387,7 +387,7 @@ solicitações de limitação de taxa.
387
387
388
388
{{< caution >}}
389
389
Fazer essa alteração também permite que qualquer parte hostil envie
390
- solicitações de verificação de integridade que correspondam a este FlowSchema, em qualquer volume.
390
+ solicitações de verificação de integridade que correspondam a este FlowSchema, em qualquer volume.
391
391
Se você tiver um filtro de tráfego da Web ou outro mecanismo de segurança externa semelhante
392
392
para proteger o servidor de API do seu cluster do trafego geral de internet,
393
393
você pode configurar regras para bloquear qualquer solicitação de verificação de integridade
@@ -429,27 +429,27 @@ exporta métricas adicionais. Monitorá-los pode ajudá-lo a determinar se a sua
429
429
configuração está limitando indevidamente o tráfego importante, ou encontrar
430
430
cargas de trabalho mal comportadas que podem estar prejudicando a integridade do sistema.
431
431
432
- * ` apiserver_flowcontrol_rejected_requests_total ` é um vetor de contador
432
+ - ` apiserver_flowcontrol_rejected_requests_total ` é um vetor de contador
433
433
(cumulativo desde o início do servidor) de solicitações que foram rejeitadas,
434
434
dividido pelos rótulos ` flow_schema ` (indicando aquele que
435
435
correspondeu ao pedido), ` priority_level ` (indicando aquele para o qual
436
436
a solicitação foi atribuída) e ` reason ` . A _ label_ ` reason ` pode
437
437
ter um dos seguintes valores:
438
438
439
- * ` queue-full ` , indicando que muitos pedidos já foram enfileirados,
440
- * ` concurrency-limit ` , indicando que o
439
+ - ` queue-full ` , indicando que muitos pedidos já foram enfileirados,
440
+ - ` concurrency-limit ` , indicando que o
441
441
PriorityLevelConfiguration está configurado para rejeitar em vez de
442
442
enfileirar solicitações em excesso ou
443
- * ` time-out ` , indicando que a solicitação ainda estava na fila
443
+ - ` time-out ` , indicando que a solicitação ainda estava na fila
444
444
quando seu limite de tempo de fila expirou.
445
445
446
- * ` apiserver_flowcontrol_dispatched_requests_total ` é um vetor contador
446
+ - ` apiserver_flowcontrol_dispatched_requests_total ` é um vetor contador
447
447
(cumulativo desde o início do servidor) de solicitações que começaram
448
448
executando, dividido pelos rótulos ` flow_schema ` (indicando o
449
449
um que corresponda à solicitação) e ` priority_level ` (indicando o
450
450
aquele ao qual o pedido foi atribuído).
451
451
452
- * ` apiserver_current_inqueue_requests ` é um vetor de medidor de
452
+ - ` apiserver_current_inqueue_requests ` é um vetor de medidor de
453
453
limites máximos do número de solicitações enfileiradas, agrupadas por uma
454
454
_ label_ chamado ` request_kind ` cujo valor é ` mutating ` ou ` readOnly ` .
455
455
Essas marcas d'água altas descrevem o maior número visto em uma
@@ -458,14 +458,14 @@ cargas de trabalho mal comportadas que podem estar prejudicando a integridade do
458
458
marca d'água alta da última janela de número de solicitações sendo ativamente
459
459
servido.
460
460
461
- * ` apiserver_flowcontrol_read_vs_write_request_count_samples ` é um
461
+ - ` apiserver_flowcontrol_read_vs_write_request_count_samples ` é um
462
462
vetor de histograma de observações do número atual de
463
463
solicitações, divididas pelos rótulos ` phase ` (que assume o
464
464
valores ` waiting ` e ` executing ` ) e ` request_kind ` (que assume
465
465
os valores ` mutating ` e ` readOnly ` ). As observações são feitas
466
466
periodicamente a uma taxa elevada.
467
467
468
- * ` apiserver_flowcontrol_read_vs_write_request_count_watermarks ` é um
468
+ - ` apiserver_flowcontrol_read_vs_write_request_count_watermarks ` é um
469
469
vetor de histograma de marcas d'água altas ou baixas do número de
470
470
solicitações divididas pelos rótulos ` phase ` (que assume o
471
471
valores ` waiting ` e ` executing ` ) e ` request_kind ` (que assume
@@ -475,27 +475,27 @@ cargas de trabalho mal comportadas que podem estar prejudicando a integridade do
475
475
` apiserver_flowcontrol_read_vs_write_request_count_samples ` . Esses
476
476
marcas d'água mostram o intervalo de valores que ocorreram entre as amostras.
477
477
478
- * ` apiserver_flowcontrol_current_inqueue_requests ` é um vetor de medidor
478
+ - ` apiserver_flowcontrol_current_inqueue_requests ` é um vetor de medidor
479
479
mantendo o número instantâneo de solicitações enfileiradas (não em execução),
480
480
dividido pelos rótulos ` priority_level ` e ` flow_schema ` .
481
481
482
- * ` apiserver_flowcontrol_current_executing_requests ` é um vetor de medidor
482
+ - ` apiserver_flowcontrol_current_executing_requests ` é um vetor de medidor
483
483
segurando o número instantâneo de execução (não esperando em uma
484
484
queue), divididas pelos rótulos ` priority_level ` e
485
485
` flow_schema ` .
486
486
487
- * ` apiserver_flowcontrol_request_concurrency_in_use ` é um vetor de medidor
487
+ - ` apiserver_flowcontrol_request_concurrency_in_use ` é um vetor de medidor
488
488
ocupando o número instantâneo de assentos ocupados, diferenciados pelas
489
489
_ labels_ ` priority_level ` e ` flow_schema ` .
490
490
491
- * ` apiserver_flowcontrol_priority_level_request_count_samples ` é um
491
+ - ` apiserver_flowcontrol_priority_level_request_count_samples ` é um
492
492
vetor de histograma de observações do número atual de
493
493
solicitações divididas pelas _ labels_ ` phase ` (que assume o
494
494
valores ` waiting ` e ` executing ` ) e ` priority_level ` . Cada
495
495
histograma obtém observações feitas periodicamente, até a última
496
496
atividade do tipo relevante. As observações são feitas em nota alta.
497
497
498
- * ` apiserver_flowcontrol_priority_level_request_count_watermarks ` é um
498
+ - ` apiserver_flowcontrol_priority_level_request_count_watermarks ` é um
499
499
vetor de histograma de marcas d'água altas ou baixas do número de
500
500
solicitações divididas pelas _ labels_ ` phase ` (que assume o
501
501
valores ` waiting ` e ` executing ` ) e ` priority_level ` ; a _ label_
@@ -505,7 +505,7 @@ cargas de trabalho mal comportadas que podem estar prejudicando a integridade do
505
505
` apiserver_flowcontrol_priority_level_request_count_samples ` . Esses
506
506
marcas d'água mostram o intervalo de valores que ocorreram entre as amostras.
507
507
508
- * ` apiserver_flowcontrol_request_queue_length_after_enqueue ` é um
508
+ - ` apiserver_flowcontrol_request_queue_length_after_enqueue ` é um
509
509
vetor de histograma de comprimentos de fila para as filas, dividido pelas
510
510
_ labels_ ` priority_level ` e ` flow_schema ` , conforme mostrado pelas
511
511
solicitações enfileiradas. Cada solicitação enfileirada contribui com uma
@@ -522,11 +522,11 @@ cargas de trabalho mal comportadas que podem estar prejudicando a integridade do
522
522
aumentar os compartilhamentos de simultaneidade desse PriorityLevelConfiguration.
523
523
{{< /note >}}
524
524
525
- * ` apiserver_flowcontrol_request_concurrency_limit ` é um vetor de medidor
525
+ - ` apiserver_flowcontrol_request_concurrency_limit ` é um vetor de medidor
526
526
mantendo o limite de simultaneidade calculado (com base no limite total de simultaneidade do servidor da API
527
527
e na simultaneidade de PriorityLevelConfigurations share), divididos pela _ label_ ` priority_level ` .
528
528
529
- * ` apiserver_flowcontrol_request_wait_duration_seconds ` é um vetor de histograma
529
+ - ` apiserver_flowcontrol_request_wait_duration_seconds ` é um vetor de histograma
530
530
de quanto tempo as solicitações ficaram na fila, divididas pelas _ labels_
531
531
` flow_schema ` (indicando qual corresponde à solicitação),
532
532
` priority_level ` (indicando aquele para o qual o pedido foi
@@ -540,7 +540,7 @@ cargas de trabalho mal comportadas que podem estar prejudicando a integridade do
540
540
solicitações atribuídas a esse nível de prioridade.
541
541
{{< /note >}}
542
542
543
- * ` apiserver_flowcontrol_request_execution_seconds ` é um vetor de histograma
543
+ - ` apiserver_flowcontrol_request_execution_seconds ` é um vetor de histograma
544
544
de quanto tempo as solicitações levaram para realmente serem executadas, divididas pelas
545
545
_ labels_ ` flow_schema ` (indicando qual corresponde à solicitação)
546
546
e ` priority_level ` (indicando aquele para o qual o pedido foi
@@ -604,7 +604,7 @@ serve os seguintes caminhos adicionais em suas portas HTTP[S].
604
604
exempt, <none>, <none>, <none>, <none>, <none>,
605
605
system, system-nodes, 12, 0, system:node:127.0.0.1, 2020-07-23T15:26:57.179170694Z,
606
606
```
607
-
607
+
608
608
Além das solicitações enfileiradas, a saída inclui uma linha fantasma
609
609
para cada nível de prioridade isento de limitação.
610
610
@@ -621,10 +621,10 @@ serve os seguintes caminhos adicionais em suas portas HTTP[S].
621
621
system, system-nodes, 12, 0, system:node:127.0.0.1, 2020-07-23T15:31:03.583823404Z, system:node:127.0.0.1, create, /api/v1/namespaces/scaletest/configmaps,
622
622
system, system-nodes, 12, 1, system:node:127.0.0.1, 2020-07-23T15:31:03.594555947Z, system:node:127.0.0.1, create, /api/v1/namespaces/scaletest/configmaps,
623
623
```
624
-
624
+
625
625
## {{% heading "whatsnext" %}}
626
626
627
- Para obter informações básicas sobre detalhes de design para prioridade e justiça da API, consulte
627
+ Para obter informações básicas sobre detalhes de design para prioridade e justiça da API, consulte
628
628
a [ proposta de aprimoramento] ( https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/1040-priority-and-fairness ) .
629
629
Você pode fazer sugestões e solicitações de recursos por meio do [ SIG API Machinery] ( https://github.com/kubernetes/community/tree/master/sig-api-machinery )
630
630
ou do [ canal do slack] ( https://kubernetes.slack.com/messages/api-priority-and-fairness ) .
0 commit comments