---
title: "Kubernetes: API Priority and Fairness"
description: "Kubernetes: API Priority and Fairness"
---

[ELOS Technologies Blog - CZ ](https://blog.elos.navy/cs)

# [Kubernetes: API Priority and Fairness](https://blog.elos.navy/cs/kubernetes-api-priority-and-fairness)

 Written by [Jan Nevěděl](https://blog.elos.navy/cs/author/jan-nevěděl) | 29.12.2020 16:32:41

Aneb z deníku Openshift architekta a implementátora.

Aktuálně jsme s podporou firmy Red Hat řešili problém občasné nedostupnosti API serveru Openshiftu 4.5. Řešitelná byla pouze restartem. Jednalo se o situaci, kdy byl cluster operator openshift-apiserver ve stavu degraded a server samotný vracel velké množství chyb “503 (the server is currently unable to handle the request)”.

Při hledání řešení jsme se soustředili na novou vlastnost Kubernetes API serveru - v jeho nastavení totiž přibyla tzv. *feature gate* ** APIPriorityAndFairness=true**:

```
$ oc rsh kube-apiserver-beta-bpsht-master-1 cat /etc/kubernetes/static-pod-resources/configmaps/config/config.yaml
...
    "feature-gates": [
      "APIPriorityAndFairness=true",
      "RotateKubeletServerCertificate=true",
      "SupportPodPidsLimit=true",
      "NodeDisruptionExclusion=true",
      "ServiceNodeExclusion=true",
      "SCTPSupport=true",
      "LegacyNodeRoleBehavior=false"
    ],

...
```

Jedná se o dlouho očekávanou funkcionalitu umožňující administrátorům optimalizovat a prioritizovat zpracování REST API požadavků podle definovaných pravidel. To se hodí především v situaci, kdy je API server pod natolik velkým náporem API requestů, že je de-facto vyřazen z provozu (např. logická chyba v kódu operátora chrlícího API požadavky). Služby platformy mohou být v tomto případě částečně paralizovány, protože její jednotlivé komponenty nejsou schopny komunikovat s control plane.

Kubernetes API server nyní za tímto účelem disponuje novou skupinou API objektů [*flowcontrol.apiserver.k8s.io/v1alpha1*](http://flowcontrol.apiserver.k8s.io/v1alpha1), mezi něž patří také objekt ***FlowSchema***:

```
[jan.nevedel@brtnik-x1 OpenShift]$ oc --kubeconfig kubeconfig-beta get flowschema 
NAME                                PRIORITYLEVEL                             MATCHINGPRECEDENCE   DISTINGUISHERMETHOD   AGE   MISSINGPL
exempt                              exempt                                    1                    <none>                72d   False
system-leader-election              leader-election                           100                  ByUser                72d   False
...
global-default                      global-default                            9900                 ByUser                72d   False
catch-all                           catch-all                                 10000                ByUser                72d   False
```

Objekt ***FlowSchema*** definuje pravidla, na jejichž základě API server **prioritizuje příchozí požadavky a zpracovává přednostně ty s vyšší prioritou**. I při vysokém objemu příchozích požadavků tedy API server zůstává dostupný pro kritické komponenty platformy.

Detaily implementace jsou dobře popsány přímo v dokumentaci Kubernetes na této adrese: [https://kubernetes.io/docs/concepts/cluster-administration/flow-control/](https://kubernetes.io/docs/concepts/cluster-administration/flow-control/) .

Výsledkem naší komunikace s podporou Red Hatu byl patch, který upravuje právě pravidla pro API Priority and Fairness. Nasazení na testovacích prostředích proběhlo dnes, efekt budeme vyhodnocovat na konci týdne. V situacích jako je tato jsme rádi, že zákazník zvolil Kubernetes platformu od solidního vendora, se kterým jsme schopni vzniklé problémy řešit. Ačkoliv jde o důležitou novou vlastnost Kubernetes API serveru, s modifikací defaultních pravidel je zapotřebí zacházet velmi opatrně.

[View full post](https://blog.elos.navy/cs/kubernetes-api-priority-and-fairness)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Jan Nevěděl"
  },
  "dateModified" : "2020-12-29T16:33:57.573Z",
  "datePublished" : "2020-12-29T16:32:41Z",
  "headline" : "Kubernetes: API Priority and Fairness",
  "image" : {
    "@type" : "ImageObject",
    "url" : "https://f.hubspotusercontent30.net/hubfs/4499183/AdobeStock_218031318.jpeg"
  },
  "mainEntityOfPage" : "https://blog.elos.navy/cs/kubernetes-api-priority-and-fairness",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60.0,
      "url" : "https://f.hubspotusercontent30.net/hubfs/4499183/Logo-ELOS-Large-Canavas-1-1.png",
      "width" : 187.5
    },
    "name" : "ELOS Technologies Blog - CZ"
  }
}
```