Je ľahké a pohodlné pripraviť klaster Kubernetes? Oznamujem prevádzkovateľa doplnkov

Je ľahké a pohodlné pripraviť klaster Kubernetes? Oznamujem prevádzkovateľa doplnkov

Po shell-operátor zastupujeme jeho staršieho brata - operátor doplnku. Ide o Open Source projekt, ktorý slúži na inštaláciu systémových komponentov v klastri Kubernetes, ktorý možno nazvať bežným slovom – doplnky.

Prečo vôbec pridávať nejaké doplnky?

Nie je žiadnym tajomstvom, že Kubernetes nie je hotový all-in-one produkt a na vybudovanie „dospeláckeho“ klastra budú potrebné rôzne doplnky. Operátor doplnkov vám pomôže nainštalovať, nakonfigurovať a udržiavať tieto doplnky aktuálne.

Potreba ďalších komponentov v klastri je pokrytá správa spolupracovníci driusha. Skrátka, situácia s Kubernetes je momentálne taká, že na jednoduchú inštaláciu “play around” si vystačíte s komponentmi hneď po vybalení, pre vývojárov a testovanie môžete pridať Ingress, no pre plnohodnotné inštaláciu, o ktorej môžete povedať „vaša produkcia je pripravená“, musíte pridať tucet rôznych doplnkov: niečo pre monitorovanie, niečo pre protokoly, nezabudnite na ingress a cert-manager, vyberte skupiny uzlov, pridajte sieťové politiky, okoreniť nastavenia sysctl a pod autoscaler...

Je ľahké a pohodlné pripraviť klaster Kubernetes? Oznamujem prevádzkovateľa doplnkov

Aké sú špecifiká práce s nimi?

Ako ukazuje prax, záležitosť nie je obmedzená na jednu inštaláciu. Pre pohodlnú prácu s klastrom bude potrebné doplnky aktualizovať, deaktivovať (odstrániť z klastra) a pred inštaláciou do produkčného klastra chcete niečo otestovať.

Takže, možno tu stačí Ansible? Možno. ale plnohodnotné doplnky vo všeobecnom prípade nežijú bez nastavení. Tieto nastavenia sa môžu líšiť v závislosti od variantu klastra (aws, gce, azure, bare-metal, do, ...). Niektoré nastavenia nie je možné nastaviť vopred – je potrebné ich získať z klastra. A klaster nie je statický: pri niektorých nastaveniach budete musieť postupovať podľa zmien. A tu Ansible nestačí: potrebujete program, ktorý žije v klastri, t.j. Operátor Kubernetes.

Tí, ktorí sa snažili shell-operátor, povedia, že úlohy inštalácie a aktualizácie doplnkov a nastavení monitorovania je možné úplne vyriešiť pomocou háčiky pre operátora shellu. Môžete napísať skript, ktorý vykoná podmienku kubectl apply a postupujte napríklad podľa ConfigMap, kde sa nastavenia uložia. Toto je približne to, čo je implementované v operátorovi doplnkov.

Ako je to organizované v addon-operátore?

Pri tvorbe nového riešenia sme vychádzali z nasledujúcich princípov:

  • Inštalačný program doplnku musí podporovať šablónová a deklaratívna konfigurácia. Nevytvárame magické skripty, ktoré inštalujú doplnky. Operátor doplnkov používa Helm na inštaláciu doplnkov. Ak chcete nainštalovať, musíte vytvoriť graf a vybrať hodnoty, ktoré sa použijú na konfiguráciu.
  • Nastavenia môžu vygenerovať pri inštalácii, môžeš dostať z klastraAlebo prijímať aktualizáciepri monitorovaní klastrových zdrojov. Tieto operácie je možné realizovať pomocou hákov.
  • Nastavenia môžu uložiť do klastra. Na uloženie nastavení v klastri sa vytvorí ConfigMap/operátor doplnkov a operátor doplnku monitoruje zmeny tejto ConfigMap. Operátor doplnkov poskytuje háčikom prístup k nastaveniam prostredníctvom jednoduchých konvencií.
  • Pridanie závisí od nastavení. Ak sa nastavenia zmenili, Addon-operátor spustí Helm-graf s novými hodnotami. Kombináciu Helmovho diagramu, jeho hodnôt a hákov sme nazvali modul (ďalšie podrobnosti nájdete nižšie).
  • Inscenácia. Neexistujú žiadne magické skripty. Mechanizmus aktualizácie je podobný bežnej aplikácii – zbierajte doplnky a operátora doplnkov do obrázka, označte a rozviňte.
  • Kontrola výsledku. Operátor doplnku môže vrátiť metriky pre Prometheus.

Čo je doplnkom v addon-operátore?

Čokoľvek, čo pridáva do klastra nové funkcie, možno považovať za doplnok. Skvelým príkladom doplnku je napríklad inštalácia Ingress. Môže to byť akýkoľvek operátor alebo kontrolór s vlastným CRD: prometheus-operator, cert-manager, kube-controller-manager atď. Alebo niečo malé, ale jednoduchšie na použitie, ako je tajná kopírka, ktorá kopíruje tajomstvá registra do nových menných priestorov, alebo sysctl tuner, ktorý ladí sysctl parametre na nových uzloch.

Na implementáciu doplnkov poskytuje Addon-operator niekoľko konceptov:

  • Tabuľka kormidla slúži na inštaláciu rôzneho softvéru do klastra - napríklad Prometheus, Grafana, nginx-ingress. Ak má požadovaný komponent schému Helm, potom bude jeho inštalácia pomocou operátora Addon veľmi jednoduchá.
  • ukladanie hodnôt. Grafy kormidla majú zvyčajne veľa rôznych nastavení, ktoré sa môžu časom meniť. Addon-operátor podporuje ukladanie týchto nastavení a sleduje ich zmeny, aby mohol resetovať Helmovu tabuľku s novými hodnotami.
  • Háčiky sú spustiteľné súbory, ktoré operátor Addon spúšťa pri udalostiach a ktoré pristupujú k ukladaniu hodnôt. Hák môže sledovať zmeny v klastri a aktualizovať hodnoty v úložisku hodnôt. Tie. pomocou háčikov môžete vykonať zisťovanie na zhromažďovanie hodnôt z klastra pri spustení alebo podľa plánu, alebo môžete vykonávať nepretržité zisťovanie zbieraním hodnôt z klastra na základe zmien v klastri.
  • Modul je zlúčením Helmovho diagramu, úložiska hodnôt a háčikov. Moduly je možné aktivovať a deaktivovať. Vypnutím modulu sa vymažú všetky vydania Helm-grafu. Moduly sa môžu zaraďovať dynamicky, napríklad ak sú povolené všetky moduly, ktoré potrebuje, alebo ak zisťovanie našlo potrebné parametre v hákoch – to sa robí pomocou pomocného povoleného skriptu.
  • Globálne háčiky. Toto sú háčiky „samotné“, nie sú zahrnuté v moduloch a majú prístup do globálneho úložiska hodnôt, z ktorých sú hodnoty dostupné všetkým háčikom v moduloch.

Ako tieto časti spolupracujú? Zvážte obrázok z dokumentácie:

Je ľahké a pohodlné pripraviť klaster Kubernetes? Oznamujem prevádzkovateľa doplnkov

Existujú dva pracovné scenáre:

  1. Globálny hák je spustený udalosťou – napríklad keď sa zdroj v klastri zmení. Tento hák spracováva zmeny a zapisuje nové hodnoty do úložiska globálnych hodnôt. Operátor doplnku si všimne, že globálny obchod sa zmenil a spustí všetky moduly. Každý modul používa svoje háčiky na určenie, či by mal byť povolený, a aktualizuje svoje ukladanie hodnôt. Ak je modul povolený, operátor Addon spustí inštaláciu Helm-grafu. Zároveň sú pre Helmov diagram dostupné hodnoty z modulového úložiska az globálneho úložiska.
  2. Druhý scenár je jednoduchší: hák modulu sa spustí udalosťou, zmení hodnoty v úložisku hodnôt modulu. Operátor doplnku si to všimne a spustí tabuľku Helm s aktualizovanými hodnotami.

Doplnok môže byť implementovaný ako jeden háčik, alebo ako jeden Helm graf, príp aj ako viaceré závislé moduly - závisí od zložitosti komponentu nainštalovaného v klastri a od požadovanej úrovne flexibility konfigurácie. Napríklad v úložisku (/príklady) existuje doplnok sysctl-tuner, ktorý je implementovaný ako jednoduchý modul s háčikom a Helm-grafom, ako aj pomocou úložiska hodnôt, čo umožňuje pridávať nastavenia úpravou ConfigMap.

Doručovanie aktualizácií

Niekoľko slov o organizácii aktualizácií komponentov, ktoré nainštaluje operátor Addon.

Ak chcete spustiť operátora doplnkov na klastri, potrebujete zostaviť obrázok s doplnkami ako súbory háčikov a grafy Helm pridajte binárny súbor addon-operator a všetko, čo potrebujete pre háčiky: bash, kubectl, jq, python atď. Ďalej, tento obrázok môže byť zavedený do klastra ako normálna aplikácia a s najväčšou pravdepodobnosťou budete chcieť zorganizovať jednu alebo inú schému označovania. Ak je klastrov málo, môže byť vhodný rovnaký prístup ako pri aplikáciách: nové vydanie, nová verzia, prejsť všetky klastre a opraviť obraz podov. V prípade zavedenia do značného počtu klastrov nám však viac vyhovoval koncept vlastnej aktualizácie z kanála.

My to mame nastavene takto:

  • Kanál je v podstate identifikátor, ktorý možno nastaviť na čokoľvek (napríklad dev/stage/ea/stable).
  • Názov kanála je značka obrázka. Keď potrebujete zaviesť aktualizácie pre kanál, vytvorí sa nový obrázok a označí sa názvom kanála.
  • Keď sa v registri objaví nový obrázok, Addon-operator sa reštartuje a spustí sa s novým obrázkom.

Toto nie je najlepší postup, ako je napísané Dokumentácia Kubernetes. Neodporúča sa to robiť, ale hovoríme o tom normálna aplikácia, ktorá žije v jednom klastri. V prípade Addon-operator je aplikácia veľa Deployments roztrúsených po klastroch a samoaktualizácia veľmi pomáha a uľahčuje život.

Kanály pomáhajú a v testovaní: ak je k dispozícii pomocný klaster, môžete ho nastaviť na kanál stage a pred nasadením do kanálov do nej vložiť aktualizácie ea и stable. Ak s klastrom na kanáli ea vyskytla sa chyba, môžete to zmeniť na stablekým sa problém s týmto klastrom vyšetruje. Ak je klaster vyňatý z aktívnej podpory, prepne sa na svoj „zamrznutý“ kanál – napr. freeze-2019-03-20.

Okrem aktualizácie háčikov a grafov Helm možno budete musieť aktualizácia a komponent tretej strany. Všimli ste si napríklad chybu v podmienenom exportéri uzlov a dokonca ste prišli na to, ako ju opraviť. Potom sme otvorili PR a čakáme na nové vydanie, aby sme prešli všetkými klastrami a zvýšili verziu imidžu. Aby ste nečakali donekonečna, môžete si vytvoriť svoj vlastný exportér uzlov a prejsť naň pred prijatím PR.

Vo všeobecnosti sa to dá urobiť bez operátora Addon, ale s operátorom Addon bude modul na inštaláciu node-exporter viditeľný v jednom úložisku, súbor Dockerfile si môžete ponechať na vytvorenie svojho obrazu priamo tam, bude to jednoduchšie aby všetci účastníci procesu pochopili, že sa to deje... A ak existuje niekoľko klastrov, bude jednoduchšie otestovať vaše PR a uviesť na trh novú verziu!

Táto organizácia aktualizácie komponentov pre nás úspešne funguje, ale koniec koncov je možné implementovať akúkoľvek inú vhodnú schému v tomto prípade je addon-operator jednoduchý binárny súbor.

Záver

Princípy implementované v Addon-operator vám umožňujú vybudovať transparentný proces vytvárania, testovania, inštalácie a aktualizácie doplnkov v klastri, podobne ako pri vývoji bežných aplikácií.

Doplnky pre Addon-operator vo formáte modulov (Helm-chart + hooks) môžu byť verejne dostupné. My, spoločnosť Flant, plánujeme počas leta zverejniť náš vývoj v podobe takýchto doplnkov. Pripojte sa k vývoju na GitHub (shell-operátor, operátor doplnku), pokúste sa pridať na základe príklady и dokumentáciu, čakajte novinky na Habré a na našom kanál YouTube!

PS

Prečítajte si aj na našom blogu:

Zdroj: hab.com

Pridať komentár