
â meie avatud lĂ€htekoodiga GitOps CLI-utility rakenduste ehitamiseks ja tarnimiseks Kubernetesesse. Nagu lubatud, tĂ€histas werfi uusimate vĂ”imaluste lisamise ja tuttavate lĂ€henemisviiside ĂŒlevaatamise algust. NĂŒĂŒd on meil hea meel esitleda versiooni v1.1, mis on suur samm edasi ja alustab tulevikku suunatud arendusi. kompilaator werf. Versioon on hetkel saadaval .
Uue versiooni alus on uus etappide salvestusarkitektuur ja kahe kompilaatori (Stapel ja Dockerfile) töö optimiseerimine. Uus salvestusarkitektuur avab vĂ”imalused jaotatud kompilaadiks mitmelt hostilt ja paralleelseks kompilaadiks ĂŒhel hostil.
Töö optimiseerimine hĂ”lmab ĂŒleliigsete arvutuste eemaldamist etappide allkirjade arvutamise etapis ja failide kontrollsummade arvutamise mehhanismide asendamist efektiivsematega. See optimeerimine vĂ€hendab keskmist projekti kompileerimise aega werfi abil. Ja tĂŒhjad kompilaadid, kui kĂ”ik etapid on vahemikus olemas. stages-storage, nĂŒĂŒd tĂ”eliselt kiired. Enamasti kulgeb koostamise taaskĂ€ivitamine kiiremini kui sekundiga! See kehtib ka etappide kontrollimisprotseduuride kohta, mis toimuvad meeskonna töös. werf deploy ja werf run.
Samuti on selles vĂ€ljalaskes saadaval sisu pĂ”hjal pildi sildistamise strateegia â sisu pĂ”hine mĂ€rgistamine, mis on nĂŒĂŒd vaikimisi sisse lĂŒlitatud ja on ainus soovitatav variant.
Vaatame lÀhemalt werf v1.1 peamisi uuendusi ja rÀÀgime samal ajal tulevikuplaanidest.
Mis on muutunud werf v1.1-s?
Uus etappide nimetamise formaat ja etappide valimise algoritm kaustast
Uus etapi nime genereerimise reegel. Iga etapi koostamine genereerib nĂŒĂŒd ainulaadse etapi nime, mis koosneb kahest osast: allkiri (nagu v1.0-s) pluss ainulaadne ajakood.
NÀiteks vÔib etapi tÀielik nimi vÀlja nÀha jÀrgmiselt:
werf-stages-storage/myproject:d2c5ad3d2c9fcd9e57b50edd9cb26c32d156165eb355318cebc3412b-1582656767835
⊠vĂ”i ĂŒldises vormis:
werf-stages-storage/PROJECT:SIGNATURE-TIMESTAMP_MILLISEC
Siin:
-
SIGNATUREâ see on etapi allkiri, mis esindab etapi sisu identifikaatorit ja sĂ”ltub Git-i redigeerimise ajaloost, mis viis selleni; -
TIMESTAMP_MILLISECâ see on garanteeritud unikaalne pildi identifikaator, mis genereeritakse uue pildi kokkupanemise hetkel.
Etapi valimise algoritm vahemÀlust pÔhineb Git-commitite suguluskontrollil:
- Werf arvutab vÀlja teatud etapi allkirja.
- V stages-storage vÔib eksisteerida mitu etappi sama allkirja jaoks. Werf valib kÔik sobivad allkirja jÀrgi etapid.
- Kui praegune etapp on seotud Git'iga (git-archive, kasutaja etapp Git'i patchidega:
install,beforeSetup,setup; vĂ”i git-latest-patch), siis werf valib ainult need etapid, mis on seotud commitiga, mis on praeguse commit'i eelkĂ€ija (mille jaoks on kĂ€ivitatud koostamine). - JĂ€relejÀÀnud sobivate etappide hulgast valitakse ĂŒks â kĂ”ige vanem loomise kuupĂ€eva jĂ€rgi.
Erinevate Git-harude jaoks vĂ”ib olla ĂŒks ja sama allkiri. Kuid werf takistab erinevate harude vahel sĂŒndikaedude kasutamist, isegi kui allkirjad kattuvad.
.
Uus etappide loomise ja salvestamise algoritm etappide ladustamises
Kui werf ei leia etapi valimise ajal vahemÀlust sobivat etappi, algatatakse uue etapi koostamisprotsess.
Tuleb mĂ€rkida, et mitu protsessi (ĂŒhel vĂ”i mitmel hostil) vĂ”ivad alustada sama etapi kogumist peaaegu samal ajal. Werf kasutab optimistliku lukustamise algoritmi. stages-storage hetkel, kui uut ehitatud pilti salvestatakse stages-storage. Nii et kui uue etapi kogumine on valmis, lukustab werf stages-storage ja salvestab sinna uue ehitatud pildi ainult siis, kui seal juba ei eksisteeri sobivat pilti (allkirja ja teiste parameetrite alusel â vt. uusi etappide valimise algoritme vahemĂ€lust).
Uus ehitatud pilt omab garanteeritult unikaalset identifikaatorit TIMESTAMP_MILLISEC (vt. uusi etappide nimete vorme). Kui stages-storage leiad sobiva pildi, loob werf uue ehitatud pildi ja kasutab vahemÀlust pilti.
TeisisÔnu: esimene protsess, mis lÔpetab pildi kogumise (kiireim), saab Ôiguse salvestada selle stages-storage'i (ja see ainus pilt kasutatakse kÔigi kogumiste jaoks). Aeglane kogumisprotsess ei blokeeri kunagi kiiremat protsessi, et salvestada kaudsete etappide kogumise tulemusi ja liikuda jÀrgmise etapi kogumise juurde.
.
Dockerfile'i komponendi jÔudlust on parendatud
Praegu koosneb Dockerfile'ist koostatud piltide etappide torustik ĂŒhest etapist â dockerfile. Allkirja arvutamisel arvestatakse failide kontrollettevĂ”ttega context, mis kasutatakse koostamisel. Enne seda tĂ€iustust lĂ€bis werf rekursiivselt kĂ”ik failid ja sai kontrollsummat, liites iga faili konteksti ja muutuja. Alates versioonidest v1.1 saab werf kasutada arvutatud kontrollettevĂ”tteid, mis on salvestatud Git-repositooriumisse.
AlgrĂŒtm pĂ”hineb . Algoritm arvestab sissekandeid .dockerignore ja lĂ€bib rekursiivselt failipuud vaid vajadusel. Seega oleme lahti lasknud failisĂŒsteemi lugemisest ning algoritmi sĂ”ltuvus suurusest context ei ole oluline.
Samuti kontrollib algoritm jÀlgimata faile ja arvestab neid vajadusel kontrollsummas.
Failide importimise tulemuslikkust on parendatud
Versioonides werf v1.1 kasutatakse rsync-serverit . Varasemalt toimus importimine kahes etapis, kasutades hosti sĂŒsteemist kaustamontaaĆŸi.
macOS-i importide jÔudlus ei ole enam piiratud Docker mahutitega, ning impordid toimuvad sama kiiresti kui Linuxis ja Windowsis.
Sisu pÔhine mÀrgistamine
Werf v1.1 toetab nii nimetatud sisu pĂ”hist mĂ€rgistamist piltide jaoks â sisu pĂ”hine mĂ€rgistamine. Tulemuseks olevate Docker-piltide sildid sĂ”ltuvad nende piltide sisust.
Kui kĂ€ivitate kĂ€su werf publish --tags-by-stages-signature vĂ”i werf ci-env --tagging-strategy=stages-signature publikule esitatavad pildid saavad nimetatud etappide allkiri pildist. Iga pilt on mĂ€rgistatud omaenda etapi allkirjaga, mis arvutatakse samade reeglite jĂ€rgi nagu iga etapi regulaarne allkiri eraldi, kuid on pildi ĂŒldistav identifikaator.
Etapi allkiri sÔltub:
- selle pildi sisust;
- Git-i muudatuste ajaloost, mis viisid selle sisuni.
Git-i hoidlas on alati tĂŒhjad commitid, mis ei muuda pildi failide sisu. NĂ€iteks commitid, millel on ainult kommentaarid vĂ”i merge-commitid, vĂ”i commitid, mis muudavad Git-is faile, mis ei lisandu pildile.
Content-based tagging lahendab Kubernetes'i rakenduste pod'ide ĂŒleliigse taaskĂ€ivitamise probleemid, mis tulenevad pildi nime muutmisest, isegi kui pildi sisu ei ole muutunud. See on ĂŒks pĂ”hjusi, miks on keeruline hoida mitmeid sama rakenduse mikroteenuseid ĂŒhes Git-repositooriumis.
Samuti on content-based tagging usaldusvÀÀrsem meetod kui Git-harude pĂ”hine tagimine, kuna lĂ”pptoodetud piltide sisu ei sĂ”ltu pipeline'ide tĂ€itmise jĂ€rjestusest CI-sĂŒsteemis mitme sama haru commit'i ehitamisel.
Oluline: alates kĂ€esolevast hetkest stages-signature â see on ainus soovitatav tagimisstrateegia. Just seda kasutatakse vaikimisi meeskonnas werf ci-env (kui ei ole selgelt mÀÀratud teist tagimisskeemi).
. Sellele funktsioonile pĂŒhendatakse ka eraldi publikatsioon. UUENDATUD (3. aprill): Artikkel ĂŒksikasjadega .
Logimise tasemed
Kasutajal on nĂŒĂŒd vĂ”imalus kontrollida vĂ€ljastust, mÀÀrata logimise taset ja töötada silumisinfo kallal. Lisatud on valikud --log-quiet, --log-verbose, --log-debug.
Vaikimisi sisaldab vÀljund minimaalset teavet:

Detailse vÀljundi kasutamisel (--log-verbose) on vÔimalik jÀlgida, kuidas werf töötab:

Detailne vÀljund (--log-debug), lisaks werfi silumise teabele sisaldab ka kasutatavate raamatukogude logisid. NÀiteks saab nÀha, kuidas toimub suhtlemine Docker Registry'ga, ja fikseerida kohad, kus kulub mÀrkimisvÀÀrselt aega:

Edasised plaanid
TÀhelepanu! Allpool kirjeldatud vÔimalused, millel on silt v1.1 on juba selles versioonis saadaval, paljusid neist saadakse peagi. Uuendused tulevad lÀbi automaatsete uuenduste . Need vÔimalused ei mÔjuta v1.1 stabiilse funktsionaalsuse osa, nende tulek ei nÔua kasutajalt juba olemasolevates konfiguratsioonides kÀsitsi sekkumist.
TĂ€ielik toetus erinevatele Docker Registry rakendustele (UUS)
- Versioon: v1.1
- Ajad: mÀrts
EesmĂ€rk â kasutaja peaks saama kasutada suvalist rakendust ilma piiranguteta werfi kasutamisel.
Praegu oleme mÀÀratlenud jÀrgmise lahenduste komplekti, mille osas kavatseme tagada tÀieliku toe:
- Default (library/registry)*,
- AWS ECR,
- Azure*,
- Docker Hub,
- GCR*,
- GitHub Packages,
- GitLab Registry*,
- Harbor*,
- Quay.
TÀrniga mÀrgitud lahendused on praeguseks tÀielikult toetatud werf'i poolt. Teiste jaoks on toetus olemas, kuid piirangutega.
Saab vÀlja tuua kaks peamist probleemi:
- MÔned lahendused ei toeta siltide kustutamist Docker Registry API kaudu, mis ei vÔimalda kasutajatel kasutada werf'is rakendatud automaatset puhastamist. See kehtib AWS ECR, Docker Hub'i ja GitHub Packages'i puhul.
- MÔned lahendused ei toeta nn sisemisi repository'sid (Docker Hub, GitHub Packages ja Quay) vÔi toetavad, kuid kasutaja peab need kÀsitsi looma, kasutades UI-d vÔi API-t (AWS ECR).
Nende ja teiste probleemide lahendamiseks kavatseme kasutada lahenduste natiivseid API-sid. Selle ĂŒlesande alla kuulub ka werf'i tĂ€iskĂ€igu testide katmine igaĂŒhe jaoks.
Jaotatud piltide koostamine (â)
- Versioon: v1.2 v1.1 (selle vÔimaluse elluviimise prioriteet on suurenenud)
- Ajaraam: mÀrts-aprill mÀrts
Praegu saab werf v1.0 ja v1.1 kasutada ainult ĂŒhel eraldatud hostil kogumise ja piltide avaldamise operatsioonide ning rakenduse juurutamise jaoks Kuberneteses.
Werf'i mitme töö vÔimaluste avamiseks, kui rakenduste koostamine ja juurutamine Kuberneteses kÀivitatakse mitmel suvalisel hostil, mille olekut ei salvestata koostamiste vahel (ajutised runner'id), on vajalik, et werf toetaks Docker Registry kasutamist etappide hoidmiseks.
Varem, kui werf'i projekt kandis veel nime dapp, oli see vÔimalus olemas. Kuid seisis silmitsi mitmete probleemidega, mida tuleb arvesse vÔtta selle funktsiooni teostamisel werf'is.
MĂ€rkus. See vĂ”imalus ei hĂ”lma koostajate tööd Kuberneteses pod'ides, kuna selleks on vaja loobuda sĂ”ltuvusest lokaalsest Docker-serverist (Kuberneteses pod'is ei ole juurdepÀÀsu lokaalsele Docker-serverile, kuna protsess ise töötab konteineris, ning werf ei toeta ja ei toeta juurdepÀÀsu Docker-serverile ĂŒle vĂ”rgu). Tugi Kuberneteses töötamiseks rakendatakse eraldi.
Ametlik tugi GitHub Actions (UUENDUS)
- Versioon: v1.1
- Ajad: mÀrts
HÔlmab werf'i dokumentatsiooni (osad viidatud ja juhend), samuti ametlikku GitHub Action'it werf'iga töötamiseks.
Lisaks vÔimaldab werf'il töötada efemeraalsetel runner'itel.
Kasutaja interaktsioon CI-sĂŒsteemiga pĂ”hineb label'ite mÀÀramisel pull-request'idele, et algatada teatud tegevusi rakenduse kogumise/elustamise jaoks.
Rakenduste kohalik arendamine ja juurutamine werf'iga (â)
- Versioon: v1.1
- Aeg: jaanuar-veebruar aprill
Peamine eesmĂ€rk on saavutada ĂŒhtne ja ĂŒhtlustatud konfigureerimine rakenduste juurutamiseks nii kohalikus keskkonnas kui ka tootmises, ilma keeruliste tegevusteta, 'karbist vĂ€lja'.
Werfilt oodatakse ka sellist tööreĆŸiimi, kus rakenduskoodi on mugav redigeerida ja kohe tagasisidet saada töötava rakenduse kohta veaotsinguks.
Uus puhastusalgoritm (UUED)
- Versioon: v1.1
- Aeg: aprill
Praeguses versioonis werf v1.1 menetluses cleanup ei ole ette nĂ€htud pildi puhastamiseks sisu pĂ”hjalikest mĂ€rgistamisstrateegiatest (content-based tagging) â need pildid hakkavad kuhjuma.
Samuti kasutavad praegused wersf versioonid (v1.0 ja v1.1) erinevaid puhastuspolitikaid piltide jaoks, mis on avaldatud mÀrgistamisstrateegiate jÀrgi: Git haru, Git silt vÔi Git commit.
On vĂ€lja mĂ”eldud uus ĂŒhtne piltide puhastusalgoritm, mis pĂ”hineb commitide ajaloos Git:
- Hoida mitte rohkem kui N1 pilti, mis on seotud N2 viimase commitiga igas git HEAD-is (harudes ja silti).
- Hoida mitte rohkem kui N1 faasipilti, mis on seotud N2 viimase commitiga igas git HEAD-is (harudes ja silti).
- Hoida kÔik pildid, mida kasutatakse Kubernetes klastrite ressurssides (uskumused skaneeritakse kÔikidele kube-konfiguratsioonifailide kontekstidele ja namespace'idele; seda kÀitumist saab piirata erivÔimalustega).
- Hoida kÔik pildid, mida kasutatakse ressursside konfiguratsiooni manfestides, mis on salvestatud Helm'i vÀljaannetes.
- Pilt vĂ”ib olla kustutatud, kui see pole seotud ĂŒhegi git HEAD-iga (nĂ€iteks, kuna vastav HEAD on kustutatud) ja seda ei kasutata ĂŒheski manfestis Kubernetes klastris ega Helm'i vĂ€ljaannetes.
Paralleelne piltide koostamine (â)
- Versioon: v1.1
- Ajakava: jaanuar-veebruar aprill*
Praegune wersioon werf kogub pilte ja artefakte, mis on kirjeldatud werf.yaml, jĂ€rjekorras. On vajalik iseseisvate etappide piltide ja artefaktide koostamisprotsessi paralleelne ĂŒlesehitamine ning mugava ja informatiivse vĂ€ljundi tagamine.
* MĂ€rkus: tĂ€htaeg on edasi lĂŒkatud, et suurendada prioriteeti ja rakendada jaotatud koostööd, mis lisab rohkem horisontaalse skaaleerimise vĂ”imalusi ning vĂ”imaldab kasutada werfi koos GitHub Actions'iga. Paralleelne koostamine on jĂ€rgmine optimeerimise samm, mis pakub vertikaalset skaaleeritavust ĂŒhe projekti koostamisel.
Ăleminek Helm 3-le (â)
- Versioon: v1.2
- Ajaraamid: veebruar-mÀrts mai*
Sisaldab ĂŒleminekut uuele koodibaasile ja katsetatud, mugav viis olemasolevate paigaldiste migreerimiseks.
* MĂ€rkus: ĂŒleminek Helm 3-le ei too werfisse olulisi uusi vĂ”imalusi, kuna kĂ”ik Helm 3 peamised funktsioonid (3-way-merge ja tilleri puudumine) on juba werfis rakendatud. Veelgi enam, werfil on lisaks nendele, mida on loetletud. Siiski jÀÀb see ĂŒleminek meie plaanidesse ja rakendatakse.
Jsonnet Kubernetes'i konfiguratsiooni kirjeldamiseks (â)
- Versioon: v1.2
- Ajaraamid: jaanuar-veebruar aprill-mai
Werf toetab Kubernetes'i konfiguratsiooni kirjeldamist Jsonnet formaadis. Samal ajal jÀÀb werf Helmiga ĂŒhilduvaks ning on vĂ”imalik valida kirjeldusformaati.
PÔhjus on see, et Go keele mallidel on paljude arvates suur sisenemisbarjÀÀr ning nende mallide kood on ka raskesti mÔistetav.
Samuti kaalutakse teiste Kubernetes'i konfigureerimissĂŒsteemide, nĂ€iteks Kustomize'i, rakendamise vĂ”imalust.
Töö Kubernetes'is (â)
- Versioon: v1.2
- Ajad: aprill-mai mai-juuni
EesmÀrk: tagada piltide koostamine ja rakenduse tarnimine runner'ite kasutamisega Kubernetes'is. See tÀhendab, et uusi pilte saab koostada, avaldada, puhastada ja juurutada otse Kubernetes'i pod'idest.
Selle vÔimaluse rakendamiseks on kÔigepealt vajalik jaotatud piltide koostamise vÔimalus (vt eelmist punkti).
Samuti on vajalik toetada koostamisseisundi tööd ilma Docker'i serverita (st Kaniko-sarnane koostamine vÔi koostamine kasutajaruumi).
Werf toetab koostamist Kubernetes'is mitte ainult Dockerfile'i kaudu, vaid ka oma koostaja Stapeli kaudu, mis vÔimaldab inkrementaalseid uuesti koostamisi ja Ansible'i kasutamist.
Samm avatud arenduse suunas
Me armastame oma kogukonda (, ) ja soovime, et ĂŒha rohkem inimesi aitaks werfi paremaks muuta, mĂ”istaks, kuhu suunas me liigume, ja osaleks arenduses.
Hiljuti otsustati пДŃĐ”ĐčŃĐž ĐœĐ° et avada meie tiimi tööprotsesse. Hetkel on saadaval ĂŒlevaade lĂ€hituleviku plaanidest ning hetkeolukorrast jĂ€rgmistes valdkondades:
- ;
- ;
- ;
- .
On tehtud suur töö issues'idega:
- Ebaolulised on eemaldatud.
- Olemasolevad on viidud ĂŒhtsesse formaati, piisavalt detailide ja ĂŒksikasjade hulgaga.
- Sisse on viidud uusi issues'id ideedega ja ettepanekutega.
Kuidas aktiveerida versioon v1.1
Versioon on praegu saadaval (kanalites stabiilseks ja rock-solid vÀljalasked ilmuvad stabiilsuse saavutamisega, kuid ees see on juba iseenesest piisavalt stabiilne kasutamiseks, kuna see on lÀbinud kanalid alpha ja beta). Aktiveeritakse jÀrgmist viisi:
source $(multiwerf use 1.1 ea)
werf COMMAND ...KokkuvÔte
Uus etappide salvestamise arhitektuur ja kogumise optimeerimine Stapel ja Dockerfile kogujate jaoks avavad vÔimalused jaotatud ja paralleelsete kogumiste rakendamiseks werf'is. Need vÔimalused ilmuvad varsti samas versioonis v1.1 ning on automaatselt saadaval automaatse uuendamise mehhanismi kaudu (kasutajatele ).
Selles vĂ€ljalaskes on lisatud piltide sisu pĂ”hine mĂ€rgistamisstrateegia â sisu pĂ”hine mĂ€rgistamine, â mis on vaikimisi strateegia. Samuti on ĂŒle töötatud pĂ”hikomandide loogika: werf build, werf publish, werf deploy, werf dismiss, werf cleanup.
JĂ€rgmine oluline samm on hajusate ehituste lisamine. Hajusad ehitused on alates v1.0 saanud kĂ”rgema prioriteedi kui paralleelsed ehitused, kuna need pakuvad werfile suuremat vÀÀrtust: vertikaalne koormuse skaleerimine ehitajates ja ajutiste ehitajate tugi erinevates CI/CD sĂŒsteemides, samuti vĂ”imalus ametlikuks toeks GitHub Actions'ile. SeetĂ”ttu on paralleelsete ehituste rakendamise tĂ€htaeg edasi lĂŒkatud. Töötame aga selle nimel, et mĂ”lemad vĂ”imalused vĂ”imalikult kiiresti ellu viia.
JĂ€lgige uut! Ja Ă€rge unustage meid kĂŒlastada , et luua issue, leida juba olemasolev ja hÀÀletada, luua PR vĂ”i lihtsalt jĂ€lgida projekti arengut.
P.S.
Lugege ka meie blogist:
- «»
- «»;
- Werfi uuenduste ring:
- «»;
- «»;
- «»;
- «».
Allikas: habr.com
