Introduksjon til Helm 3

Introduksjon til Helm 3

Obs. overs.: 16. mai i Ă„r markerer en betydningsfull milepĂŠl i utviklingen av pakkeadministratoren for Kubernetes – Helm. Denne dagen ble den fĂžrste alpha-utgaven av den kommende stĂžrre versjonen av prosjektet – 3.0 – presentert. Utgivelsen vil bringe betydelige og etterlengtede endringer til Helm, som mange i Kubernetes-samfunnet har store forventninger til. Vi er blant dem, siden vi aktivt bruker Helm for deploying av applikasjoner: vi har integrert den i vĂ„rt verktĂžy for implementering av CI/CD. werf og fra tid til annen bidrar vi til utviklingen av upstream. Denne oversettelsen samler 7 notater fra den offisielle bloggen til Helm, som er knyttet til den fĂžrste alpha-utgaven av Helm 3 og forteller historien om prosjektet og de viktigste funksjonene i Helm 3. Forfatteren er Matt "bacongobbler" Fisher, ansatt i Microsoft og en av de sentrale vedlikeholderne av Helm.

15. oktober 2015 ble prosjektet, nĂ„ kjent som Helm, fĂždt. Bare ett Ă„r etter grunnleggelsen ble Helm-samfunnet med i Kubernetes, samtidig som de aktivt jobbet med Helm 2. I juni 2018 ble Helm en del av CNCF som et utviklende (incubating) prosjekt. La oss gĂ„ til nĂ„tiden – og nĂ„ nĂŠrmer den fĂžrste alpha-utgaven av nye Helm 3 seg. (denne utgivelsen fant allerede sted i midten av mai – overs. anm.).

I dette materialet vil jeg fortelle om hvordan alt begynte, hvordan vi kom hit, presentere noen unike funksjoner som er tilgjengelige i den fĂžrste alpha-utgaven av Helm 3, og forklare hvordan vi planlegger Ă„ utvikle oss videre.

Sammendrag:

  • historien om opprettelsen av Helm;
  • et forsiktig farvel til Tiller;
  • chart-repositorier;
  • forvaltning av utgivelser;
  • endringer i chart-avhengigheter;
  • library charts;
  • hva nĂ„?

Historien om opprettelsen av Helm

FĂždselen

Helm 1 begynte som et Äpen kildekode-prosjekt, skapt av firmaet Deis. Vi var et lite oppstartsselskap, som ble oppkjÞpt av Microsoft vÄren 2017. VÄrt andre Äpne kildekode-prosjekt, ogsÄ kalt Deis, hadde et verktÞy deisctl, som ble brukt (blant annet) for Ä installere og drifte Deis-plattformen i Fleet-klyngen.PÄ den tiden var Fleet en av de fÞrste plattformene for orkestrering av containere.

I midten av 2015 besluttet vi Ä endre kurs og migrere Deis (som da hadde fÄtt navnet Deis Workflow) fra Fleet til Kubernetes. En av de fÞrste tingene som ble omarbeidet, var verktÞyet for installasjon. deisctlVi brukte det til Ä installere og forvalte Deis Workflow i Fleet-klyngen.

Helm 1 ble utviklet med inspirasjon fra kjente pakkebehandlere som Homebrew, apt og yum. Hovedoppgaven var Ă„ forenkle oppgaver som pakking og installering av applikasjoner i Kubernetes. Helm ble offisielt lansert i 2015 under KubeCon-konferansen i San Francisco.

VÄr fÞrste forsÞk med Helm ga resultater, men det kom med betydelige begrensninger. Den tok en samling Kubernetes-manifester, beriket med generatorer som innledende YAML-blokker, (front-matter)*, og lastet resultatene inn i Kubernetes.

* Obs. overs.: Framsiden av Helm 1 valgte YAML-syntaks for Ä beskrive Kubernetes-ressurser, og ved konfigurasjonsskriving ble Jinja-maler og Python-skript stÞttet. Mer om dette og strukturen til Helm 1 generelt diskutert i kapitlet «Kort historie om Helm» dette materialet.

For eksempel, for Ä erstatte et felt i en YAML-fil, mÄtte man legge til fÞlgende konstruksjon i manifestet:

#helm:generate sed -i -e s|ubuntu-debootstrap|fluffy-bunny| my/pod.yaml

Det er fantastisk at vi i dag har malere, ikke sant?

Av mange grunner krevde denne tidlige Kubernetes-installasjonen en hardkodet liste med manifestfiler og utfĂžrte bare en liten fast sekvens av hendelser. Det var sĂ„ vanskelig Ă„ bruke at R&D-teamet til Deis Workflow hadde det tĂžft nĂ„r de forsĂžkte Ă„ portere produktet sitt til denne plattformen — men frĂžene til ideen var allerede sĂ„dd. VĂ„r fĂžrste forsĂžk ga en flott lĂŠringsmulighet: vi innsĂ„ at vi virkelig er lidenskapelige for Ă„ lage pragmatiske verktĂžy som lĂžser hverdagsproblemer for brukerne vĂ„re.

Basert pÄ erfaringene fra tidligere feil, begynte vi Ä utvikle Helm 2.

Utvikling av Helm 2

PÄ slutten av 2015 kontaktet Googles team oss. De jobbet med et lignende verktÞy for Kubernetes. Deployment Manager for Kubernetes var en portering av et eksisterende verktÞy som ble brukt for Google Cloud Platform. «Vil vi bruke noen dager pÄ Ä diskutere likhetene og forskjellene?» spurte de.

I januar 2016 mĂžttes Helm- og Deployment Manager-teamene i Seattle for Ă„ dele ideer. Forhandlingene resulterte i en ambisiĂžs plan: Ă„ kombinere de to prosjektene for Ă„ lage Helm 2. Sammen med Deis og Google ble gutta fra SkippBox (nĂ„ en del av Bitnami — overs. anm.), og vi begynte arbeidet med Helm 2.

Vi Ăžnsket Ă„ bevare brukervennligheten i Helm, men legge til fĂžlgende:

  • chart-maler for tilpasning;
  • intra-klyngeadministrasjon for team;
  • fĂžrsteklasses chart-repositorium;
  • et stabilt pakkeforum med signeringsmuligheter;
  • et solid engasjement for semantisk versjonering og opprettholdelse av bakoverkompatibilitet mellom versjoner.

For Ä oppnÄ disse mÄlene ble et andre element lagt til Helm-Þkosystemet. Denne intra-klyngekomponenten ble kalt Tiller og hadde ansvar for installering og administrasjon av Helm-charts.

Siden lanseringen av Helm 2 i 2016 har Kubernetes fĂ„tt flere betydelige nyvinninger. Det ble innfĂžrt rollebasert tilgangskontroll (RBAC), som til slutt erstattet attributtbasert tilgangskontroll (ABAC). Nye ressurs typer ble introdusert (Deployments var fremdeles i beta-delen pĂ„ den tiden). Det ble erfart om Custom Resource Definitions (opprinnelig kalt Third Party Resources eller TPRs). Og viktigst av alt — et sett med beste praksis ble utviklet.

I lys av alle disse endringene fortsatte Helm Ä vÊre en pÄlitelig tjeneste for Kubernetes-brukere. Etter tre Är og mange nye tillegg ble det klart at det var pÄ tide med betydelige endringer i kodebasen for at Helm fortsatt skulle kunne oppfylle de voksende behovene til det utviklende Þkosystemet.

Et mildt farvel til Tiller

Under utviklingen av Helm 2 introduserte vi Tiller som en del av integrasjonen vÄr med Deployment Manager fra Google. Tiller spilte en viktig rolle for team som arbeidet i en delt klynge: det gjorde det mulig for ulike spesialister som drev infrastrukturen Ä samhandle med det samme settet av utgivelser.

Siden kontrollen for tilgang basert pÄ roller (RBAC) ble aktivert som standard i Kubernetes 1.6, ble arbeidet med Tiller i produksjon mer komplisert. PÄ grunn av det enorme antallet mulige sikkerhetspolitikk var vÄr posisjon Ä tilby en tillatelseskonfigurasjon som standard. Dette gjorde det mulig for nybegynnere Ä eksperimentere med Helm og Kubernetes uten Ä mÄtte gÄ inn i sikkerhetsinnstillingene fÞrst. Dessverre kunne denne tillatelseskonfigurasjonen gi brukeren for mye tilgang de ikke trengte. DevOps- og SRE-ingeniÞrer mÄtte lÊre seg ekstra driftstrinn nÄr de installerte Tiller i en flerbruker-klynge.

Da vi lÊrte hvordan medlemmer av fellesskapet bruker Helm i spesifikke situasjoner, innsÄ vi at systemet for hÄndtering av utgivelser, Tiller, ikke trengte Ä stole pÄ en intern klyngekomponent for Ä opprettholde tilstander eller fungere som et sentralt knutepunkt med informasjon om utgivelser. I stedet kunne vi bare hente informasjon fra Kubernetes API-server, generere chart pÄ klientsiden og lagre installasjonsoppfÞring i Kubernetes.

Den primÊre oppgaven til Tiller kunne ogsÄ utfÞres uten Tiller, sÄ en av vÄre fÞrste beslutninger angÄende Helm 3 var Ä fullstendig fjerne Tiller.

Med fjerningen av Tiller har Helm sin sikkerhetsmodell blitt radikalt forenklet. Helm 3 stÞtter nÄ alle moderne metoder for sikkerhet, identifikasjon og autorisasjon i dagens Kubernetes. Tillatelser i Helm bestemmes ved hjelp av kubeconfig-filen.Klyngens administratorer kan begrense brukernes rettigheter med hvilken som helst grad av detaljer. Utgivelser lagres fortsatt inne i klyngen, og resten av Helm-funksjonaliteten er bevart.

Chart-repositorier

PÄ et hÞyt nivÄ er et chart-repository et sted for lagring og deling av charts. Helm-klienten pakker og sender charts til repositoriet. Enkelt sagt, et chart-repository er en primitiv HTTP-server med en index.yaml-fil og noen pakket charts.

Selv om det er noen fordeler med at API-et til chart-repositoriet mÞter de mest grunnleggende kravene til lagring, har det ogsÄ noen ulemper:

  • Chart-repositorier er dĂ„rlig kompatible med de fleste sikkerhetsimplementasjoner som er nĂždvendige i produksjonsmiljĂžer. TilstedevĂŠrelsen av et standard API for autentisering og autorisasjon er avgjĂžrende i produksjonsscenarier.
  • Helm-verktĂžyene for sporing av opprinnelse av charts, brukt for signering, integritetskontroll og opprinnelse av charts, er en valgfri del av Chart-publiseringsprosessen.
  • I flerbrukerscenarier kan det samme chart lastes opp av en annen bruker, noe som dobler plassen som kreves for lagring av det samme innholdet. For Ă„ lĂžse dette problemet har smartere repositorier blitt utviklet, men de er ikke en del av den formelle spesifikasjonen.
  • Bruken av en enkelt indeksfil for Ă„ sĂžke, lagre metadata og hente charts har komplisert utviklingen av sikre flerbruksimplementasjoner.

Prosjekt Docker Distribution (ogsÄ kjent som Docker Registry v2) er etterfÞlgeren til Docker Registry og fungerer faktisk som et verktÞysett for Ä pakke, sende, lagre og distribuere Docker-bilder. Mange store skytjenester tilbyr produkter basert pÄ Distribution. Takket vÊre denne Þkte oppmerksomheten har Distribution-prosjektet dratt nytte av mange Ärs forbedringer, beste praksis innen sikkerhet og testing i "kamp"-miljÞer, noe som har gjort det til en av de mest suksessrike usungne heltene i Open Source-verdenen.

Men visste du at Distribution-prosjektet ble utviklet for Ă„ distribuere enhver form for innhold, ikke bare containere?

Takket vÊre innsatsen til Open Container Initiative (eller OCI) kan Helm-charts plasseres pÄ enhver instans av Distribution. SÄ langt er denne prosessen eksperimentell. Arbeidet med Ä stÞtte pÄlogging og andre funksjoner som er nÞdvendig for en fullverdig Helm 3, er fortsatt ikke avsluttet, men vi er veldig glade for muligheten til Ä lÊre av oppdagelsene gjort av OCI- og Distribution-teamene i Ärenes lÞp. Og takket vÊre deres veiledning lÊrer vi hva det vil si Ä drifte en hÞyt tilgjengelig tjeneste i stor skala.

En mer detaljert beskrivelse av noen kommende endringer i Helm-chart-repositoriene er tilgjengelig via lenken.

Utgivelsesadministrasjon

I Helm 3 spores applikasjonsstatus innen klyngen av et par objekter:

  • release object — representerer en instans av applikasjonen;
  • release version secret — representerer Ăžnsket tilstand av applikasjonen pĂ„ et bestemt tidspunkt (for eksempel utgivelsen av en ny versjon).

Kall helm install oppretter release object og release version secret. Kall helm upgrade krever eksistensen av release object (som den kan endre) og oppretter en ny release version secret som inneholder nye verdier og en forberedt manifest.

Release object inneholder informasjon om utgivelsen, hvor utgivelsen er en spesifikk installasjon av en navngitt chart og verdier. Dette objektet beskriver metadata pĂ„ toppnivĂ„ om utgivelsen. Release object beholdes gjennom hele livssyklusen til applikasjonen og fungerer som eier av alle release version secret’er, samt alle objekter som direkte opprettes av Helm-chartet.

Release version secret binder utgivelsen til en serie revisjoner (installasjon, oppdateringer, tilbaketrekning, sletting).

I Helm 2 var revisjoner utelukkende sekvensielle. Kall helm install opprettet v1, etterfĂžlgende oppdatering (upgrade) — v2, og sĂ„ videre. Release og release version secret ble slĂ„tt sammen til ett enkelt objekt kjent som revisjon. Revisjoner ble lagret i det samme navnerommet som Tiller, noe som betydde at hver utgivelse var "global" med hensyn til navnerom; som et resultat kunne det bare brukes Ă©n instans av navnet.

I Helm 3 er hver utgivelse knyttet til en eller flere release version secret’er. Release object beskriver alltid den gjeldende utgivelsen, distribuerte i Kubernetes. Hver release version secret beskriver bare Ă©n versjon av denne utgivelsen. En oppdatering (upgrade) vil for eksempel opprette en ny release version secret og deretter endre release object slik at det peker pĂ„ denne nye versjonen. Ved tilbaketrekning (rollback) kan tidligere release version secret’er brukes til Ă„ rulle utgivelsen tilbake til en tidligere tilstand.

Etter avviklingen av Tiller lagrer Helm 3 utgivelsesdataene i det samme navnerommet som utgivelsen. Denne endringen tillater installasjon av en chart med samme utgivelsesnavn i et annet navnerom, og dataene beholdes mellom oppdateringer/restarts av klyngen i etcd. For eksempel kan WordPress installeres i navnerommet "foo", og deretter i navnerommet "bar", og begge utgivelsene kan hete "wordpress".

Endringer i chart-avhengigheter

Charts pakket (ved hjelp av helm package) for use with Helm 2, it can be installed with Helm 3, however, the chart development workflow has been completely revised, so some adjustments are necessary to continue chart development with Helm 3. In particular, the chart dependency management system has changed.

The chart dependency management system has transitioned from requirements.yaml og requirements.lock En funksjon har blitt Chart.yaml og Chart.lock. This means that the charts that used the command helm dependency, require some configuration to work in Helm 3.

Let's look at an example. We'll add a dependency to a chart in Helm 2 and see what changes when transitioning to Helm 3.

In Helm 2 requirements.yaml it looked like this:

dependencies:
- name: mariadb
  version: 5.x.x
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: mariadb.enabled
  tags:
    - database

In Helm 3, the same dependency will be reflected in your Chart.yaml:

dependencies:
- name: mariadb
  version: 5.x.x
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: mariadb.enabled
  tags:
    - database

Charts are still loaded and placed in the directory charts/, so the subcharts (subcharts), located in the directory charts/, will continue to work unchanged.

Introducing Library Charts

Helm 3 supports a class of charts called library charts (library chart). This chart is used by other charts but does not create any release artifacts on its own. Library chart templates can only declare elements define. Any other content is simply ignored. This allows users to reuse and share code snippets that can be utilized across many charts, thereby avoiding duplication and adhering to the principle of DRY.

Library charts are declared in the section avhengigheter in the file Chart.yaml. Installing and managing them is not different from other charts.

dependencies:
  - name: mylib
    version: 1.x.x
    repository: quay.io

We eagerly anticipate the use cases that this component will unlock for chart developers, as well as the best practices that may arise thanks to library charts.

Hva skjer videre?

Helm 3.0.0-alpha.1 is the foundation upon which we begin to build a new version of Helm. In this article, I've outlined some interesting features of Helm 3. Many of them are still in the early stages of development, and that's okay; the essence of an alpha release is to test the idea, gather feedback from early users, and validate our assumptions.

Once the alpha version is released (let's remember that this has already happened – obs. overs.), vi begynner Ă„ akseptere patches for Helm 3 fra fellesskapet. Det er nĂždvendig Ă„ skape et solid grunnlag som tillater utvikling og aksept av nye funksjoner, samtidig som brukerne kan fĂžle seg involvert i prosessen ved Ă„ Ă„pne billetter og bidra med rettelser.

I artikkelen har jeg forsÞkt Ä belyse noen betydelige forbedringer som vil komme i Helm 3, men denne listen kan absolutt ikke kalles uttÞmmende. Den omfattende planen for Helm 3 inkluderer nyvinninger som forbedrede oppdateringsstrategier, dypere integrasjon med OCI-registere og bruk av JSON-skjemaer for validering av chart-verdier. Vi planlegger ogsÄ Ä rydde opp i kodebasen og oppdatere de delene som har vÊrt neglisjert de siste tre Ärene.

Hvis du mener vi har oversett noe, vil vi gjerne hĂžre tankene dine!

Bli med i diskusjonen i vÄre Slack-kanaler:

  • #helm-users for spĂžrsmĂ„l og generell kommunikasjon med fellesskapet;
  • #helm-dev for diskusjon av pull requests, kode og feil.

Du kan ogsÄ chatte i vÄre ukentlige Public Developer Calls pÄ torsdager kl 19:30 MSK. MÞtene er viet til diskusjon av oppgaver som nÞkkelutviklere og fellesskapet jobber med, samt ukens diskusjonstemaer. Alle er velkomne til Ä delta pÄ mÞtet. Lenken er tilgjengelig i Slack-kanalen #helm-dev.

P.S. from the translator

Also read in our blog:

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster