Top 10 Kubernetes triků a tipů

Top 10 Kubernetes triků a tipů

Na internetu je spousta referenční literatury, ale někdy je ta nejjednodušší rada ta nejcennější. tým Kubernetes aaS z Mail.ru přeloženo výběr deseti triků a tipů, které autor článku shromáždil po roce práce s Kubernetes. Tipy nejsou seřazeny podle důležitosti, ale myslíme si, že každý najde něco užitečného pro sebe.

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

Pro začátek možná nejjednodušší a nejužitečnější akce při práci s Kubernetes. Následující příkaz umožňuje dokončení příkazu kubectl v bash shellu:

echo "source <(kubectl completion bash)" >> ~/.bashrc

Automatické plnění kubectl bude zapsán do souboru .bashrc a bude automaticky aktivován při každém spuštění shellu. Tím se urychlí psaní dlouhých příkazů a parametrů jako např all-namespaces. Přečtěte si více v Nápověda pro bash Kubernetes.

Výchozí limity paměti a CPU ve jmenném prostoru

Pokud je aplikace zapsána nesprávně, například každou sekundu otevře nové připojení k databázi, ale nikdy ji nezavře, pak v clusteru dochází k úniku paměti. A pokud aplikace nemá během nasazení nastaven limit paměti, může to vést k selhání uzlu.

Abyste tomu zabránili, Kubernetes vám umožňuje nastavit výchozí omezení na základě jmenného prostoru. Jsou zapsány v souboru yaml pro konkrétní jmenný prostor. 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 použijte jej na libovolný jmenný prostor. Například do jmenného prostoru limit-example. Nyní bude mít jakýkoli kontejner nasazený v tomto oboru názvů limit 512 Mi, pokud pro tento kontejner není dodatečně nastaven jiný individuální limit.

Sběr odpadu ve starších verzích Kubernetes

Kubelet ve výchozím nastavení spustí shromažďování odpadu, když var/lib/docker zabírá 90 % dostupného místa na disku. To je skvělé, nicméně až do Kubernetes 1.7 neexistoval žádný výchozí limit na počet použitých 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 % místa na disku, ale může dojít k vyčerpání inodů, což způsobí problémy pracovníkům.

Ve starších verzích kubelet od 1.4 do 1.6 budete muset 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 jako výchozí. Předchozí verze však limit inodů nesledují.

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

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

minikube start

Spuštěním tohoto příkazu se na vašem počítači spustí skutečný cluster Kubernetes.

Top 10 Kubernetes triků a tipů
Zdroj ilustrace

Trik je v tom, jak sestavit aplikaci a spustit ji lokálně na tomto clusteru. Pokud nedostanete výslovné pokyny, bude obraz Dockeru vytvořen ve vašem počítači, nikoli v clusteru.

Chcete-li přinutit Docker, aby poslal obrázek do místního clusteru Kubernetes, dostane docker stroj následující příkaz:

eval $(minikube docker-env)

Nyní můžeme vytvářet aplikace na místním clusteru Kubernetes.

Nedávejte kubectl přístup všem

Zdá se to zřejmé, ale pokud více týmů používá stejný cluster pro své aplikace (k čemuž byl Kubernetes vytvořen), neměli byste dát všem kubectl. Je lepší oddělit příkazy, každému z nich přiřadit vlastní jmenný prostor a omezit přístup pomocí zásad RBAC.

Můžete se zmást přiřazením práv pro přístup, čtení, vytváření, mazání a další operace pro každý modul. Ale hlavní věcí je omezit přístup k tajemstvím a umožnit jej pouze správcům. Tímto způsobem budeme rozlišovat mezi těmi, kteří mohou cluster spravovat, a těmi, kteří do něj mohou jednoduše nasadit.

Správa rozpočtů podů

Jak zajistit, aby nedocházelo k výpadkům aplikace v clusteru Kubernetes? PodDisruptionBudget a znovu PodDisruptionBudget.

Clustery jsou pravidelně aktualizovány a uzly jsou vyprazdňovány. Nic nestojí, to je realita. Každé nasazení s více než jednou instancí by mělo obsahovat PDB (PodDisruptionBudget). Je vytvořen v jednoduchém souboru yaml, který se aplikuje na cluster. Oblast pokrytí konkrétního PDB je určena voliči štítků.

Poznámka: Rozpočet PNR se bere v úvahu pouze v případě, že je porušení rozpočtu vratné (dobrovolné narušení). V situacích, jako je selhání hardwaru, PDB nebude fungovat.

Příklad PNR:

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

Dva hlavní parametry jsou matchLabels и minAvailable. První parametr určuje, na které aplikace se rozpočet vztahuje. Například pokud mám nasazení s popisky app: app-a и app: app-b, pak se tento PNR bude vztahovat pouze na první.

Parametr minAvailable zohledněno při vyprazdňování (čištění) uzlu. Například v našem příkladu jsou během vyprazdňování všechny instance vyřazeny app: app-a, kromě dvou.

To vám umožňuje řídit, kolik instancí aplikace by mělo být spuštěno v danou chvíli.

Monitorování stavu aplikace

Takové sledování je možné dvěma způsoby: pomocí testů připravenosti nebo živosti.

První sonda (připravenost) určuje připravenost kontejneru přijímat provoz.

Druhá (živost) ukazuje, zda je nádoba v pořádku nebo je třeba ji restartovat.

Příslušné konfigurace jsou jednoduše přidány do yaml pro nasazení. Zde můžete zadat časové limity, doby zpoždění a počet opakování. Podívejte se na další podrobnosti o nich Dokumentace Kubernetes.

Štítky jsou všude

Štítky jsou jedním ze základních konceptů v Kubernetes. Umožňují objektům volně komunikovat mezi sebou a také vytvářet dotazy na základě štítků. V Kubernetes můžete dokonce přejít do klienta a sledovat události pro konkrétní značky.

Se značkami můžete dělat téměř cokoli, ale dobrým příkladem by bylo vytvoření více prostředí pro spouštění programů na stejném clusteru.

Řekněme, že používáte stejný cluster dev и qa. To znamená, že můžete mít aplikaci app-a, současně pracující v obou prostředích qa и dev. V tomto případě můžeme samostatně přistupovat k instanci aplikace v konkrétním prostředí zadáním příslušného parametru environment. Například, app: app-a и environment: dev pro jedno prostředí a app: app-a и environment: qa pro toho druhého.

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

Dejte věci do pořádku

Kubernetes je velmi výkonný systém, ale každý systém může nakonec uvíznout v příliš mnoha procesech. Kubelet spouští všechny procesy a kontroly, které určíte, i své vlastní.

Jedna osiřelá služba samozřejmě nezpomalí systém a Kubernetes je navržen tak, aby se škáloval od základů. Pokud se ale místo jedné služby objeví milion, kubelet se začne dusit.

Pokud z nějakého důvodu odstraníte rozmístění (kontejner, obrázek, cokoliv), ujistěte se, že provedete kompletní vyčištění.

Seznamte se s Go

Hlavní radu jsme si nechali na konec. Naučte se programovací jazyk Go.

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

Dá se použít na různé a zajímavé věci. Například pro rozšíření systému Kubernetes podle vašeho vkusu. Můžete tedy používat své vlastní programy ke shromažďování dat, nasazování aplikací nebo jednoduše k čištění kontejnerů.

Naučit se programovací jazyk Go a zvládnout client-go je možná ta nejdůležitější rada, kterou můžete dát novým uživatelům Kubernetes.

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

Co jiného číst:

  1. Tři úrovně automatického škálování v Kubernetes a jak je efektivně použí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: www.habr.com

Přidat komentář