Korištenje Helma i Kubernetesa

1. Pregled

Helm je upravitelj paketa za Kubernetes aplikacije. U ovom uputstvu razumjet ćemo osnove Helma i kako oni čine moćan alat za rad s Kubernetesovim resursima.

Tijekom posljednjih godina Kubernetes je strahovito porastao, pa tako i ekosustav koji ga podržava. Nedavno je Helm najavljen kao inkubacijski projekt Cloud Native Computing Foundation (CNCF), što pokazuje njegovu sve veću popularnost među korisnicima Kubernetesa.

2. Pozadina

Iako su ovi izrazi danas prilično uobičajeni, posebno među onima koji rade s tehnologijama u oblaku, prođimo ih brzo za one koji nisu svjesni:

  1. Spremnik: Spremnik se odnosi na virtualizaciju na razini operativnog sustava. U operacijskom sustavu u izoliranim korisničkim prostorima radi više spremnika. Programi koji se izvode u spremniku imaju pristup samo resursima dodijeljenim spremniku.
  2. Lučki radnik: Docker je popularan program za stvaranje i pokretanje spremnika. Dolazi s Docker Daemonom, koji je glavni program za upravljanje spremnicima. Docker Daemon nudi pristup svojim značajkama putem Docker Engine API-ja, koji koristi Docker sučelje naredbenog retka (CLI). Pogledajte detaljniji opis Dockera u ovom članku.
  3. Kubernetes: Kubernetes je popularan program orkestracije kontejnera. Iako je dizajniran za rad s različitim spremnicima, Docker se najčešće koristi. Nudi širok izbor značajki, uključujući automatizaciju implementacije, skaliranje i operacije na klasteru hostova. U ovom je članku izvrsno pokriveno Kubernetes za daljnju referencu.

3. Arhitektura kormila

Helm ima prilično jednostavnu arhitekturu koja se sastoji od klijenta i poslužitelja u klasteru:

  • Poslužitelj ručice: Helm upravlja aplikacijom Kubernetes putem komponente nazvane Tiller Server instaliran unutar Kubernates klastera. Tiller u interakciji s Kubernetes API poslužiteljem instalira, nadograđuje, postavlja upit i uklanja Kubernetesove resurse.
  • Klijent kormila: Helm pruža sučelje naredbenog retka za rad korisnika s Helm Charts. Klijent Helm odgovoran je za interakciju s poslužiteljem ručice za obavljanje različitih operacija poput dijagrama instaliranja, nadogradnje i vraćanja.

4. Helm ljestvice

Helm upravlja Kubernetesovim paketima resursa putem grafikona.

Uskoro ćemo vidjeti više o grafikonima, ali za sada grafikon nije ništa drugo do skup informacija potrebnih za stvaranje Kubernetesove aplikacije, s obzirom na Kubernetes klaster:

  • A chart je zbirka datoteka organizirane u određenu strukturu direktorija
  • Podaci o konfiguraciji povezani s grafikonom upravljaju se u konfiguraciji
  • Konačno, pokrenuta instanca grafikona s određenom konfiguracijom naziva se izdanjem

5. Postavljanje

Trebat će nam nekoliko stvari koje ćemo prethodno postaviti da bismo mogli razviti našu prvu kartu kaciga.

Prvo, da bismo započeli suradnju s Helmom, potreban nam je Kubernetesov klaster. Za ovaj ćemo vodič upotrijebiti Minikube, koji nudi izvrstan način lokalnog rada s Kubernetes klasterom s jednim čvorom. Na Windowsima je sada moguće koristiti Hyper-V kao izvorni Hypervisor za pokretanje Minikubea. Pogledajte ovaj članak da biste detaljnije razumjeli postavljanje Minikubea.

I trebat će nam osnovna aplikacija za upravljanje unutar klastera Kubernetes. Za ovaj ćemo vodič upotrijebiti jednostavnu aplikaciju Spring Boot pakiranu kao Docker spremnik. Za detaljniji opis načina pakiranja takve aplikacije kao Docker spremnik, pogledajte ovaj članak.

6. Instaliranje kacige

Postoji nekoliko načina instaliranja Helma koji su lijepo opisani na službenoj stranici za instalaciju Helma. Najbrži način za instaliranje kormila na Windows je upotreba Chocolatyja, upravitelj paketa za Windows platforme.

Koristeći Chocolaty, jednostavna je naredba u jednom retku za instaliranje Helma:

choco instalirati kubernetes-helm

Ovim se klijent Helm instalira lokalno.

Sada moramo inicijalizirati Helm CLI, koji učinkovito instalira i Tiller Server na Kubernetes klaster kako je identificirano kroz Kubernetes konfiguraciju. Molim osigurati da klaster Kubernetes radi i bude mu dostupan kubectl prije inicijalizacije Helma:

kubectl cluster-info

A zatim, Helm možemo inicijalizirati kroz sam Helm CLI:

kormilo init

7. Razvoj naše prve karte

Sada smo spremni razviti našu prvu Helm Chart s predlošcima i vrijednostima.

7.1. Izrada grafikona

Helm CLI, koji smo ranije instalirali, vrlo je zgodan u stvaranju grafikona:

helm create hello-world

Imajte na umu da naziv ovdje navedenog grafikona bit će naziv direktorija u kojem je grafikon kreiran i pohranjeni.

Pogledajmo brzo strukturu direktorija stvorenu za nas:

hello-world / Chart.yaml values.yaml predlošci / grafikoni / .helmignore

Razumijemo važnost ovih datoteka i mapa stvorenih za nas:

  • Grafikon.yaml: Ovo je glavna datoteka koja sadrži opis naše karte
  • vrijednosti.yaml: ovo je datoteka koja sadrži zadane vrijednosti za naš grafikon
  • predlošci: Ovo je direktorij u kojem su Kubernetes resursi definirani kao predlošci
  • ljestvice: Ovo je neobavezni direktorij koji može sadržavati pod grafikone
  • .helmignore: Ovdje možemo definirati uzorke koje ćemo zanemariti prilikom pakiranja (slično u konceptu .gitignore)

7.2. Izrada predloška

Ako vidimo unutar direktorija predloška, ​​primijetit ćemo to već je stvoreno nekoliko predložaka za uobičajene Kubernetesove resurse za nas:

hello-world / templates / deployment.yaml service.yaml ingress.yaml ......

Možda će nam trebati neki od ovih, a možda i drugi resursi u našoj aplikaciji, koje ćemo sami morati stvoriti kao predloške.

Za ovaj ćemo vodič stvoriti implementaciju i uslugu koja će izložiti tu implementaciju. Napominjemo da ovdje naglasak nije na razumijevanju Kubernetesa u detalje. Stoga ćemo te resurse učiniti što jednostavnijima.

Uredimo datoteku raspoređivanje.yaml unutar predlošci direktorij koji će izgledati:

apiVersion: apps / v1 kind: Metapodaci implementacije: name: {{uključuju "hello-world.fullname". }} oznake: app.kubernetes.io/name: {{uključuju "hello-world.name". }} helm.sh/chart: {{uključi "hello-world.chart". }} app.kubernetes.io/instance: {{.Release.Name}} app.kubernetes.io/managed-by: {{.Release.Service}} spec: replike: {{.Values.replicaCount}} selektor: matchLabels: app.kubernetes.io/name: {{uključi "hello-world.name". }} app.kubernetes.io/instance: {{.Release.Name}} predložak: metapodaci: oznake: app.kubernetes.io/name: {{uključuju "hello-world.name". }} app.kubernetes.io/instance: {{.Release.Name}} spec: container: - name: {{.Chart.Name}} image: "{{.Values.image.repository}}: {{. Vrijednosti.image.tag}} "portovi imagePullPolicy: {{.Values.image.pullPolicy}}: - naziv: http containerPort: 8080 protokol: TCP

Slično tome, uredimo datoteku usluga.yaml izgledati kao:

apiVersion: v1 kind: Metapodaci usluge: name: {{uključuju "hello-world.fullname". }} oznake: app.kubernetes.io/name: {{uključuju "hello-world.name". }} helm.sh/chart: {{uključi "hello-world.chart". }} app.kubernetes.io/instance: {{.Release.Name}} app.kubernetes.io/managed-by: {{.Release.Service}} spec: type: {{.Values.service.type}} portovi: - port: {{.Values.service.port}} targetPort: http protokol: TCP ime: http selector: app.kubernetes.io/name: {{uključuju "hello-world.name". }} app.kubernetes.io/instance: {{.Izdanje.Ime}}

Sada, s našim znanjem o Kubernetesu, ove datoteke predložaka izgledaju prilično poznato, osim nekih neobičnosti. Imajte na umu liberalnu upotrebu teksta u dvostrukim zagradama {{}}. To je ono što se naziva predloškom direktive.

Helm koristi jezik predloška Go i proširuje ga na nešto što se naziva Helm predložak jezika. Tijekom procjene, svaka datoteka unutar direktorija predloška predaje se mehanizmu za prikazivanje predloška. Tu direktiva o predlošku ubacuje stvarne vrijednosti u predloške.

7.3. Pružanje vrijednosti

U prethodnom pododjeljku vidjeli smo kako koristiti direktivu o predlošku u našim predlošcima. Sada, hajde da shvatimo kako možemo proslijediti vrijednosti u mehanizam za prikazivanje predloška. Vrijednosti obično prolazimo kroz ugrađene objekte u Helmu.

U Helmu je dostupno mnogo takvih objekata, poput Release, Values, Chart i Files.

Možemo koristiti datoteku vrijednosti.yaml u našem grafikonu za prosljeđivanje vrijednosti u mehanizam za prikazivanje predložaka kroz ugrađene vrijednosti vrijednosti. Izmijenimo vrijednosti.yaml izgledati kao:

replicaCount: 1 slika: spremište: oznaka "hello-world": "1.0" pullPolicy: IfNotPresent usluga: tip: NodePort port: 80

Međutim, imajte na umu kako se tim vrijednostima pristupalo u predlošcima pomoću točaka koje odvajaju prostore imena. Spremište i oznaku slika koristili smo kao "hello-world" i "1.0", to mora odgovarati oznaci slike dockera koju smo kreirali za našu aplikaciju Spring Boot.

8. Razumijevanje naredbi kormila

Uz sve do sada učinjeno, sada smo spremni igrati se s našom kartom. Pogledajmo koje su različite naredbe dostupne u Helm CLI-u kako bi ovo bilo zabavno!

8.1. Helm Lint

Prvo, ovo je jednostavna naredba koja vodi do grafikona i pokreće bateriju testova kako bi se osiguralo da je grafikon dobro oblikovan:

crta kormila ./hello-world ==> Oblaganje ./hello-world

8.2 Predložak kormila

Također, imamo ovu naredbu za lokalno prikazivanje predloška, ​​bez poslužitelja za upravljanje, za brzu povratnu informaciju:

predložak helma ./hello-world --- # Izvor: hello-world / templates / service.yaml apiVersion: v1 vrsta: Metapodaci usluge: 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: Specifikacije rotilja: tip: NodePort portovi: - port: 80 targetPort: http protokol: TCP naziv: selektor http: app.kubernetes.io/name: hello-world app.kubernetes.io/instance: release-name --- # Izvor: hello-world / templates / deployment.yaml apiVersion: apps / v1 vrsta: Metapodaci implementacije: ime: release-name-hello-world labels: app.kubernetes.io/name: hello-world helm.sh/chart: hello-world-0.1.0 app.kubernetes.io/instance: release -ime app.kubernetes.io/managed-by: Specifikacije ručka: replike: 1 selektor: matchLabels: app.kubernetes.io/name: hello-world app.kubernetes.io/instance: predložak imena izdanja: metapodaci: oznake: app.kubernetes.io/name: hello-world app.kubernetes.io/instance: naziv izdanja specifikacija: kontejneri: - na ja: hello-world image: "hello-world: 1.0" imagePullPolicy: IfNotPresent ports: - name: http containerPort: 8080 protokol: TCP

8.3. Instalacija kacige

Jednom kada provjerimo da je grafikon u redu, konačno, možemo pokrenuti ovu naredbu za instalaciju grafikona u klaster Kubernetes:

helm install --name hello-world ./hello-world NAZIV: hello-world POSLJEDNJI ZAPOSLENI: Mon Feb 25 15:29:59 2019 NAMESPACE: zadani STATUS: ZAPOSLENI RESURSI: ==> v1 / IME USLUGE TIP KLASTER-IP VANJSKI -IP PORT (S) AGE hello-world NodePort 10.110.63.169 80: 30439 / TCP 1s ==> v1 / Implementacija IME ŽELJENO AKTUELNO DOSTUPNO DOBA hello-world 1 0 0 0 1s ==> v1 / Pod (povezano) IME SPREMNI STATUS PONOVNO POČINJE STAROST hello-world-7758b9cdf8-cs798 0/1 Na čekanju 0 0s

Na kraju, imajte na umu da smo izdanje ove ljestvice nazvali zastavicom -name. Naredba odgovara sažetkom Kubernetesovih resursa stvorenih u procesu.

8.4. Helm Get

Sada bismo željeli vidjeti koje su ljestvice instalirane kao koje izdanje. Ova nam naredba omogućuje upit za navedena izdanja:

helm ls --all NAME REVISION AŽURIRANI STATUS KARTA APLIKACIJA VERZIJA NAMESPACE hello-world 1 Mon Feb 25 15:29:59 2019 DEPLOYED hello-world-0.1.0 1.0 default

8.5. Nadogradnja kormila

Što ako smo izmijenili grafikon i trebamo instalirati ažuriranu verziju? Ova nam naredba pomaže u nadogradnji izdanja na navedenu ili trenutnu verziju grafikona ili konfiguracije:

nadogradnja kormila hello-world ./hello-world Izdanje "hello-world" je nadograđeno. Sretan Helming! POSLJEDNJE DJELO: Ponedjeljak, 25. veljače 15:36:04 2019. IME PROSTOR: zadani STATUS: RAZVRŠTENI RESURSI: ==> v1 / IME USLUGE TIP KLASTER-IP VANJSKI-IP LUKA (E) STAROST hello-world NodePort 10.110.63.169 80: 30439 / TCP 6m5s ==> v1 / Implementacija IME ŽELJENO AKTUELNO DOSTUPNO DOBA DOBRO DOBA hello-world 1 1 1 1 6m5s ==> v1 / Pod (povezano) IME SPREMNI STATUS RESTAURIRA DOB hello-world-7758b9cdf8-cs798 1/1 Trčanje 0 6m4s

8.6. Vraćanje kormilara

Uvijek se može dogoditi da je izdanje pošlo po zlu i da ga treba vratiti. Ovo je naredba za vraćanje izdanja na prethodnu verziju:

vraćanje kormila hello-world 1 Vraćanje je uspjelo! Sretan Helming!

8.7. Helm Delete

Iako je manje vjerojatno, možda ćemo htjeti potpuno izbrisati izdanje. Ovom naredbom možemo izbrisati izdanje iz Kubernetesa:

helm delete --purge hello-world izdanje "hello-world" izbrisano

Ovo su samo neke naredbe dostupne za rad s grafikonima i izdanjima u Helmu.

9. Distribucijske karte

Iako je predložak moćan alat koji Helm donosi u svijet upravljanja Kubernetesovim resursima, to nije jedina prednost korištenja Helma. Kao što smo vidjeli u prethodnom odjeljku, Helm djeluje kao upravitelj paketa za aplikaciju Kubernetes i čini instaliranje, postavljanje upita, nadogradnju i brisanje izdanja prilično besprijekornim.

Uz ovo, Helm dolazi s naredbama kao dijelom CLI-ja za pakiranje, objavljivanje i dohvaćanje Kubernetes aplikacija kao grafikona:

9.1. Paket kormila

Prvo, moramo spakirati karte koje smo stvorili da bismo ih mogli distribuirati. Ovo je naredba za stvaranje verzijskih arhivskih datoteka grafikona:

helm paket ./hello-world Uspješno spakiran grafikon i spremljen u: \ hello-world \ hello-world-0.1.0.tgz

Imajte na umu da na vašem računalu stvara arhivu koja se može distribuirati ručno ili putem javnih ili privatnih spremišta grafikona.

9.2. Helm Repo

Napokon, potreban nam je mehanizam za rad sa zajedničkim spremištima za suradnju. Repo grupira hrpu naredbi koje možemo koristiti za dodavanje, uklanjanje, popis ili indeksiranje spremišta grafikona. Pogledajmo kako ih možemo koristiti.

Možemo stvoriti git spremište i koristiti ga za funkcioniranje kao naše spremište grafikona. Jedini uvjet je da treba imati indeks.yaml datoteka.

Možemo stvarati indeks.yaml za naš repo grafikona:

indeks repo kormila my-repo / --url //.github.io/my-repo

To generira indeks.yaml datoteku, koju bismo trebali poslati u spremište zajedno s arhivima grafikona.

Nakon uspješnog stvaranja spremišta grafikona, naknadno možemo dodati ovaj repo:

helm repo dodaj my-repo //my-pages.github.io/my-repo

Sada bismo trebali moći izravno instalirati ljestvice iz našeg repo-a:

helm instalirati my-repo / hello-world --name = hello-world

Postoji dosta korisnih naredbi dostupnih za rad s spremištima grafikona.

10. Zaključak

Da rezimiramo, u ovom uputstvu raspravljali smo o ključnim komponentama Helma, upravitelja paketa za Kubernetesove aplikacije. Razumjeli smo mogućnosti instaliranja Helma. Nadalje, prošli smo kroz stvaranje uzorka grafikona i predložaka s vrijednostima.

Zatim smo prošli kroz više naredbi dostupnih kao dio Helm CLI za upravljanje aplikacijom Kubernetes kao paket Helm.

Na kraju smo razgovarali o mogućnostima distribucije Helmovih paketa kroz spremišta.