Helm és Kubernetes használatával
1. Áttekintés
A Helm a Kubernetes alkalmazások csomagkezelője. Ebben az oktatóanyagban megértjük a Helm alapjait és azt, hogy ezek miként jelentenek hatékony eszközt a Kubernetes erőforrásokkal való együttműködéshez.
Az elmúlt években a Kubernetes óriási mértékben nőtt, és az ökoszisztéma is ezt támogatta. A közelmúltban a Helmet inkubáló projektként jelentette be a Cloud Native Computing Foundation (CNCF), amely megmutatja növekvő népszerűségét a Kubernetes felhasználói körében.
2. Háttér
Bár manapság ezek a kifejezések meglehetősen elterjedtek, különösen a felhőtechnológiával foglalkozók körében, menjünk át gyorsan azokon, akik nincsenek tisztában:
- Tartály: A tároló az operációs rendszer szintű virtualizációra utal. Több tároló fut egy operációs rendszeren belül, elszigetelt felhasználói terekben. A tárolón belül futó programok csak a tárolóhoz rendelt erőforrásokhoz férhetnek hozzá.
- Dokkmunkás: A Docker egy népszerű program konténerek létrehozására és futtatására. Jön a Docker Daemon, amely a konténereket kezelő fő program. A Docker Daemon hozzáférést kínál funkcióihoz a Docker Engine API-n keresztül, amelyet a Docker Command-Line Interface (CLI) használ. A Docker részletesebb leírását ebben a cikkben találja.
- Kubernetes: A Kubernetes egy népszerű konténeres hangszerelési program. Bár úgy tervezték, hogy különböző konténerekkel működjön, a Dockert használják leggyakrabban. A szolgáltatások széles választékát kínálja, beleértve a telepítés automatizálását, méretezését és műveleteit egy gazdagépfürtön keresztül. Kivételes a Kubernetes ismertetése ebben a cikkben további hivatkozás céljából.
3. Helm építészet
A Helm meglehetősen egyszerű architektúrával rendelkezik, amely egy kliensből és egy fürtön belüli szerverből áll:
- Tiller Server: Helm a Tiller Server nevű komponensen keresztül kezeli a Kubernetes alkalmazást telepítve van egy Kubernates-fürtön belül. A Tiller együttműködik a Kubernetes API szerverrel a Kubernetes erőforrások telepítéséhez, frissítéséhez, lekérdezéséhez és eltávolításához.
- Helm kliens: A Helm parancssori felületet biztosít a felhasználók számára a Helm Charts használatához. A Helm Client felelős a Tiller szerverrel való kapcsolattartásért a különböző műveletek végrehajtása érdekében, mint például a diagramok telepítése, frissítése és visszagörgetése.
4. Helm-diagramok
Helm a diagramokon keresztül kezeli a Kubernetes erőforráscsomagokat.
Többet látunk a diagramokról, amint hamarosan elkészítjük őket, de egyelőre a diagram nem más, mint a Kubernetes-alkalmazás létrehozásához szükséges információkészlet, adott Kubernetes-fürt:
- A A diagram fájlok gyűjteménye meghatározott könyvtárstruktúrába szerveződik
- A diagramhoz tartozó konfigurációs információkat a konfiguráció kezeli
- Végül, egy diagram futó példányát egy adott konfigurációval kiadásnak nevezzük
5. Beállítás
Szükségünk lesz néhány dologra, amelyeket előzetesen fel kell állítani, hogy kidolgozzuk az első Helm-diagramunkat.
Először is, a Helm-mel való együttműködés megkezdéséhez szükségünk van egy Kubernetes-klaszterre. Ehhez az oktatóanyaghoz használjuk A Minikube, amely kiváló módot kínál az egy csomópontú Kubernetes-fürt helyi használatára. Windows rendszeren már lehetőség van a Hyper-V használatára natív Hypervisor-ként a Minikube futtatásához. Tekintse meg ezt a cikket, hogy megismerje a Minikube további beállításait.
És a Kubernetes-fürtön belüli kezeléshez szükségünk lesz egy alap alkalmazásra. Ehhez az oktatóanyaghoz egy egyszerű Spring Boot alkalmazást fogunk használni, Docker konténerként csomagolva. Az ilyen alkalmazások Docker-konténerként történő csomagolásának részletesebb leírását ebben a cikkben találja.
6. A Helm telepítése
A Helm telepítésének számos módja van, amelyeket a Helm hivatalos telepítési oldalán részletesen leírnak. A helm Windows rendszerre történő telepítésének leggyorsabb módja a Chocolaty használata, csomagkezelő a Windows platformokhoz.
A Chocolaty használatával a Helm telepítésének egyszerű egysoros parancsa van:
choco telepítse a kubernetes-helm-t
Ez a Helm klienst helyileg telepíti.
Most inicializálnunk kell a Helm CLI-t, amely a Tiller szervert is telepíti egy Kubernetes-fürtbe, amint azt a Kubernetes konfigurációja meghatározza. Kérem győződjön meg arról, hogy a Kubernetes-fürt fut és elérhető-e rajta keresztül kubectl mielőtt inicializálná Helmet:
kubectl cluster-info
Ezután inicializálhatjuk Helm-et magának a Helm CLI-nek a segítségével:
helm init
7. Első diagramunk kidolgozása
Most készen állunk az első Helm-diagram kidolgozására sablonokkal és értékekkel.
7.1. Diagram készítése
A Helm CLI, amelyet korábban telepítettünk, nagyon hasznos a diagram létrehozásában:
sisak teremt hello-world
Felhívjuk figyelmét, hogy a Az itt megadott diagram neve annak a könyvtárnak a neve lesz, ahol a diagram létrejön és tárolják.
Lássuk gyorsan a számunkra létrehozott könyvtárstruktúrát:
hello-world / Chart.yaml values.yaml templates / charts / .helmignore
Értsük meg a számunkra létrehozott fájlok és mappák relevanciáját:
- Ábra.yaml: Ez a fő fájl, amely tartalmazza a diagramunk leírását
- értékek.yaml: ez a fájl tartalmazza a diagram alapértelmezett értékeit
- sablonok: Ez az a könyvtár, ahol a Kubernetes erőforrásokat sablonként definiálják
- diagramok: Ez egy opcionális könyvtár, amely al-diagramokat tartalmazhat
- .helmignore: Itt határozhatjuk meg a csomagolásnál figyelmen kívül hagyandó mintákat (koncepció szerint hasonlóak a .gitignore-hoz)
7.2. Sablon létrehozása
Ha a sablonkönyvtárban látunk, észrevesszük néhány sablon a Kubernetes erőforrásokhoz már létrejött nekünk:
hello-world / templates / deployment.yaml service.yaml ingress.yaml ......
Szükségünk lehet ezekre és esetleg más forrásokra az alkalmazásunkban, amelyeket sablonként kell magunknak létrehoznunk.
Ehhez az oktatóanyaghoz létrehozunk egy telepítést és egy szolgáltatást, amely bemutatja a telepítést. Felhívjuk figyelmét, hogy a hangsúly itt nem a Kubernetes részletes megértése. Ezért ezeket az erőforrásokat a lehető legegyszerűbben fogjuk tartani.
Szerkesszük a fájlt telepítés.yaml benne sablonok könyvtár, hogy kinézzen:
apiVersion: apps / v1 fajta: Telepítési metaadatok: név: {{include "hello-world.fullname". }} címkék: app.kubernetes.io/name: {{tartalmazza a "hello-world.name" szót. }} helm.sh/chart: {{include "hello-world.chart". }} app.kubernetes.io/instance: {{.Release.Name}} app.kubernetes.io/managed-by: {{.Release.Service}} spec: replikák: {{.Values.replicaCount}} választó: matchLabels: app.kubernetes.io/name: {{tartalmazza a "hello-world.name" szót. }} app.kubernetes.io/instance: {{.Release.Name}} sablon: metaadatok: feliratok: app.kubernetes.io/name: {{tartalmazza a "hello-world.name" szót. }} app.kubernetes.io/instance: {{.Release.Name}} spec: tárolók: - név: {{.Chart.Name}} image: "{{.Values.image.repository}}: {{. Values.image.tag}} "imagePullPolicy: {{.Values.image.pullPolicy}} portok: - név: http containerPort: 8080 protokoll: TCP
Hasonlóképpen szerkesszük a fájlt service.yaml kinézni mint:
apiVersion: v1 fajta: Szolgáltatás metaadatai: név: {{include "hello-world.fullname". }} címkék: app.kubernetes.io/name: {{tartalmazza a "hello-world.name" szót. }} helm.sh/chart: {{include "hello-world.chart". }} app.kubernetes.io/instance: {{.Release.Name}} app.kubernetes.io/managed-by: {{.Release.Service}} spec: type: {{.Values.service.type}} portok: - port: {{.Values.service.port}} targetPort: http protokoll: TCP név: http választó: app.kubernetes.io/name: {{tartalmazza a "hello-world.name" szót. }} app.kubernetes.io/instance: {{.Release.Name}}
Most, Kubernetes ismereteink alapján, ezek a sablonfájlok néhány furcsaságot leszámítva meglehetősen ismerősek. Vegye figyelembe a szöveg liberális használatát dupla zárójelben {{}}. Ezt nevezzük sablon irányelvnek.
A Helm a Go sablon nyelvét használja, és kiterjeszti azt a Helm sablon nyelvre. Az értékelés során a sablonkönyvtárban található minden fájlt elküldik a sablonmegjelenítő motornak. A sablon irányelv a tényleges értékeket injektálja a sablonokba.
7.3. Értékek biztosítása
Az előző alfejezetben láttuk, hogyan kell használni a sablon irányelveket a sablonjainkban. Most értsük meg, hogyan adhatunk át értékeket a sablonmegjelenítő motornak. Az értékeket általában a Helm beépített objektumain keresztül adjuk át.
A Helmben számos ilyen objektum áll rendelkezésre, például kiadás, értékek, diagram és fájlok.
Használhatjuk a fájlt értékek.yaml diagramunkban átadni az értékeket a sablonmegjelenítő motornak a Beépített Objektumértékeken keresztül. Módosítsuk a értékek.yaml kinézni mint:
replicaCount: 1 image: repository: "hello-world" tag: "1.0" pullPolicy: IfNotPresent szolgáltatás: type: NodePort port: 80
Ne feledje azonban, hogy ezekhez az értékekhez hogyan jutottak hozzá a sablonok a névtereket elválasztó pontok segítségével. A képtárat és a címkét „hello-world” és „1.0” néven használtuk, ennek meg kell egyeznie a Docker képcímkével, amelyet a Spring Boot alkalmazáshoz hoztunk létre.
8. A Helm parancsok megértése
Az eddigi mindent megtéve készen állunk arra, hogy játsszon a listánkkal. Nézzük meg, melyek a Helm CLI-ben elérhető különféle parancsok, hogy ez szórakoztató legyen!
8.1. Helm Lint
Először is, ez egy egyszerű parancs, amely a diagram elérési útját követi, és tesztek segítségével futtatja a diagram megfelelő formálását:
sisak ./hello-world ==> Linting ./hello-world 1 diagram szöszös, nincs hiba
8.2 Helm sablon
Ez a parancs arra is szolgál, hogy a sablont helyileg, Tiller Server nélkül jelenítsük meg a gyors visszajelzés érdekében:
helm sablon ./hello-world --- # Forrás: hello-world / templates / service.yaml apiVersion: v1 fajta: Szolgáltatás metaadatai: név: release-name-hello-world címkék: 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: Tiller spec: type: NodePort ports: - port: 80 targetPort: http protokoll: TCP név: http választó: app.kubernetes.io/name: hello-world app.kubernetes.io/instance: release-name --- # Forrás: hello-world / templates / deployment.yaml apiVersion: apps / v1 fajta: Telepítési metaadatok: név: release-name-hello-world címkék: 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: Tiller spec: replikák: 1 választó: matchLabels: app.kubernetes.io/name: hello-world app.kubernetes.io/instance: release-name template: metaadatok: label: app.kubernetes.io/name: hello-world app.kubernetes.io/instance: release-name spec: tárolók: - na me: hello-world image: "hello-world: 1.0" imagePullPolicy: IfNotPresent portok: - név: http containerPort: 8080 protokoll: TCP
8.3. Helm Install
Miután ellenőrizzük, hogy a diagram rendben van-e, végül futtathatjuk ezt a parancsot a diagram telepítéséhez a Kubernetes fürtbe:
helm install --name hello-world ./hello-world NEVE: hello-world UTOLSÓLE GYAKORLOTT: Hétfebr. 25 15:29:59 2019 NEVEZETÉT: alapértelmezett ÁLLAPOT: ALKALMAZOTT ERŐFORRÁSOK: ==> v1 / Szolgáltatásnév TÍPUSA CLUSTER-IP KÜLSŐ -IP PORT (S) AGE hello-world NodePort 10.110.63.169 80: 30439 / TCP 1s ==> v1 / Deployment NAME KÍVÁNT AKTUÁLIS, AKTUÁLISAN ELÉRHETŐ KOR Hello-world 1 0 0 0 1s ==> v1 / Pod (kapcsolódó) NÉV KÉSZ ÁLLAPOT ÚJRAINDULÁS KOR hello-world-7758b9cdf8-cs798 0/1 Függőben 0 0
Végül vegye figyelembe, hogy ennek a diagramnak a kiadását a flag névvel neveztük el. A parancs a folyamat során létrehozott Kubernetes-erőforrások összefoglalásával válaszol.
8.4. Helm Get
Most azt szeretnénk megtudni, hogy melyik diagram milyen verzióként van telepítve. Ez a parancs lehetővé teszi, hogy lekérdezzük a megnevezett kiadásokat:
helm ls - minden NÉVREVISZIONÁLIS FRISSÍTETT ÁLLAPOTTábla APP VERZIÓ NÉVTÉR hello-world 1. hétf. 25, 15:29:59 2019 DEPLOYED Hello-world-0.1.0 1.0
8.5. Helm Upgrade
Mi van, ha módosítottuk diagramunkat, és telepítenünk kell a frissített verziót? Ez a parancs segít a kiadás frissítésében a diagram vagy a konfiguráció meghatározott vagy aktuális verziójára:
helm upgrade hello-world ./hello-world A "hello-world" kiadás frissítésre került. Boldog Helming! UTOLSÓBB FELHASZNÁLVA: Hétfebr. 25, 15:36:04, 2019 NÉMETÉR: alapértelmezett ÁLLAPOT: ALKALMAZOTT ERŐFORRÁSOK: ==> v1 / Szolgáltatásnév TÍPUSA CLUSTER-IP KÜLSŐ-IP PORT (S) AGE hello-world NodePort 10.110.63.169 80: 30439 / TCP 6m5s ==> v1 / Telepítés NÉVE KÍVÁNT AKTUÁLIS, AKTUÁLISAN ELÉRHETŐ KOR Hello-world 1 1 1 1 6m5s ==> v1 / Pod (kapcsolódó) NÉV KÉSZ ÁLLAPOT ÚJRAINDÍTÁS AGE hello-world-7758b9cdf8-cs798 1/1 0 6m4s futása
8.6. Helm Visszahúzás
Mindig előfordulhat, hogy egy kiadás rosszul esett, és vissza kell venni. Ez a parancs a kiadás visszaállításához az előző verzióhoz:
helm rollback hello-world 1 A rollback sikeres volt! Boldog Helming!
8.7. Helm Törlés
Bár kevésbé valószínű, mégis teljesen törölni szeretnénk egy kiadást. Ezzel a paranccsal törölhetünk egy kiadást a Kubernetesből:
sisak törlése - purgom hello-world kiadás "hello-world" törölve
Ez csak néhány olyan parancs, amely a Helm-ben található diagramokkal és kiadásokkal használható.
9. Diagramok terjesztése
Míg a sablonok hatékony eszköz, amelyet Helm a Kubernetes erőforrások kezelésének világába hoz, a Helm használatának nem ez az egyetlen előnye. Ahogy az előző szakaszban láttuk, Helm csomagkezelőként működik a Kubernetes alkalmazásban, és a kiadások telepítését, lekérdezését, frissítését és törlését meglehetősen zökkenőmentessé teszi.
Ezen túlmenően, A Helm parancsai a CLI részeként érkeznek a Kubernetes alkalmazások diagramokba csomagolásához, közzétételéhez és letöltéséhez:
9.1. Helm csomag
Először is össze kell csomagolnunk az általunk létrehozott diagramokat, hogy terjesszük őket. Ez a parancs a diagram verziózott archív fájljainak létrehozására:
sisakcsomag ./hello-world Sikeresen bepakolta a diagramot és elmentette a következőbe: \ hello-world \ hello-world-0.1.0.tgz
Ne feledje, hogy archívumot készít a gépén, amelyet manuálisan, vagy nyilvános vagy privát diagramtárakon keresztül terjeszthet.
9.2. Helm Repo
Végül szükségünk van egy mechanizmusra, amely a közös tárakkal való együttműködésre képes. A Repo egy csomó parancsot tartalmaz, amelyek segítségével diagramtárakat adhatunk hozzá, távolíthatunk el, listázhatunk vagy indexelhetünk. Lássuk, hogyan tudjuk felhasználni őket.
Létrehozhatunk egy git-adattárat, és ezt használhatjuk diagram-tárunkként. Az egyetlen követelmény az, hogy legyen index.yaml fájl.
Alkothatunk index.yaml a listarepónkhoz:
helm repo index my-repo / --url //.github.io/my-repo
Ez generálja a index.yaml fájlt, amelyet a diagramarchívummal együtt a lerakatba kell tolnunk.
Miután sikeresen létrehozta a diagramtárat, ezt követően távolról hozzáadhatjuk ezt a repót:
helm repo add my-repo //my-pages.github.io/my-repo
Most képesnek kell lennünk a diagramok közvetlen telepítésére a repóból:
helm install my-repo / hello-world --name = hello-world
Elég sok segédparancs áll rendelkezésre a diagramtárakkal való együttműködésre.
10. Következtetés
Összefoglalva, ebben az oktatóanyagban megvitattuk a Helm, a Kubernetes alkalmazások csomagkezelőjének fő összetevőit. Megértettük a Helm telepítésének lehetőségeit. Ezenkívül áttekintettünk egy minta diagramot és sablonokat értékekkel.
Ezután a Helm CLI részeként elérhető több parancsot is átéltük, hogy kezeljük a Kubernetes alkalmazást Helm csomagként.
Végül megvitattuk a Helm csomagok adattárak útján történő terjesztésének lehetőségeit.