Introduktion till Helm 3

Introduktion till Helm 3

Obs. övers.: Den 16 maj i Är markerar en betydande milstolpe i utvecklingen av paketchefer för Kubernetes - Helm. PÄ denna dag presenterades den första alfa-versionen av det kommande stora projektet - 3.0. Utgivningen kommer att medföra betydande och efterlÀngtade förÀndringar i Helm, som mÄnga inom Kubernetes-gemenskapen har stora förhoppningar pÄ. Vi sjÀlva rÀknas till dessa, eftersom vi aktivt anvÀnder Helm för distribution av applikationer: vi har integrerat det i vÄrt verktyg för att genomföra CI/CD. werf och frÄn fall till fall bidrar vi med vÄrt strÄ till stacken i utvecklingen av upstream. Denna översÀttning sammanfattar 7 anteckningar frÄn Helm's officiella blogg, som Àr kopplade till den första alfa-versionen av Helm 3 och berÀttar om projektets historia och de viktigaste funktionerna i Helm 3. Författaren Àr Matt "bacongobbler" Fisher, anstÀlld pÄ Microsoft och en av de centrala underhÄllarna av Helm.

Den 15 oktober 2015 föddes projektet som idag Ă€r kĂ€nt som Helm. Bara ett Ă„r efter grundandet gick Helm-gemenskapen med i Kubernetes och arbetade aktivt med Helm 2. I juni 2018 blev Helm en del av CNCF som ett utvecklande (incubating) projekt. LĂ„t oss hoppa till nutiden – och nu Ă€r den första alfa-versionen av nya Helm 3 pĂ„ vĂ€g. (denna version har redan slĂ€ppts i mitten av maj – red. anm.).

I detta material kommer jag att berÀtta om hur allt började, hur vi kom till den nuvarande fasen, presentera nÄgra unika funktioner som Àr tillgÀngliga i den första alfa-versionen av Helm 3, och förklara hur vi planerar att utvecklas vidare.

Sammanfattning:

  • historien om skapandet av Helm;
  • ett ömt avsked till Tiller;
  • chart-repositorier;
  • hantering av utgĂ„vor;
  • Ă€ndringar i chart-beroenden;
  • bibliotekscharts;
  • vad gör du sedan?

Historien om skapandet av Helm

Födslen

Helm 1 började som ett Open Source-projekt, skapat av företaget Deis. Vi var en liten startup, uppköpt av Microsoft vÄren 2017. VÄrt andra Open Source-projekt, ocksÄ kallat Deis, hade ett verktyg deisctl, som anvÀndes (bland annat) för att installera och driva plattformen Deis i Fleet-klustret.. Vid den tiden var Fleet en av de första plattformarna för orkestrering av containrar.

I mitten av 2015 beslutade vi att byta kurs och flyttade Deis (vid den tiden omdöpt till Deis Workflow) frÄn Fleet till Kubernetes. Som en av de första omarbetades installationsverktyget, deisctl. Vi anvÀnde det för installation och hantering av Deis Workflow i Fleet-klustret.

Helm 1 skapades med inspiration frÄn kÀnda paketförvaltare som Homebrew, apt och yum. Dess huvudsyfte var att förenkla uppgifter som paketering och installation av applikationer i Kubernetes. Helm presenterades officiellt 2015 pÄ KubeCon-konferensen i San Francisco.

VÄrt första försök med Helm fungerade, men det var inte utan allvarliga begrÀnsningar. Det tog en uppsÀttning Kubernetes-manifest som kryddades av generatorer som indata YAML-block. (front-matter)*, och laddade resultaten till Kubernetes.

* Obs. övers.: FrÄn och med den första versionen av Helm valdes YAML-syntax för att beskriva Kubernetes-resurser, och vid skrivning av konfigurationer stödde man Jinja-mallar och Python-skript. Mer om detta och hur den första versionen av Helm fungerade skrev vi i kapitlet "En kort historia om Helm" detta material.

Till exempel, för att ersÀtta ett fÀlt i YAML-filen behövde man lÀgga till följande konstruktion i manifestet:

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

Det Àr fantastiskt att det idag finns mallmakare, eller hur?

Av mĂ„nga skĂ€l krĂ€vde denna tidiga Kubernetes-installatör en fast lista med manifestfiler och utförde endast en liten fast sekvens av hĂ€ndelser. Att anvĂ€nda den var sĂ„ svĂ„rt att Deis Workflows FoU-team hade det tufft nĂ€r de försökte migrera sin produkt till denna plattform — men idĂ©erna hade redan sĂ„tts. VĂ„rt första försök blev en utmĂ€rkt möjlighet för lĂ€rande: vi insĂ„g att vi verkligen brinner för att skapa pragmatiska verktyg som löser vardagliga problem för vĂ„ra anvĂ€ndare.

Med erfarenheten av tidigare misstag började vi utveckla Helm 2.

Skapandet av Helm 2

I slutet av 2015 kontaktade Google-teamet oss. De arbetade med ett liknande verktyg för Kubernetes. Deployment Manager för Kubernetes var en portering av ett befintligt verktyg som anvÀndes för Google Cloud Platform. "Vill vi inte," frÄgade de, "slösa nÄgra dagar pÄ att diskutera likheterna och skillnaderna?"

I januari 2016 trĂ€ffades teamen för Helm och Deployment Manager i Seattle för att utbyta idĂ©er. Förhandlingarna avslutades med en ambitiös plan: att kombinera bĂ„da projekten för att skapa Helm 2. Tillsammans med Deis och Google anslöt sig killarna frĂ„n SkippBox (numera en del av Bitnami — anm. övers.), och vi började arbetet med Helm 2.

Vi ville behÄlla enkelheten i Helm, men lÀgga till följande:

  • mallar för anpassning av diagram;
  • intra-cluster administration för team;
  • förstklassigt diagramarkiv;
  • stabilt paketformat med signeringsmöjlighet;
  • ett fast Ă„tagande till semantisk versionering och bevarande av bakĂ„tkompatibilitet mellan versioner.

För att uppnÄ dessa mÄl lades en andra komponent till Helm-ekosystemet. Denna intra-cluster komponent kallades Tiller och hanterade installation och administration av Helm-diagram.

Sedan Helm 2 lanserades 2016 har Kubernetes fĂ„tt flera betydande nyheter. Rollen baserad Ă„tkomstkontroll (RBAC), som slutligen ersatte attributbaserad Ă„tkomstkontroll (ABAC). Nya typer av resurser presenterades (Deployments var fortfarande i beta-status). Custom Resource Definitions uppfanns (ursprungligen kallades de Third Party Resources eller TPRs). Och viktigast av allt – en uppsĂ€ttning bĂ€sta praxis introducerades.

Mot bakgrund av alla dessa förÀndringar fortsatte Helm att tjÀna Kubernetes-anvÀndare troget. Efter tre Är och mÄnga nya tillÀgg blev det tydligt att det var dags att göra betydande förÀndringar i kodbasen sÄ att Helm fortsatt kunde möta de vÀxande behoven hos den utvecklande ekosystemet.

Ett ömt avsked frÄn Tiller

Under utvecklingen av Helm 2 introducerade vi Tiller som en del av vÄr integration med Google's Deployment Manager. Tiller spelade en viktig roll för team som arbetade inom en delad kluster: den tillÀt olika specialister som driftsatte infrastrukturen att interagera med samma uppsÀttning releaser.

Eftersom rollbaserad Ätkomstkontroll (RBAC) var aktiverad som standard i Kubernetes 1.6, blev det svÄrare att arbeta med Tiller i produktion. PÄ grund av det stora antalet möjliga sÀkerhetspolicyer var vÄr position att erbjuda en tillÄtande konfiguration som standard. Detta gjorde det möjligt för nykomlingar att experimentera med Helm och Kubernetes utan att först behöva dyka ner i sÀkerhetsinstÀllningarna. TyvÀrr kunde denna tillÄtande konfiguration ge anvÀndaren ett för stort spann av behörigheter som de inte behövde. DevOps- och SRE-ingenjörer mÄste lÀra sig ytterligare driftsÀttningssteg nÀr de installerade Tiller i en flermedarbetarkluster.

Genom att lÀra oss hur communityrepresentanter anvÀnder Helm i specifika situationer insÄg vi att Tiller-releasesystemet inte behövde förlita sig pÄ en inre klusterkomponent för att upprÀtthÄlla tillstÄnd eller fungera som en central hubb för releaseinformation. IstÀllet skulle vi kunna fÄ information direkt frÄn Kubernetes API-server, generera chart pÄ klientsidan och spara installationsposten i Kubernetes.

Tiller’s huvuduppgift kunde genomföras utan Tiller, sĂ„ en av vĂ„ra första lösningar betrĂ€ffande Helm 3 var att helt avskaffa Tiller.

Med Tiller borta har Helm:s sÀkerhetsmodell radikalt förenklats. Helm 3 stöder nu alla moderna metoder för sÀkerhet, autentisering och auktorisering inom den nuvarande Kubernetes. Helm-behörigheter definieras med hjÀlp av kubeconfig-filen. Klusteradministratörer kan begrÀnsa anvÀndarbehörigheter med valfri detaljgrad. Releases lagras fortfarande inom klustret, och Helm:s övriga funktionalitet bevaras.

Chartrepositorier

PÄ en övergripande nivÄ Àr ett chartrepository en plats dÀr man kan lagra och dela charts. Helm-klienten paketerar och skickar charts till repositoryt. Enkelt uttryckt Àr ett chartrepository en primitiv HTTP-server med en index.yaml-fil och nÄgra paketerade charts.

Även om det finns vissa fördelar med att chartrepositoryts API uppfyller de mest grundlĂ€ggande kraven pĂ„ lagring, finns det ocksĂ„ nĂ„gra nackdelar:

  • Chart-repositorier Ă€r dĂ„ligt kompatibla med de flesta sĂ€kerhetsimplementeringar som krĂ€vs i produktionsmiljöer. Att ha ett standard-API för autentisering och auktorisering Ă€r avgörande i produktionsscenarier.
  • Helm-verktygen för att spĂ„ra ursprunget till chartet, som anvĂ€nds för signering, integritetskontroll och ursprung av chartet, Ă€r en valfri del av publiceringsprocessen för chartet.
  • I fleranvĂ€ndarscenarier kan samma chart laddas upp av en annan anvĂ€ndare, vilket fördubblar lagringsutrymmet som krĂ€vs för samma innehĂ„ll. För att hantera detta problem har smartare repository-lösningar utvecklats, men de Ă€r inte en del av den formella specifikationen.
  • AnvĂ€ndningen av en enda indexfil för att söka, lagra metadata och hĂ€mta charts har försvĂ„rat utvecklingen av sĂ€kra fleranvĂ€ndartillĂ€mpningar.

Projektet Docker Distribution (Àven kÀnd som Docker Registry v2) Àr eftertrÀdaren till Docker Registry och fungerar faktiskt som en uppsÀttning verktyg för att paketera, skicka, lagra och leverera Docker-bilder. MÄnga stora molntjÀnster erbjuder produkter baserade pÄ Distribution. PÄ grund av en ökad uppmÀrksamhet har projektet Distribution gynnats av flera Ärs förbÀttringar, bÀsta sÀkerhetspraxis och tester i 'skarp' miljö, vilket har gjort det till en av de mest framgÄngsrika osjungna hjÀltarna inom Open Source.

Men visste du att projektet Distribution utvecklades för att distribuera alla former av innehÄll, inte bara containerbilder?

Tack vare anstrĂ€ngningarna Open Container Initiative (eller OCI), kan Helm-charts placeras pĂ„ vilken Distribution-instans som helst. Även om denna process fortfarande Ă€r experimentell. Arbetet med att stödja inloggningar och andra funktioner som krĂ€vs för att Helm 3 ska fungera ordentligt Ă€r fortfarande inte avslutat, men vi Ă€r mycket glada över att kunna lĂ€ra oss av de insikter som OCI och Distribution-team har gjort under Ă„ren. Med deras mentorskap och vĂ€gledning lĂ€r vi oss hur man driver en högav tillgĂ€nglig tjĂ€nst i stor skala.

En mer detaljerad beskrivning av nÄgra kommande förÀndringar i Helm-charts repositoryn finns tillgÀnglig. via lÀnken.

Releasehantering

I Helm 3 spÄras applikationens tillstÄnd inom kluster av ett par objekt:

  • release object — representerar en instans av applikationen;
  • release version secret — representerar det önskade tillstĂ„ndet av applikationen vid en specifik tidpunkt (t.ex. lansering av en ny version).

Anrop helm install skapar release object och release version secret. Anropet helm upgrade krÀver att det finns ett release object (som det kan Àndra) och skapar en ny release version secret som innehÄller nya vÀrden och en förberedd manifest.

Release object innehÄller information om releasen, dÀr releasen Àr en specifik installation av det namngivna chartet och dess vÀrden. Detta objekt beskriver metadatainformation pÄ hög nivÄ om releasen. Release object sparas under hela applikationens livscykel och fungerar som Àgare av alla release version secrets samt alla objekt som direkt skapas av Helm-charten.

Release version secret kopplar releasen till en serie revisioner (installationer, uppdateringar, ÄterstÀllningar, borttagningar).

I Helm 2 var revisioner helt och hĂ„llet sekventiella. Anropet helm install skapade v1, nĂ€sta uppdatering (upgrade) — v2, och sĂ„ vidare. Release och release version secret sammanfogades till ett enda objekt, kĂ€nt som revision. Revisioner sparades i samma namnrymd som Tiller, vilket innebar att varje release var "global" i termer av namnrymd; följaktligen kunde endast en instans av namnet anvĂ€ndas.

I Helm 3 Àr varje release kopplad till en eller flera release version secrets. Release object beskriver alltid den aktuella releasen som Àr distribuerad i Kubernetes. Varje release version secret beskriver endast en version av denna release. En uppdatering (upgrade) skapar till exempel en ny release version secret och Àndrar sedan release object sÄ att det pekar pÄ denna nya version. Vid en ÄterstÀllning (rollback) kan tidigare release version secrets anvÀndas för att ÄterstÀlla releasen till sitt tidigare tillstÄnd.

Efter avskaffandet av Tiller lagrar Helm 3 data om releasen i samma namnrymd som releasen. Denna förÀndring gör det möjligt att installera ett chart med samma namn som releasen i en annan namnrymd, och datan kvarstÄr mellan uppdateringar/omstarter av klustret i etcd. Till exempel kan WordPress installeras i namnrymden "foo" och sedan i namnrymden "bar", och bÄda releaserna kan kallas "wordpress".

Ändringar i chartens beroenden

Charten, paketerad (med hjÀlp av helm package) för anvÀndning med Helm 2 kan installeras med Helm 3, men arbetsflödet för chartutveckling har fullstÀndigt omarbetats, sÄ vissa Àndringar mÄste göras för att fortsÀtta utveckla charts med Helm 3. SÀrskilt har systemet för beroendehantering av charts förÀndrats.

Beroendehanteringssystemet för chart har övergÄtt till requirements.yaml och requirements.lock till Chart.yaml och Chart.lock. Det betyder att charts som anvÀnt kommandot helm dependency, krÀver viss konfiguration för att fungera i Helm 3.

LÄt oss titta pÄ ett exempel. LÄt oss lÀgga till ett beroende till ett chart i Helm 2 och se vad som förÀndras vid övergÄngen till Helm 3.

I Helm 2 requirements.yaml sÄg ut som följer:

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

I Helm 3 kommer samma beroende att Äterspeglas i din Chart.yaml:

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

Charts laddas fortfarande ner och placeras i katalogen charts/, sÄ subcharts (subcharts), som ligger i katalogen charts/, kommer att fortsÀtta fungera utan förÀndringar.

Vi presenterar Library Charts

Helm 3 stöder en klass av charts kallad bibliotekcharts (library chart). Denna chart anvÀnds av andra charts, men skapar inga egen release artefakter. Mallar för library charts kan endast deklarera element define. Annan innehÄll ignoreras helt enkelt. Detta gör det möjligt för anvÀndare att ÄteranvÀnda och dela kodfragment som kan anvÀndas i mÄnga charts, vilket undviker duplicering och följer principen om DRY.

Library charts deklareras i avsnittet dependencies i filen Chart.yaml. Installationen och hanteringen av dem skiljer sig inte frÄn andra charts.

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

Vi ser fram emot de anvÀndningsmöjligheter som denna komponent kommer att öppna för chartutvecklare samt de bÀsta praxis som kan uppstÄ tack vare library charts.

Vad hÀnder hÀrnÀst?

Helm 3.0.0-alpha.1 Àr grunden som vi bygger den nya versionen av Helm pÄ. I artikeln har jag beskrivit nÄgra intressanta funktioner i Helm 3. MÄnga av dem Àr fortfarande i ett tidigt utvecklingsstadium, och det Àr okej; syftet med alpha-releasen Àr att testa idén, samla feedback frÄn tidiga anvÀndare och bekrÀfta vÄra antaganden.

SĂ„ snart alpha-versionen slĂ€pps (kom ihĂ„g att detta redan har skett — anm. red.), vi kommer att börja ta emot patchar för Helm 3 frĂ„n gemenskapen. Det Ă€r nödvĂ€ndigt att skapa en stabil grund som möjliggör utveckling och acceptans av nya funktioner, sĂ„ att anvĂ€ndare kan kĂ€nna sig involverade i processen genom att öppna biljetter och bidra med korrigeringar.

I artikeln har jag försökt belysa nÄgra av de stora förbÀttringar som kommer i Helm 3, men denna lista kan pÄ intet sÀtt kallas uttömmande. Den fullstÀndiga planen för Helm 3 inkluderar nyheter som förbÀttrade uppdateringsstrategier, djupare integration med OCI-register och anvÀndning av JSON-scheman för validering av chartvÀrden. Vi planerar ocksÄ att stÀda upp kodbasen och uppdatera de delar som har fÄtt lite uppmÀrksamhet de senaste tre Ären.

Om du kÀnner att vi har missat nÄgot, skulle vi gÀrna höra dina tankar!

GÄ med i diskussionen i vÄra Slack-kanaler:

  • #helm-users för frĂ„gor och enkel kommunikation med gemenskapen;
  • #helm-dev för att diskutera pull requests, kod och buggar.

Du kan ocksÄ delta i vÄra veckovisa offentliga utvecklartrÀffar pÄ torsdagar klockan 19:30 MSK. Mötena Àgnas Ät att diskutera uppgifter som viktiga utvecklare och gemenskapen arbetar med, samt teman för veckans diskussion. Alla Àr vÀlkomna att delta i mötet. LÀnken finns tillgÀnglig i Slack-kanalen. #helm-dev.

P.S. frÄn översÀttaren

LÀs Àven i vÄr blogg:

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster