Pomocou Helma a Kubernetesa

1. Prehľad

Helm je správcom balíkov pre aplikácie Kubernetes. V tomto tutoriáli pochopíme základné informácie o Helmovi a o tom, ako tvoria silný nástroj na prácu s prostriedkami Kubernetes.

Za posledné roky sa Kubernetes ohromne rozrástol, rovnako ako ekosystém, ktorý ho podporuje. Spoločnosť Helm bola nedávno ohlásená ako inkubačný projekt spoločnosti Cloud Native Computing Foundation (CNCF), ktorá ukazuje jeho rastúcu popularitu medzi používateľmi Kubernetes.

2. Pozadie

Aj keď sú tieto výrazy v dnešnej dobe pomerne bežné, najmä medzi tými, ktorí pracujú s cloudovými technológiami, poďme si ich rýchlo predstaviť pre tých, ktorí to nevedia:

  1. Kontajner: Kontajner označuje virtualizáciu na úrovni operačného systému. V operačnom systéme je v izolovaných používateľských priestoroch spustených viac kontajnerov. Programy bežiace v kontajneri majú prístup iba k prostriedkom priradeným ku kontajneru.
  2. Docker: Docker je populárny program na vytváranie a spúšťanie kontajnerov. Dodáva sa s Docker Daemon, ktorý je hlavným programom pre správu kontajnerov. Docker Daemon ponúka prístup k svojim funkciám prostredníctvom rozhrania Docker Engine API, ktoré používa rozhranie príkazového riadku (CLI). V tomto článku nájdete podrobnejší popis programu Docker.
  3. Kubernetes: Kubernetes je populárny program orchestrácie kontajnerov. Aj keď je navrhnutý na prácu s rôznymi kontajnermi, najčastejšie sa používa Docker. Ponúka široký výber funkcií vrátane automatizácie nasadenia, zmeny mierky a operácií v klastri hostiteľov. V tomto článku je vynikajúce pokrytie Kubernetes pre ďalšiu referenciu.

3. Helmova architektúra

Helm má pomerne jednoduchú architektúru, ktorá sa skladá z klienta a servera v klastri:

  • Tiller Server: Helm spravuje aplikáciu Kubernetes prostredníctvom komponentu s názvom Tiller Server nainštalované v klastri Kubernates. Tiller interaguje so serverom API Kubernetes pri inštalácii, aktualizácii, dotazovaní a odstraňovaní prostriedkov Kubernetes.
  • Helm klient: Helm poskytuje používateľovi rozhranie príkazového riadku pre prácu s grafmi Helm. Helm Client je zodpovedný za interakciu so serverom Tiller Server za účelom vykonávania rôznych operácií, ako sú mapy inštalácie, aktualizácie a vrátenia zmien.

4. Helmove mapy

Helm spravuje balíčky zdrojov Kubernetes prostredníctvom grafov.

O grafoch uvidíme viac, keď ich čoskoro vytvoríme, ale zatiaľ nie je graf ničím iným ako súborom informácií potrebných na vytvorenie aplikácie Kubernetes, vzhľadom na klaster Kubernetes:

  • A graf je zbierka súborov organizované v konkrétnej adresárovej štruktúre
  • Informácie o konfigurácii súvisiace s grafom sa spravujú v konfigurácii
  • Nakoniec bežiaca inštancia grafu so špecifickou konfiguráciou sa nazýva vydanie

5. Nastavenie

Aby sme mohli vytvoriť našu prvú Helmovu schému, budeme musieť vopred pripraviť niekoľko vecí.

Najskôr, aby sme mohli začať pracovať s Helmom, potrebujeme klaster Kubernetes. Pre tento tutoriál použijeme Minikube, ktorá ponúka vynikajúci spôsob miestnej práce s klastrom Kubernetes s jedným uzlom. Vo Windows je teraz možné používať Hyper-V ako natívny hypervízor na spustenie Minikube. V tomto článku nájdete ďalšie podrobnosti o nastavení aplikácie Minikube.

A na správu v rámci klastra Kubernetes budeme potrebovať základnú aplikáciu. Pre tento tutoriál použijeme jednoduchú aplikáciu Spring Boot zabalenú ako kontajner Docker. Podrobnejší popis spôsobu balenia takejto aplikácie ako kontajnera Docker nájdete v tomto článku.

6. Inštalácia kormidla

Existuje niekoľko spôsobov, ako nainštalovať Helm, ktoré sú prehľadne popísané na oficiálnej inštalačnej stránke v Helme. Najrýchlejší spôsob inštalácie kormidla v systéme Windows je použitie aplikácie Chocolaty, správca balíkov pre platformy Windows.

Pomocou Chocolaty je to jednoduchý jednoriadkový príkaz na inštaláciu Helm:

choco nainštalujte kubernetes-helm

Týmto sa lokálne nainštaluje Helm Client.

Teraz musíme inicializovať Helm CLI, ktoré efektívne nainštaluje aj server Tiller na klaster Kubernetes identifikovaný v konfigurácii Kubernetes. Prosím zabezpečiť, aby bol klaster Kubernetes spustený a prístupný cez kubectl pred inicializáciou Helm:

kubectl klaster-info

Potom môžeme Helm inicializovať prostredníctvom samotného Helm CLI:

kormidlo init

7. Vypracovanie nášho prvého grafu

Teraz sme pripravení vyvinúť náš prvý Helmov graf so šablónami a hodnotami.

7.1. Vytvorenie grafu

Helm CLI, ktorý sme si nainštalovali skôr, je pri vytváraní grafu celkom užitočný:

kormidlo vytvoriť ahoj-svet

Upozorňujeme, že názov tu uvedeného grafu bude názov adresára, kde je graf vytvorený a uložené.

Poďme sa rýchlo pozrieť na adresárovú štruktúru, ktorá bola pre nás vytvorená:

ahoj-svet / hodnoty Chart.yaml.yaml šablóny / grafy / .helmignore

Poďme pochopiť dôležitosť týchto súborov a priečinkov, ktoré sme pre nás vytvorili:

  • Chart.yaml: Toto je hlavný súbor, ktorý obsahuje popis nášho grafu
  • hodnoty.yaml: toto je súbor, ktorý obsahuje predvolené hodnoty pre náš graf
  • šablóny: Toto je adresár, kde sú prostriedky Kubernetes definované ako šablóny
  • grafy: Toto je voliteľný adresár, ktorý môže obsahovať čiastkové grafy
  • .helmignore: Tu môžeme definovať vzory, ktoré sa majú pri balení ignorovať (koncepčne podobný konceptu .gitignore)

7.2. Vytvára sa šablóna

Ak sa pozrieme do adresára šablón, všimneme si to už bolo vytvorených niekoľko šablón pre bežné prostriedky Kubernetes pre nás:

ahoj-svet / templates / deployment.yaml service.yaml ingress.yaml ......

Možno budeme potrebovať niektoré z týchto a prípadne ďalších zdrojov v našej aplikácii, ktoré si budeme musieť vytvoriť sami ako šablóny.

Pre tento tutoriál vytvoríme nasadenie a službu, ktorá dané nasadenie vystaví. Upozorňujeme, že sa tu zdôrazňuje, že nie je potrebné podrobne rozumieť Kubernetesovi. Preto budeme tieto zdroje udržiavať čo najjednoduchšie.

Upravme súbor nasadenie.yaml vnútri šablóny adresár vyzerať takto:

apiVersion: apps / v1 kind: Deployment metadata: name: {{include "hello-world.fullname". }} štítky: app.kubernetes.io/name: {{zahŕňajú "hello-world.name". }} helm.sh/chart: {{zahrnúť "hello-world.chart". }} app.kubernetes.io/instance: {{.Release.Name}} app.kubernetes.io/managed-by: {{.Release.Service}} spec: replicas: {{.Values.replicaCount}} selektor: matchLabels: app.kubernetes.io/name: {{include "hello-world.name". }} app.kubernetes.io/instance: {{.Release.Name}} šablóna: metadata: labels: app.kubernetes.io/name: {{include "hello-world.name". }} app.kubernetes.io/instance: {{.Release.Name}} spec: containers: - name: {{.Chart.Name}} image: "{{.Values.image.repository}}: {{. Values.image.tag}} "imagePullPolicy: {{.Values.image.pullPolicy}} porty: - názov: http containerPort: 8080 protokol: TCP

Podobne upravme súbor služba.yaml vyzerať ako:

apiVersion: v1 kind: Service metadata: name: {{include "hello-world.fullname". }} štítky: app.kubernetes.io/name: {{zahŕňajú "hello-world.name". }} helm.sh/chart: {{zahrnúť "hello-world.chart". }} app.kubernetes.io/instance: {{.Release.Name}} app.kubernetes.io/managed-by: {{.Release.Service}} spec: type: {{.Values.service.type}} porty: - port: {{.Values.service.port}} targetPort: http protokol: názov TCP: selektor http: app.kubernetes.io/name: {{zahrnúť "hello-world.name". }} app.kubernetes.io/instance: {{.Release.Name}}

Teraz, s našimi znalosťami Kubernetes, vyzerajú tieto súbory šablón celkom dobre, až na niektoré zvláštnosti. Všimnite si liberálne použitie textu v dvojitých zátvorkách {{}}. Toto sa nazýva šablónová smernica.

Helm využíva šablónový jazyk Go a rozširuje ho na niečo, čo sa nazýva Helmov šablónový jazyk. Počas vyhodnotenia sa každý súbor v adresári šablón odošle do modulu vykresľovania šablón. To je miesto, kde direktíva šablón vloží skutočné hodnoty do šablón.

7.3. Poskytovanie hodnôt

V predchádzajúcej podkapitole sme videli, ako používať direktívu šablón v našich šablónach. Poďme teda pochopiť, ako môžeme odovzdať hodnoty do modulu vykresľovania šablón. Hodnoty zvyčajne prechádzame cez vstavané objekty v Helme.

V aplikácii Helm je k dispozícii veľa takýchto objektov, napríklad Release, Values, Chart a Files.

Môžeme použiť súbor hodnoty.yaml v našom grafe odovzdávať hodnoty do modulu vykresľovania šablón prostredníctvom vstavaných hodnôt objektov. Poďme upraviť hodnoty.yaml vyzerať ako:

replicaCount: 1 image: repository: "hello-world" tag: "1.0" pullPolicy: IfNotPresent service: type: NodePort port: 80

Všimnite si však, ako sa k týmto hodnotám dostalo v rámci šablón pomocou bodiek oddeľujúcich menné priestory. Repozitár obrázkov a značku sme použili ako „hello-world“ a „1.0“, toto sa musí zhodovať s tagom docker image, ktorý sme vytvorili pre našu aplikáciu Spring Boot.

8. Pochopenie Helmových príkazov

Všetko, čo bolo doteraz urobené, sme teraz pripravení hrať s našim grafom. Pozrime sa, aké sú rôzne príkazy dostupné v Helm CLI, aby bola táto zábava!

8.1. Helm Lint

Po prvé, ide o jednoduchý príkaz, ktorý smeruje k grafu a spustí sériu testov, aby sa zabezpečilo, že graf je dobre tvarovaný:

helm lint ./hello-world ==> Podšívka ./hello-world 1 graf (y) linkované, žiadne poruchy

8.2 Šablóna kormidla

Tento príkaz tiež slúži na rýchlu spätnú väzbu na vykreslenie šablóny lokálne bez servera Tiller.

šablóna kormidla ./hello-world --- # Zdroj: hello-world / templates / service.yaml apiVerzia: druh v1: metaúdaje služby: názov: release-name-hello-world štítky: app.kubernetes.io/name: ahoj -world helm.sh/chart: hello-world-0.1.0 app.kubernetes.io/instance: release-name app.kubernetes.io/managed-by: Tiller spec: typ: porty NodePort: - port: 80 targetPort: protokol HTTP: názov TCP: selektor http: app.kubernetes.io/name: hello-world app.kubernetes.io/instance: release-name --- # zdroj: hello-world / templates / deployment.yaml apiVersion: apps / v1 kind: Deployment metadata: name: release-name-hello-world labels: app.kubernetes.io/name: hello-world helm.sh/chart: hello-world-0.1.0 app.kubernetes.io/instance: release -name app.kubernetes.io/managed-by: Špecifikácia kultivátora: repliky: 1 selektor: matchLabels: app.kubernetes.io/name: ahoj-svet app.kubernetes.io/instance: šablóna názvu vydania: metadáta: štítky: app.kubernetes.io/name: hello-world app.kubernetes.io/instance: release-name spec: containers: - na ja: hello-world image: "hello-world: 1.0" imagePullPolicy: IfNotPresent porty: - názov: http containerPort: 8080 protokol: TCP

8.3. Helm Install

Po overení, či je graf v poriadku, môžeme nakoniec spustiť tento príkaz na inštaláciu grafu do klastra Kubernetes:

helm install --name hello-world ./hello-world NÁZOV: hello-world POSLEDNÝ ODOSLANÝ: Mon Feb 25 15:29:59 2019 NAMESPACE: predvolený STAV: ODLOŽENÉ ZDROJE: ==> v1 / NÁZOV SLUŽBY TYP CLUSTER-IP EXTERNÝ -IP PORT (S) AGE hello-world NodePort 10.110.63.169 80: 30439 / TCP 1s ==> v1 / Nasadenie NÁZOV POŽADOVANÝ AKTUÁLNY AKTUÁLNY DOSTUPNÝ VEK hello-world 1 0 0 0 1s ==> v1 / Pod (súvisiace) NÁZOV STAV PRIPRAVENIA RESTARTS AGE hello-world-7758b9cdf8-cs798 0/1 Čakajúce 0 0 s

Na záver si všimnite, že sme pomenovanie vydania tohto grafu označili názvom príznaku. Príkaz reaguje súhrnom prostriedkov Kubernetes vytvorených v procese.

8.4. Helm Get

Teraz by sme chceli zistiť, ktoré grafy sú nainštalované ako aké vydanie. Tento príkaz umožňuje dotazovať sa na pomenované vydania:

helm ls --all NÁZOV REVÍZIA AKTUALIZOVANÝ STAV KARTA APP VERZIA NÁZV PRÁCE hello-world 1 Po feb 25 15:29:59 2019 ZAVEDENÉ hello-world-0.1.0 1.0 default

8.5. Vylepšenie kormidla

Čo ak sme zmenili náš graf a je potrebné nainštalovať aktualizovanú verziu? Tento príkaz nám pomáha upgradovať vydanie na zadanú alebo aktuálnu verziu grafu alebo konfigurácie:

helm upgrade hello-world ./hello-world Vydanie „hello-world“ bolo aktualizované. Šťastnú pomoc! POSLEDNÉ ODOSLANIE: Po 25. februára 15:36:04 2019 NAMESPACE: predvolený STAV: ODLOŽENÉ ZDROJE: ==> v1 / NÁZOV SLUŽBY TYP CLUSTER-IP EXTERNÝ IP PORT (A) VEK hello-world NodePort 10.110.63.169 80: 30439 / TCP 6m5s ==> v1 / Nasadenie NÁZOV POŽADOVANÝ AKTUÁLNY AKTUÁLNY DOSTUPNÝ VEK hello-world 1 1 1 1 6m5s ==> v1 / Pod (súvisiace) NÁZOV READY STATUS RESTARTS AGE hello-world-7758b9cdf8-cs798 1/1 Beží 0 6m4s

8.6. Helm Rollback

Vždy sa môže stať, že sa vyslobodenie pokazilo a je potrebné ho vziať späť. Toto je príkaz na vrátenie vydania k predchádzajúcej verzii:

helm rollback ahoj-svet 1 Rollback bol úspešný! Šťastnú pomoc!

8.7. Helm Delete

Aj keď je to menej pravdepodobné, možno budeme chcieť vydanie úplne odstrániť. Týmto príkazom môžeme odstrániť vydanie z Kubernetes:

helm delete --purge ahoj-svet vydanie "ahoj-svet" vymazané

Toto je iba niekoľko príkazov dostupných na prácu s grafmi a vydaniami v Helme.

9. Distribučné grafy

Aj keď je šablóna mocným nástrojom, ktorý Helm prináša do sveta riadenia zdrojov Kubernetes, nie je to jediná výhoda používania Helmu. Ako sme videli v predchádzajúcej časti, Helm funguje ako správca balíkov pre aplikáciu Kubernetes a umožňuje bezproblémovú inštaláciu, dopytovanie, aktualizáciu a mazanie vydaní.

Navyše, Helm prichádza s príkazmi ako súčasť svojho CLI na zabalenie, publikovanie a načítanie aplikácií Kubernetes ako grafov:

9.1. Balíček kormidla

Najprv musíme zbaliť grafy, ktoré sme vytvorili, aby sme ich mohli distribuovať. Toto je príkaz na vytvorenie verziovaných archívnych súborov grafu:

balíček kormidla ./hello-world Úspešne zabalený graf a uložený do: \ hello-world \ hello-world-0.1.0.tgz

Upozorňujeme, že na vašom počítači vytvára archív, ktorý je možné distribuovať manuálne alebo prostredníctvom verejných alebo súkromných archívov grafov.

9.2. Helm Repo

Nakoniec potrebujeme mechanizmus spolupráce so zdieľanými archívmi. Repo spája množstvo príkazov, pomocou ktorých môžeme pridávať, odstraňovať, vypisovať alebo indexovať archívy grafov. Pozrime sa, ako ich môžeme využiť.

Môžeme vytvoriť úložisko git a použiť ho ako naše úložisko grafov. Jedinou požiadavkou je, aby mala index.yaml spis.

Môžeme vytvárať index.yaml pre našu repo grafu:

index kormidla repo my-repo / --url //.github.io/my-repo

Toto generuje index.yaml súbor, ktorý by sme mali spolu s archívmi grafov presunúť do úložiska.

Po úspešnom vytvorení úložiska grafov môžeme následne na diaľku pridať toto repo:

helm repo pridať moje-repo //my-pages.github.io/my-repo

Teraz by sme mali byť schopní inštalovať grafy z nášho repo priamo:

helm install my-repo / hello-world --name = ahoj-svet

Pre prácu s archívmi grafov je k dispozícii pomerne veľa obslužných príkazov.

10. Záver

Ak to zhrnieme, v tomto tutoriáli sme diskutovali o základných komponentoch spoločnosti Helm, správcu balíkov pre aplikácie Kubernetes. Pochopili sme možnosti inštalácie Helmu. Ďalej sme prešli vytvorením vzorového grafu a šablón s hodnotami.

Potom sme prešli viacerými príkazmi dostupnými ako súčasť Helm CLI na správu aplikácie Kubernetes ako balík Helm.

Na záver sme diskutovali o možnostiach distribúcie balíkov Helm cez úložiská.


$config[zx-auto] not found$config[zx-overlay] not found