
â vĂ„rt GitOps CLI-verktyg med öppen kĂ€llkod för byggande och leverans av applikationer till Kubernetes. Som vi lovade, markerade början pĂ„ tillĂ€gget av nya funktioner till werf och en översyn av de traditionella metoderna. Nu Ă€r vi glada att presentera release v1.1, som Ă€r ett stort steg framĂ„t och en grund för framtiden. byggverktyg werf. Versionen Ă€r för nĂ€rvarande tillgĂ€nglig i .
KÀrnan i versionen Àr den nya arkitekturen för steg-lagring och optimeringen av arbetet för bÄda byggverktygen (för Stapel och Dockerfile). Den nya arkitekturen för lagring öppnar möjligheter för att genomföra distribuerade byggnader frÄn flera vÀrdar och parallella byggprocesser pÄ en vÀrd.
Optimeringen av arbetet innebÀr att onödiga berÀkningar i steget för att berÀkna steg-signaturer avlÀgsnas och mekanismerna för att berÀkna fil-checksummer görs mer effektiva. Denna optimering minskar den genomsnittliga byggtiden för projekt som anvÀnder werf. Och tomma byggnader, nÀr alla steg finns i cache, stages-storage, Àr nu verkligen snabba. I de flesta fall kommer en omstart av byggnaden att ske snabbare Àn pÄ 1 sekund! Detta gÀller Àven verifieringsprocedurerna för steg under arbetet med teamet. werf deploy och werf run.
I denna release introducerades ocksĂ„ en strategi för mĂ€rkning av bilder baserat pĂ„ innehĂ„ll â content-based tagging, som nu Ă€r aktiverad som standard och Ă€r den enda rekommenderade.
LÄt oss ta en nÀrmare titt pÄ de viktigaste nyheterna i werf v1.1, och samtidigt berÀtta om framtidsplaner.
Vad har förÀndrats i werf v1.1?
Nytt namnformat för steg och algoritm för urval av steg frÄn cache
En ny regel för att generera namn pÄ steg. Nu genererar varje byggt steg ett unikt namn som bestÄr av tvÄ delar: signatur (som i v1.0) plus en unik tidsstÀmpel.
Till exempel kan det fullstÀndiga namnet pÄ stegbilden se ut sÄ hÀr:
werf-stages-storage/myproject:d2c5ad3d2c9fcd9e57b50edd9cb26c32d156165eb355318cebc3412b-1582656767835
⊠eller i generell form:
werf-stages-storage/PROJECT:SIGNATURE-TIMESTAMP_MILLISEC
HĂ€r:
-
SIGNATUREâ detta Ă€r signaturen för steget, som representerar identifieraren för stegets innehĂ„ll och beror pĂ„ historiken för Ă€ndringar i Git som ledde till detta innehĂ„ll; -
TIMESTAMP_MILLISECâ detta Ă€r en garanterat unik identifierare för bilden, som genereras vid byggandet av en ny bild.
Algoritmen för att vÀlja steg frÄn cache baseras pÄ att kontrollera slÀktskap mellan Git-commit.
- Werf berÀknar signaturen för en viss fas.
- I stages-storage Det kan finnas flera faser med denna signatur. Werf vÀljer alla lÀmpliga faser baserat pÄ signaturen.
- Om den aktuella fasen Àr kopplad till Git (git-archive, anpassad fas med Git-patchar:
install,beforeSetup,setup; eller git-latest-patch), vÀljer werf endast de faser som Àr kopplade till en commit som Àr en förfader till den aktuella commit (för vilken byggprocessen har anropats). - Av de ÄterstÄende lÀmpliga faser vÀljs en - den Àldsta baserat pÄ skapelsedatum.
Fasen för olika Git-grenar kan ha samma signatur. Men werf förhindrar anvÀndning av cache som Àr kopplad till olika grenar mellan dessa grenar, Àven om signaturerna överensstÀmmer.
.
Ny algoritm för skapande och lagring av faser i fassystemet
Om werf inte hittar en lÀmplig fas i cachen nÀr den försöker plocka faser, initieras processen för att bygga en ny fas.
Observera att flera processer (pÄ en eller flera vÀrdar) kan börja bygga samma fas vid ungefÀr samma tidpunkt. Werf anvÀnder en algoritm för optimistisk lÄsning stages-storage vid tidpunkten för lagring av den nybyggda bilden i stages-storage. SÄ nÀr den nya fasen Àr fÀrdigbyggd, lÄser werf stages-storage och sparar den nybyggda bilden endast om det inte redan finns en lÀmplig bild dÀr (enligt signaturen och andra parametrar - se den nya algoritmen för att plocka faser frÄn cachen).
Den nybyggda bilden kommer garanterat att ha ett unikt identifieringsnummer enligt TIMESTAMP_MILLISEC (se det nya namngivningsformatet för faser). Om en lÀmplig bild i stages-storage hittas, kommer werf att avfÀrda den nybyggda bilden och anvÀnda bilden frÄn cachen.
Med andra ord: den första processen som slutför byggandet av bilden (den snabbaste) fÄr rÀtt att spara den i stages-storage (och endast denna bild kommer att anvÀndas för alla byggprocesser). Den lÄngsamma byggprocessen kommer aldrig att blockera den snabbare processen frÄn att spara resultaten av byggandet av den aktuella fasen och gÄ vidare till byggandet av nÀsta.
.
Prestandan för Dockerfile-kompilatorn har förbÀttrats
För nÀrvarande bestÄr konvergen av faser för bilden som byggs frÄn Dockerfile av en fas - dockerfile. Vid berÀkning av signaturen beaktas kontrollsumman av filerna. context, som kommer att anvÀndas vid byggandet. Fram till denna förbÀttring gick werf rekursivt igenom alla filer och fick en kontrollsumma genom att summera kontexten och modulen av varje fil. FrÄn och med version v1.1 kan werf anvÀnda berÀknade kontrollsummor som lagras i Git-förrÄdet.
I grunden för algoritmen â . Algoritmen tar hĂ€nsyn till poster i .dockerignore och gĂ„r rekursivt genom filtrĂ€det endast nĂ€r det behövs. PĂ„ sĂ„ sĂ€tt har vi kopplat bort lĂ€sningen av filsystemet, och algoritmens beroende av storlek context Ă€r inte vĂ€sentligt.
Algoritmen kontrollerar ocksÄ untracked-filer och tar vid behov hÀnsyn till dem i kontrollsumman.
Prestandan har förbÀttrats vid import av filer
I wersjoner av werf v1.1 anvÀnds en rsync-server vid . Tidigare utfördes importen i tvÄ steg med anvÀndning av monterad katalog frÄn vÀrdsystemet.
Prestanda för importer pÄ macOS Àr inte lÀngre begrÀnsad av Docker-volymer, utan importer utförs pÄ samma tid som i Linux och Windows.
InnehÄllsbaserad mÀrkning
Werf v1.1 stödjer sĂ„ kallad mĂ€rkning baserad pĂ„ innehĂ„llet av bilden â content-based tagging. Taggar för de resulterande Docker-bilderna beror pĂ„ innehĂ„llet i dessa bilder.
NÀr kommandot werf publish --tags-by-stages-signature eller werf ci-env --tagging-strategy=stages-signature de publicerade bilderna kommer att mÀrkas med den sÄ kallade stadiesignaturen för bilden. Varje bild mÀrks med sin egen stadiesignatur, som berÀknas enligt samma regler som den vanliga signaturen för varje steg var för sig, men som Àr en övergripande identifierare för bilden.
Stadiesignaturen för bilden beror pÄ:
- innehÄllet i denna bild;
- historiken av Àndringar i Git, som ledde till detta innehÄll.
I Git-förrÄdet finns det alltid tomma commits som inte Àndrar innehÄllet i bildens filer. Till exempel commits endast med kommentarer eller merge-commits, eller commits som Àndrar de filer i Git som inte kommer att importeras till bilden.
Vid anvÀndning av innehÄllsbaserad mÀrkning löses problemen med onödiga omstarter av poddar i Kubernetes pÄ grund av Àndringar i bildnamnet, Àven om bildens innehÄll inte har Àndrats. Förresten Àr detta en av anledningarna till att det Àr svÄrt att lagra mÄnga mikrotjÀnster av en applikation i ett enda Git-förrÄd.
Content-based tagging Àr en mer pÄlitlig metod för taggning Àn taggning baserat pÄ Git-grenar, eftersom innehÄllet i de resulterande bilderna inte beror pÄ körordningen av pipeliner i CI-systemet för att bygga flera Ätaganden frÄn samma gren.
Det Ă€r viktigt: frĂ„n och med nu stages-signature â detta Ă€r den enda rekommenderade taggningsstrategin. Denna kommer att anvĂ€ndas som standard i teamet werf ci-env (om inte en annan taggningsschema anges specifikt).
. Denna funktion kommer ocksÄ att fÄ en separat publikation. UPPDATERAD (3 april): Artikel med detaljer .
LoggnivÄer
AnvÀndaren har nu möjlighet att kontrollera utmatningen, stÀlla in loggnivÄer och arbeta med felsökningsinformation. Nyttiga alternativ har lagts till --log-quiet, --log-verbose, --log-debug.
Som standard innehÄller utmatningen minimalt med information:

Med detaljerad utmatning (--log-verbose) kan man följa hur werf fungerar:

Detaljerad utmatning (--log-debug), förutom felsökningsinformationen frÄn werf, innehÄller Àven loggar frÄn de anvÀnda biblioteken. Man kan exempelvis se hur interaktionen med Docker Registry gÄr till och Àven notera var det gÄr Ät mycket tid:

Framtida planer
Varning! De möjligheter som beskrivs nedan och mĂ€rkts med v1.1 kommer att finnas tillgĂ€ngliga i denna version, mĂ„nga av dem â inom kort. Uppdateringar kommer genom automatiska uppdateringar . Dessa funktioner pĂ„verkar inte den stabila delen av funktionerna i v1.1, och deras introduktion krĂ€ver ingen manuell inblandning frĂ„n anvĂ€ndarens sida i redan existerande konfigurationer.
Fullt stöd för olika implementationer av Docker Registry (NYTT)
- Version: v1.1
- Tidsplan: mars
MÄlet Àr att anvÀndaren ska kunna anvÀnda valfri implementation utan begrÀnsningar vid anvÀndning av werf.
För nÀrvarande har vi identifierat följande uppsÀttning lösningar som vi avser att garantera fullt stöd för:
- Default (library/registry)*,
- AWS ECR,
- Azure*,
- Docker Hub,
- GCR*,
- GitHub Packages,
- GitLab Registry*,
- Harbor*,
- Quay.
Lösningar markerade med stjÀrna Àr redan helt stödja av werf. För de andra finns det stöd, men med begrÀnsningar.
TvÄ huvudproblem kan identifieras:
- Vissa lösningar stöder inte borttagning av taggar med hjÀlp av Docker Registry API, vilket gör det omöjligt för anvÀndare att anvÀnda den automatiska rensningen som implementerats i werf. Detta gÀller AWS ECR, Docker Hub och GitHub Packages.
- Vissa lösningar stöder inte sÄ kallade nested repositories (Docker Hub, GitHub Packages och Quay) eller stöder dem men anvÀndaren mÄste skapa dem manuellt via UI eller API (AWS ECR).
Dessa och andra problem planerar vi att lösa med hjÀlp av inbyggda API:er i lösningarna. Denna uppgift omfattar Àven testtÀckning av hela arbetscykeln för werf för var och en av dem.
Distribuerad byggande av bilder (â)
- Version: v1.2 v1.1 (prioriteringen för implementeringen av denna funktion har ökat)
- Tidsramar: mars-april mars
För nÀrvarande kan werf v1.0 och v1.1 endast anvÀndas pÄ en dedikerad vÀrd för operationer med byggande och publicering av bilder samt deployment av applikationer i Kubernetes.
För att öppna möjligheterna för distribuerat arbete med werf, nÀr byggande och deployment av applikationer i Kubernetes startas pÄ flera slumpmÀssiga vÀrdar och dessa vÀrdar inte behÄller sitt tillstÄnd mellan byggnader (tillfÀlliga runner), krÀvs det att werf implementerar möjligheten att anvÀnda Docker Registry som lagring av steg.
Tidigare, nÀr projektet werf fortfarande kallades dapp, fanns det denna möjlighet. Men vi stöttes pÄ flera problem som mÄste beaktas vid implementeringen av denna funktion i werf.
AnmÀrkning. Denna möjlighet förutsÀtter inte att byggaren arbetar inom poddar i Kubernetes, eftersom detta krÀver att man blir av med beroendet av den lokala Docker-servern (i podden Kubernetes har man inte tillgÄng till den lokala Docker-servern eftersom sjÀlva processen körs i en behÄllare, och arbetet med Docker-servern över nÀtet stöds inte av werf och kommer inte att stödjas). Stöd för arbete i Kubernetes kommer att implementeras separat.
Officiellt stöd för GitHub Actions (NYTT)
- Version: v1.1
- Tidsplan: mars
Inkluderar dokumentationen för werf (avsnitt referens och guide), samt officiell GitHub Action för arbete med werf.
Dessutom kommer det att möjliggöra att werf fungerar pÄ flyktiga runner.
AnvÀndarens interaktion med CI-systemet kommer att baseras pÄ att sÀtta labels pÄ pull-requester för att initiera vissa ÄtgÀrder för byggande/utrullning av applikationen.
Lokal utveckling och distribution av applikationer med werf (â)
- Version: v1.1
- Tidsramar: januari-februari april
HuvudmÄlet Àr att uppnÄ en enhetlig och standardiserad konfiguration för distribution av applikationer bÄde lokalt och i produktion, utan komplicerade ÄtgÀrder, "ur lÄdan".
Werf krÀver ocksÄ ett arbetslÀge dÀr det Àr bekvÀmt att redigera applikationskoden och omedelbart fÄ Äterkoppling frÄn den körande applikationen för felsökning.
Ny rensningsalgoritm (NYTT)
- Version: v1.1
- Tidsramar: april
I den aktuella versionen av werf v1.1 ingĂ„r inte rensning av bilder för innehĂ„llsbaserat taggning - dessa bilder kommer att samlas. â borttagning av instansen. I den nuvarande versionen av werf (v1.0 och v1.1) anvĂ€nds olika rensningspolicyer för bilder publicerade enligt taggningsscheman: Git-gren, Git-tag eller Git-commit.
En ny enhetlig algoritm för rensning av bilder baserad pÄ Git-commit-historik har tagits fram för alla taggningsscheman:
BehÄll inte fler Àn N1 bilder kopplade till de N2 senaste commits för var och en av git HEAD (grenar och taggar).
- BehÄll inte fler Àn N1 stadiebilder kopplade till de N2 senaste commits för var och en av git HEAD (grenar och taggar).
- BehÄll alla bilder som anvÀnds i nÄgra resurser i Kubernetes-klustret (alla kube-kontexter i konfigurationsfilen och namespaces skannas; detta beteende kan begrÀnsas med speciella alternativ).
- BehÄll alla bilder som anvÀnds i resurskonfigurationsmanifest som Àr sparade i Helm-releaser.
- En bild kan raderas om den inte Àr kopplad till nÄgon HEAD frÄn git (till exempel eftersom den motsvarande HEAD har tagits bort) och inte anvÀnds i nÄgot av manifesten i Kubernetes-klustret och i Helm-releaser.
- Parallell byggande av bilder (â)
Tidsramar: januari-februari april*
- Version: v1.1
- Den aktuella versionen av werf bygger bilder och artefakter som beskrivs i
, i följd. Det Àr nödvÀndigt att parallellisera byggprocessen av oberoende stadier av bilder och artefakter samt sÀkerstÀlla en bekvÀm och informativ utdata. werf.yaml* Not: tidsramen har flyttats pÄ grund av ökad prioritet för genomförandet av distribuerad byggnation, vilket kommer att ge fler möjligheter för horisontell skalning och anvÀndning av werf med GitHub Actions. Parallell byggnation Àr nÀsta steg mot optimering, vilket ger vertikal skalbarhet vid byggandet av ett enda projekt.
ĂvergĂ„ng till Helm 3 (â)
Version: v1.2
- Tidsramar: februari-mars maj*
- Inkluderar en övergÄng till en ny kodbas
och en beprövad, bekvÀm metod för migrering av befintliga installationer. och beprövad, smidig metod för att migrera befintliga installationer.
* Notera: ĂvergĂ„ngen till Helm 3 kommer inte att tillföra nĂ„gra avsevĂ€rda funktioner i werf, eftersom alla nyckelfunktioner i Helm 3 (3-vĂ€gs-sammanslagning och avsaknad av tiller) redan Ă€r implementerade i werf. Dessutom har werf utöver de angivna. Dock förblir denna övergĂ„ng i vĂ„ra planer och kommer att genomföras.
Jsonnet för att beskriva Kubernetes-konfiguration (â)
- Tidsramar: februari-mars maj*
- Tidsramar: januari-februari, april-maj
Werf kommer att stödja beskrivningen av konfiguration för Kubernetes i Jsonnet-format. Samtidigt kommer werf att förbli kompatibelt med Helm och det kommer att finnas möjlighet att vÀlja beskrivningsformat.
Anledningen Àr att mallarna i Go sprÄket, enligt mÄnga, har en hög inlÀrningströskel och förstÄelsen av koden i dessa mallar lider ocksÄ.
Det övervÀgs ocksÄ att implementera andra system för beskrivning av Kubernetes-konfiguration (t.ex. Kustomize).
Arbete inom Kubernetes (â)
- Tidsramar: februari-mars maj*
- Tidsramar: april-maj, maj-juni
MÄl: att sÀkerstÀlla byggandet av bilder och leverans av applikationen med hjÀlp av runner i Kubernetes. D.v.s. byggandet av nya bilder, deras publicering, rengöring och distribution kan ske direkt frÄn poddar i Kubernetes.
För att genomföra denna möjlighet krÀvs först en förmÄga till distribuerad byggnation av bilder (se punkt ovan).
Det krÀvs ocksÄ stöd för arbetssÀttet dÀr byggaren fungerar utan Docker-server (d.v.s. Kaniko-liknande byggande eller byggnation i anvÀndarrum).
Werf kommer att stödja byggnation i Kubernetes inte bara med hjÀlp av Dockerfile, utan ocksÄ med sin egen byggare Stapel med inkrementella ombyggnader och Ansible.
Ett steg mot öppen utveckling
Vi Àlskar vÄrt samhÀlle (, ) och vill att fler mÀnniskor ska hjÀlpa till att göra werf bÀttre, förstÄ i vilken riktning vi gÄr och delta i utvecklingen.
Det har nyligen beslutats att gÄ över till för att öppna upp vÄr teams arbetsprocess. Nu kan man se de nÀrmaste planerna samt de aktuella arbetena inom följande omrÄden:
- ;
- ;
- ;
- .
Ett stort arbete har utförts med issues:
- Obsoleta har tagits bort.
- De befintliga har formats om till ett enhetligt format med tillrÀcklig mÀngd detaljer och insikter.
- Nya issues med idéer och förslag har lagts till.
Hur man aktiverar version v1.1
Versionen Àr för nÀrvarande tillgÀnglig i (i kanalerna stable och rock-solid utgÄvor kommer att göras tillgÀngliga allteftersom stabiliseringen sker, men ea Àr redan tillrÀckligt stabil för anvÀndning, eftersom den har passerat genom kanaler. alpha och beta). Aktiveras pÄ följande sÀtt:
source $(multiwerf use 1.1 ea)
werf KOMMAND ...Slutsats
Den nya lagringsarkitekturen för steg och optimering av byggverktygen för Stapel och Dockerfile byggare öppnar möjligheter att genomföra distribuerade och parallella byggnationer i werf. Dessa möjligheter kommer snart att vara tillgÀngliga i samma release av v1.1 och bli automatiskt tillgÀngliga genom autouppdateringssystemet (för anvÀndare ).
I denna release har en taggstrategi baserat pĂ„ innehĂ„llet i bilder lagts till â content-based tagging, â vilket blivit standardstrategin. En logg över de viktigaste kommandona har ocksĂ„ omarbetats: werf build, werf publish, werf deploy, werf dismiss, werf cleanup.
Ett nÀsta betydande steg kommer att vara tillÀgget av distribuerade byggningar. Distribuerade byggningar har sedan v1.0 blivit en mer prioriterad uppgift Àn parallella byggningar, eftersom de tillför mer vÀrde till werf: vertikal skalning av byggverktyg och stöd för tillfÀlliga byggverktyg i olika CI/CD-system, samt möjligheten att erbjuda officiellt stöd för GitHub Actions. DÀrför har tidsplaneringen för implementeringen av parallella byggningar flyttats. Men vi arbetar för att snabbt kunna realisera bÄda möjligheterna.
HÄll dig uppdaterad! Och glöm inte att besöka oss pÄ , för att skapa en issue, hitta en som redan finns och ge den ett plus, skapa en PR eller bara följa projektets utveckling.
P.S.
LÀs Àven i vÄr blogg:
- «»
- «»;
- Noteringar om nyheter i werf:
- «»;
- «»;
- «»;
- «».
KĂ€lla: habr.com
