Nejlepší tipy a triky pro Kubernetes

Nejlepší tipy a triky pro Kubernetes

Na internetu je mnoho referenční literatury, ale někdy se ukáží být nejcennějšími nejjednodušší rady. Tým Kubernetes aaS od Mail.ru přeložil výběr deseti triků a rad, které autorka článku shromáždila po roce práce s Kubernetes. Rady nejsou seřazeny podle důležitosti, ale myslíme si, že si každý najde něco užitečného pro sebe.

Nejjednodušší příkaz pro práci s Kubernetes

Nejdříve si asi ukážeme nejjednodušší a nejužitečnější akci při práci s Kubernetes. Následující příkaz aktivuje automatické doplňování příkazů kubectl v shellu bash:

echo "source > ~/.bashrc

Automatické doplňování kubectl bude zapsáno do souboru .bashrc a bude se automaticky aktivovat pokaždé při spuštění shellu. To urychluje zadávání dlouhých příkazů a parametrů, jako je all-namespaces. Více informací naleznete v dokumentaci Kubernetes pro bash.

Výchozí limity pro paměť a CPU v prostoru jmen

Pokud je aplikace napsána špatně, například každý sekundu otevírá nové spojení s databází, ale nikdy nezavírá, vzniká v clusteru únik paměti. A pokud nebyl pro aplikaci při nasazení nastaven limit na paměť, může to vést k selhání uzlu.

Aby se tomu zabránilo, Kubernetes umožňuje nastavovat výchozí limity pro každý prostor jmen. Ty se zapisují do souboru yaml pro konkrétní prostor jmen. Zde je příklad takového souboru:

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

Vytvořte takový yaml a aplikujte jej na jakýkoli prostor jmen. Například na prostor jmen limit-example. Nyní bude pro každý kontejner nasazený v tomto prostoru jmen platit limit 512Mi, pokud pro tento kontejner nebyl dodatečně nastaven jiný individuální limit.

Údržba starých verzí Kubernetes

Kubelet začíná automaticky údržbu, když /var/lib/docker zabírá 90 % dostupného diskového prostoru. To je skvělé, avšak do verze Kubernetes 1.7 neexistoval výchozí limit na počet používaných indexových deskriptorů inode (inodů), které odpovídají počtu souborů v souborovém systému.

Potenciálně váš kontejner /var/lib/docker může využít pouze 50 % diskového prostoru, ale inody mohou dojít, což by způsobilo problémy v práci pracovníků.

Ve starších verzích kubelet od 1.4 do 1.6 je třeba přidat tento příznak:

--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

Ve verzích 1.7 a novějších je tento příznak nastaven ve výchozím nastavení. Starší verze však nesledují limit inodů.

Minikube… malý, ale výkonný místní Kubernetes

Minikube je nejjednodušší způsob, jak spustit místní cluster Kubernetes. Spustí se jednoduchým příkazem:

minikube start

Po provedení tohoto příkazu máte na svém počítači skutečný cluster Kubernetes.

Nejlepší tipy a triky pro Kubernetes
Zdroj ilustrace

Hlavní myšlenka spočívá v tom, jak sestavit aplikaci a spustit ji místně v tomto clusteru. Pokud neudělíte speciální pokyny, Docker obraz se bude sestavovat na vašem počítači, nikoli v clusteru.

Abychom přiměli Docker odeslat obraz do místního clusteru Kubernetes, použije se následující příkaz:

eval $(minikube docker-env)

Nyní můžeme sestavovat aplikace na místním clusteru Kubernetes.

Nedávejte přístup kubectl každému bez omezení

Ačkoli to může být zřejmé, pokud několik týmů používá jeden cluster pro své aplikace (což byl účel vytvoření Kubernetes), neměli byste ho jen tak dávat všem. kubectlLepší je oddělit týmy a každému z nich přidělit vlastní prostor jmen a omezit přístup pomocí politik RBAC.

Můžete si dát práci s definováním práv přístupu pro každý pod, včetně čtení, vytváření, mazání a dalších operací. Hlavní je však omezit přístup k tajemstvím, což by měl umožnit pouze administrátorům. Tím oddělíme ty, kteří mohou spravovat cluster, od těch, kteří se v něm mohou jen nasazovat.

Spravujte rozpočty podů

Jak zajistit, aby aplikace v clusteru Kubernetes neměla prostoje? PodDisruptionBudget a ještě jednou PodDisruptionBudget.

Clustery se pravidelně aktualizují a uzly jsou vyprázdněny. Nic nestojí na místě, taková je realita. Do každého nasazení s více než jedním instancí by měl být vždy zahrnut PDB (PodDisruptionBudget). Vytváří se v jednoduchém souboru yaml, který se aplikuje na cluster. Oblast pokrytí konkrétního PDB je určena selektory štítků.

Poznámka: Rozpočet PDB se bere v úvahu pouze při reverzibilním porušení rozpočtu (voluntary disruption). Při situacích, jako jsou hardwarové poruchy, PDB nefunguje.

Příklad PDB:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: app-a-pdb
spec:
  minAvailable: 2
  selector:
      matchLabels:
        app: app-a

Dva základní parametry jsou matchLabels a minAvailable. V prvním parametru se uvádí, pro jaké aplikace platí rozpočet. Například, pokud mám nasazení se štítky app: app-a a app: app-b, pak se tento PDB použije pouze na první.

Parameter minAvailable zohledňuje se při vyprázdnění (čištění) uzlu. Například v našem příkladu během vyprázdnění jsou vyřazeny všechny instance app: app-a, kromě dvou.

To umožňuje kontrolovat, kolik instancí aplikace by mělo být spuštěno v každém okamžiku.

Monitorování zdraví aplikace

Toto monitorování je možné dvěma způsoby: pomocí sond Readiness nebo Liveness.

První sonda (readiness) určuje, zda je kontejner připraven přijímat provoz.

Druhá (liveness) ukazuje, zda je kontejner funkční, nebo zda je třeba jej restartovat.

Příslušné konfigurace se jednoduše přidávají do yaml pro nasazení. Zde lze uvést časové limity, doby zpoždění a počet opakovaných pokusů. Podrobněji o nich se dočtete v dokumentaci Kubernetes.

Štítky všude

Štítky jsou jedním ze základních pojmů v Kubernetes. Umožňují objektům svobodně se spojovat, a také vytvářet dotazy na základě štítků. V Kubernetes lze dokonce přejít k klientovi a sledovat události podle konkrétních štítků.

Pomocí štítků lze udělat prakticky cokoliv, ale dobrým příkladem by bylo vytvoření několika prostředí pro provádění programů v jednom klastru.

Představme si, že používáte stejný klastr pro dev a qa. To znamená, že můžete mít aplikaci app-a, která současně běží v obou prostředích qa a dev. V tomto případě můžeme oslovit samostatnou instanci aplikace v konkrétním prostředí, uvedením příslušného parametru environment. Například, app: app-a a environment: dev pro jedno prostředí, a app: app-a a environment: qa pro druhé.

To umožňuje přístup k oběma instancím aplikace, například k provádění testování současně.

Udělejte pořádek

Kubernetes je velmi mocný systém, ale jakýkoliv systém se nakonec může dostat do problémů s velkým množstvím procesů. Kubelet spouští všechny procesy a kontroly, které jste uvedli, spolu s těmi svými.

Samozřejmě, jeden bez dozoru zůstávající služba systém nezpomalí, a Kubernetes je od začátku navržen pro škálování. Ale pokud místo jedné služby vznikne milion, kubelet začíná kolabovat.

Pokud z nějakého důvodu odstraníte nasazení (kontejner, obraz, cokoliv jiného), ujistěte se, že je vše úplně vyčištěno.

Seznamte se s Go

Nejdůležitější doporučení jsme si nechali na konec. Naučte se programovací jazyk Go.

Kubernetes je napsán v Go, všechna rozšíření jsou napsána v Go a navíc je oficiálně podporována klientská knihovna client-go.

Můžete ho použít k různým a zajímavým věcem. Například k úpravě systému Kubernetes podle svých potřeb. Můžete tak využít vlastní programy ke sběru dat, nasazení aplikací nebo prostému čištění kontejnerů.

Naučit se programovací jazyk Go a ovládnout client-go je pravděpodobně nejdůležitější rada, kterou můžeme dát začínajícím uživatelům Kubernetes.

Přeloženo s podporou Mail.ru Cloud Solutions

Co si ještě přečíst:

  1. Tři úrovně automatického škálování v Kubernetes a jak je efektivně využívat.
  2. Pracovní uzly Kubernetes: mnoho malých nebo málo velkých?
  3. 25 užitečných nástrojů pro nasazení a správu Kubernetes.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster