2 min read

Kubernetes: API Priority and Fairness

21.10.2020 19:37:22

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, 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/ .

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ě.

Jan Nevěděl

Written by Jan Nevěděl

Honza is the heart and soul of ELOS. He boarded this vessel when it was still in the dock and its launch was still nautical miles away. He's been through both good and bad weather with us. From the position of systems engineer and architect, Honza helps to introduce new technologies and approaches in the Czech and Slovak business environment. He is one of the first Red Hat Certified Instructors in the region. His certifications transcript is too long to read, so we won´t bother you with that. But what you need to know is that Honza transfers his oversight skills and strategies to yachting as well. On the boat, he is our tactic. Outside of work, Honza is a stubborn promoter of scooters and outdoor activities.

 

Chcete se dozvědět více?

Prostě jen klikněte na tlačítko níže a zarezervujte si s námi bezplatnou konzultaci.

 

ZAREZERVOVAT KONZULTACI ZDARMA