Top 10 Kubernetes trikov a tipov

Top 10 Kubernetes trikov a tipov

Na internete je množstvo referenčnej literatúry, no niekedy je tá najjednoduchšia rada tá najcennejšia. Tím Kubernetes aaS z Mail.ru preložené výber desiatich trikov a tipov, ktoré autor článku zozbieral po roku práce s Kubernetes. Tipy nie sú zoradené podľa dôležitosti, ale myslíme si, že každý si nájde niečo užitočné pre seba.

Najjednoduchší príkaz na prácu s Kubernetes

Na začiatok možno najjednoduchšia a najužitočnejšia akcia pri práci s Kubernetes. Nasledujúci príkaz umožňuje dokončenie príkazu kubectl v bash shell:

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

dokončovanie kubectl sa zapíše do súboru .bashrc a automaticky sa aktivuje pri každom spustení shellu. To urýchľuje písanie dlhých príkazov a parametrov ako napr all-namespaces. Viac podrobností v Kubernetes bash pomoc.

Predvolené limity pamäte a CPU v mennom priestore

Ak je aplikácia napísaná nesprávne, napríklad každú sekundu otvorí nové pripojenie k databáze, ale nikdy ju nezatvorí, potom v klastri dochádza k úniku pamäte. A ak aplikácia nemá nastavený limit pamäte počas nasadenia, môže to viesť k zlyhaniu uzla.

Aby ste tomu zabránili, Kubernetes vám umožňuje nastaviť predvolené obmedzenia na základe menného priestoru. Sú zapísané v súbore yaml pre konkrétny menný priestor. Tu je príklad takéhoto súboru:

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

Vytvorte takýto yaml a aplikujte ho na akýkoľvek menný priestor. Napríklad do menného priestoru limit-example. Teraz bude mať každý kontajner nasadený v tomto priestore názvov limit 512 Mi, pokiaľ nie je pre tento kontajner dodatočne nastavený iný individuálny limit.

Zber odpadu v starších verziách Kubernetes

Kubelet v predvolenom nastavení spustí zber odpadu, keď var/lib/docker zaberá 90 % dostupného miesta na disku. To je však skvelé, až do Kubernetes 1.7 neexistoval predvolený limit na počet použitých inódov, ktoré zodpovedajú počtu súborov v súborovom systéme.

Potenciálne váš kontajner var/lib/docker môže využívať iba 50 % miesta na disku, ale môže sa mu minúť inódy, čo spôsobí problémy pracovníkom.

V starších verziách kubelet od 1.4 do 1.6 budete musieť pridať tento príznak:

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

Vo verziách 1.7 a novších je tento príznak nastavený štandardne. Predchádzajúce verzie však limit inode nesledujú.

Minikube... malý, ale výkonný lokálny Kubernetes

Minikube je najjednoduchší spôsob, ako spustiť lokálny klaster Kubernetes. Spúšťa sa jednoduchým príkazom:

minikube start

Spustenie tohto príkazu má za následok spustenie skutočného klastra Kubernetes na vašom počítači.

Top 10 Kubernetes trikov a tipov
Zdroj ilustrácie

Trik je v tom, ako zostaviť aplikáciu a spustiť ju lokálne na tomto klastri. Ak nedostanete konkrétne pokyny, obraz Docker sa vytvorí vo vašom počítači a nie v klastri.

Ak chcete prinútiť Docker, aby poslal obrázok do lokálneho klastra Kubernetes, docker stroj dostane nasledujúci príkaz:

eval $(minikube docker-env)

Teraz môžeme vytvárať aplikácie na lokálnom klastri Kubernetes.

Nedávajte kubectl prístup každému

Zdá sa to zrejmé, ale ak viacero tímov používa rovnaký klaster pre svoje aplikácie (na čo bol Kubernetes vytvorený), nemali by ste dať všetkým kubectl. Je lepšie oddeliť príkazy, priradiť každému z nich vlastný menný priestor a obmedziť prístup pomocou politík RBAC.

Môžete sa zmiasť pridelením práv na prístup, čítanie, vytváranie, mazanie a ďalšie operácie pre každý modul. Ale hlavnou vecou je obmedziť prístup k tajomstvám a povoliť ho iba správcom. Týmto spôsobom budeme rozlišovať medzi tými, ktorí môžu klaster spravovať, a tými, ktorí ho môžu jednoducho nasadiť.

Spravujte rozpočty pod

Ako zabezpečiť, aby nedochádzalo k výpadkom aplikácie v klastri Kubernetes? PodDisruptionBudget a opäť PodDisruptionBudget.

Klastre sa pravidelne aktualizujú a uzly sa vyprázdňujú. Nič nestojí, taká je realita. Každé nasadenie s viac ako jednou inštanciou by malo obsahovať PDB (PodDisruptionBudget). Vytvára sa v jednoduchom súbore yaml, ktorý sa aplikuje na klaster. Oblasť pokrytia konkrétneho PDB je určená voličmi štítkov.

Poznámka: Rozpočet PNR sa berie do úvahy len vtedy, keď je porušenie rozpočtu reverzibilné (dobrovoľné rušenie). V situáciách, ako sú zlyhania hardvéru, PDB nebude fungovať.

Príklad PNR:

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

Dva hlavné parametre sú matchLabels и minAvailable. Prvý parameter určuje, na ktoré aplikácie sa rozpočet vzťahuje. Napríklad, ak mám nasadenia s menovkami app: app-a и app: app-b, potom sa tento PNR bude vzťahovať len na prvý.

Parameter minAvailable zohľadnené pri vyprázdňovaní (čistení) uzla. Napríklad v našom príklade sú počas vyprázdňovania všetky prípady vysťahované app: app-a, okrem dvoch.

To vám umožňuje kontrolovať, koľko inštancií aplikácie by malo byť spustených v danom čase.

Monitorovanie stavu aplikácie

Takéto monitorovanie je možné dvoma spôsobmi: pomocou testov pripravenosti alebo živosti.

Prvá sonda (pripravenosť) určuje pripravenosť kontajnera na príjem dopravy.

Druhá (živosť) ukazuje, či je nádoba v poriadku alebo je potrebné ju reštartovať.

Príslušné konfigurácie sa jednoducho pridajú do yaml na nasadenie. Tu môžete určiť časové limity, časy oneskorenia a počet opakovaní. Pozrite si o nich viac podrobností Dokumentácia Kubernetes.

Štítky sú všade

Štítky sú jedným zo základných konceptov v Kubernetes. Umožňujú objektom voľnú komunikáciu medzi sebou, ako aj vytváranie dopytov na základe štítkov. V Kubernetes môžete dokonca prejsť do klienta a sledovať udalosti pre konkrétne značky.

So značkami môžete robiť takmer čokoľvek, ale dobrým príkladom by bolo vytvorenie viacerých prostredí na spustenie programov v rovnakom klastri.

Povedzme, že používate rovnaký klaster dev и qa. To znamená, že môžete mať aplikáciu app-asúčasne pracujúci v oboch prostrediach qa и dev. V tomto prípade môžeme samostatne pristupovať k inštancii aplikácie v konkrétnom prostredí zadaním príslušného parametra environment, Napríklad app: app-a и environment: dev pre jedno prostredie a app: app-a и environment: qa pre toho druhého.

To vám umožňuje pristupovať k obom inštanciám aplikácie, napríklad vykonávať testovanie súčasne.

Dajte veci do poriadku

Kubernetes je veľmi výkonný systém, ale každý systém môže časom uviaznuť v príliš veľkom množstve procesov. Kubelet spúšťa všetky procesy a kontroly, ktoré určíte, ako aj svoje vlastné.

Jedna osamotená služba samozrejme nespomalí systém a Kubernetes je navrhnutý tak, aby sa škáloval od základov. Ale ak sa namiesto jednej služby objaví milión, kubelet sa začne dusiť.

Ak z nejakého dôvodu odstránite nasadenie (kontajner, obrázok, čokoľvek), uistite sa, že vykonáte úplné vyčistenie.

Zoznámte sa s Go

Hlavné rady sme si nechali na záver. Naučte sa programovací jazyk Go.

Kubernetes je vyvinutý v Go, všetky rozšírenia sú napísané v Go a oficiálne je podporovaná aj klientska knižnica client-go.

Dá sa použiť na rôzne a zaujímavé veci. Napríklad na rozšírenie systému Kubernetes podľa vášho vkusu. Môžete teda použiť svoje vlastné programy na zhromažďovanie údajov, nasadenie aplikácií alebo jednoducho vyčistiť kontajnery.

Naučiť sa programovací jazyk Go a zvládnuť client-go je možno najdôležitejšou radou, ktorú môžete dať novým používateľom Kubernetes.

Preložené s podporou Mail.ru Cloud Solutions

Čo ešte čítať:

  1. Tri úrovne automatického škálovania v Kubernetes a ako ich efektívne používať.
  2. Pracovné uzly Kubernetes: veľa malých alebo málo veľkých?
  3. 25 užitočných nástrojov na nasadenie a správu Kubernetes.

Zdroj: hab.com

Pridať komentár