3-via merge ad werf: instruere Kubernetes cum Helm "in steroids"

Quod nos (non solum nos) diu expectavimus factum est; werf *, noster Open Source utilitas ad applicationes aedificandas et eas Kubernetes tradendas, nunc adiuvat applicandi mutationes utentes 3-modo inaequaliter merge! Praeter hoc, capere potest facultates K8s existentes in Helm solvo sine has facultates restituendo.

3-via merge ad werf: instruere Kubernetes cum Helm "in steroids"

Si suus 'brevissimus, erimus WERF_THREE_WAY_MERGE=enabled - dabimus instruere "ut in" kubectl apply„ , compatitur cum institutionibus Helm 2 existentibus et etiam paulo plus.

Sed cum theoria incipiamus: quidnam prorsus sunt 3-modo-coniungendi inaequaliter, quomodo homines ascendunt accessu ad eos generandos, et cur magni momenti sunt in processibus CI/CD cum infrastructuris Kubernetes-fundatis? Et postea videamus quid 3-merger in werf, qui modi per defaltam et quomodo administrare.

Quid est 3-modo-merge patch?

Itaque, committitur cum munere evolvit facultates quae in YAML manifestat in Kubernetes.

Ad facultates laborandum, Kubernetes API sequentes operationes praecipuas praebet: creare, commissuram, reponere et delere. Supponitur quod cum eorum ope oportet opportunum continuum glomeratio facultatum ad botrum construere. Quam?

kubectl imperativi

Primus accessus ad res administrandas in Kubernetes adhibenda est imperativis imperativis kubectl ad has res creandas, modificandas et delendas. Plane:

  • bigas kubectl run instruere potes currere vel Job:
    kubectl run --generator=deployment/apps.v1 DEPLOYMENT_NAME --image=IMAGE
  • bigas kubectl scale - mutare numerum replicas:
    kubectl scale --replicas=3 deployment/mysql
  • etc.

Aditus hoc primo aspectu opportunum videri potest. Sed quaestiones sunt:

  1. Difficile est automate.
  2. How configuratione reflectunt in Git? Quomodo mutationes factae recensere botro?
  3. Quam providere reproducibility configurationes in sileo?
  4. ...

Patet accessum hunc non bene congruere cum applicatione ac infrastructura ac codici (IaC; vel etiam" GitOps ut optio magis moderna, popularis in Kubernetes ecosystematis obtinens). Haec igitur mandata kubectl ulterius progressus non receperunt.

Creare, accipere, reponere et delere res

Cum prima creatio simplex est: mitte operationem manifestam create kube api et eopia creata. YAML repraesentatio manifesti in Git condita et utens mandato condi potest kubectl create -f manifest.yaml.

С Movens etiam simplex: idem substituunt manifest.yaml ex Git ad bigas kubectl delete -f manifest.yaml.

operatio replace sino vos ut subsidii configurationem cum novo novo penitus restituatis, sine subsidio recreando. Id significat, antequam ad subsidia mutationem capiat, logicum esse quaestionem de emendatione hodierna cum operatione get, vertere et renova cum operatione replace. kube apiserver aedificatur eu densis et, si post surgery get obiectum mutatur, tunc operatio replace non operatur.

Condere configurationem in Git ac renovare utens reponere, opus facere operationem getconfundantur config ex Git cum eo quod accepimus, et facere replace. Defalta kubectl tantum permittit ut imperio utaris kubectl replace -f manifest.yamlquibus manifest.yaml — iam plene confectum (in nostro casu inducitur) manifestam necessitatem instituendi. Evenit ut user necessitates manifestat ad efficiendum merge, et hoc leve non est...

Notatu etiam dignum est, quamvis manifest.yaml et in Git conditum est, praenoscere non possumus utrum necessarium sit aliquid creare vel renovare illud - quod per programmationem usoris fieri debet.

summa possumus aedificare continua rollout tantum utendo creare, reponere et delere, ut infrastructurae configurationis in Git cum codice et convenienti CI/CD repositum sit?

In principio possumus opus ad efficiendum merge operandi manifeslum et alligationis genus;

  • praesentia rei sistit in botro;
  • initialis resource facit creatio;
  • updates aut delet.

Cum adaequationis, nota quod resource potest mutata ab ultimo get et automatice causam eu densis densis tractamus — iteratis renovationis inceptis fac.

Sed cur rotam reinvent, cum kube-apiservator aliam viam praebet ad facultates renovandas: operationem? patchquae usorem nonnullarum problematum descriptarum levat?

patch

Nunc ad accumsan.

Seculae sunt primariae modus applicandi mutationes rerum existentium in Kubernetes. Operatio patch sic operatur;

  • usor kube-apiserver commissuram in JSON formam mittere et obiectum definire debet,
  • et ipsum apiservarium de statu praesentis obiecti aget et ad formam debitam perducat.

Optimistica densis in hoc casu non requiritur. Haec operatio est magis declarativa quam reponere, licet primo videatur e converso.

sic:

  • per operationem create rem secundum manifestam ex Git;
  • propter delete - dele si res non opus est;
  • propter patch — rem mutamus, eam formam quam in Git.

Sed hoc facere debes creare verum lacus!

Quomodo inaequaliter operantur in Helm 2: 2-modo-merge

Cum primum remissionem instituis, operatio gubernaculum peragit create for chart opes.

Cum adaequationis a Helm emissio pro singulis subsidiis;

  • considerat commissuram inter versionem resource e chartula priore et in versione chartula currentis;
  • applicat hanc lacus.

Hoc nos vocamus patch II-modo merge panni rudis, quia 2 manifestos in sua creatione involvit;

  • resource patet ex solutione priorum;
  • resource patet ex vena resource.

Cum removere operationem delete in kube apiservator vocatus est facultates quae in priore remissione declarabantur, sed in currenti non declarata.

De 2 modo merge patch accessus habet problema: perducit ad e sync cum reali status facultatis in botro et manifesto in Git.

Illustratio problematis cum exemplo

  • In Git, chart, notum in quo ager reponit image Instruere res ubuntu:18.04.
  • User via kubectl edit mutata in agro ad valorem ipsius ubuntu:19.04.
  • Cum rursus disponas chartula Galea non generat commissuram, quia agri image in priori versione emissionis et in chart currenti eaedem sunt.
  • Post rursus instruere image permanet ubuntu:19.04, quamvis chart ubuntu:18.04.

Desynchronization venimus et declarativum perdimus.

What is a synchronised resource?

Magis in universum, plenus Impossibile est consequi parem inter manifestam botrum et manifestam ex Git. Quia in reali manifesto operae possunt esse annotationes, pittaci, additamenta, aliaque notitia, quae ab subsidio dynamice a quibusdam moderatoribus additae et remotae sunt. Non possumus nec volumus hanc datam servare in Git. Nihilominus volumus agros quos in Git expresse expressimus ut proprias valores in rollout assumere.

Ita fit generale synchronised resource regulae: cum subsidia volvens, solum illos agros mutare vel delere potes, qui in manifesto Git expresse nominantur (vel in praecedenti versione specificata sunt et nunc deleta sunt).

II-modo merge panni rudis

Principalis idea II-modo merge panni rudis: generamus commissuram inter versionem ultimam applicatam manifestae ex Git et scopo versionis manifestae ex Git, ratione habita emendationis manifesti e botri currenti. Inde lacus parere debet cum regulae resource synchronised:

  • novos agros additae versioni scopo utens commissuram adduntur;
  • agros antea exsistentes in versione ultima applicata et non existentes in versione scopo utentes commissuram reset sunt;
  • agri in versione currenti obiecti quod discrepant a versione scopo manifesti sunt renovata utens commissura.

Hoc principium est quod inaequaliter generat kubectl apply:

  • manifesta versio apposita in ipsius rei annotatione reponitur ;
  • target - ex certa YAML lima,
  • hodierna est e botro profluente.

Nunc quod rationem digessi sumus, tempus est tibi dicere quid in werf fecerimus.

Applicando mutationes werf

Antea, werf, sicut Helm 2, usus est 2-via inaequaliter merge.

Reparare panni rudis

Ad mutandum ad novum genus inaequalis - 3-modo-merge - primum gradum sic dictum introduximus. interdum pittacia passim disposita.

Cum disponas, signum 2-modo-merge panni rudis adhibetur, sed werf insuper commissuram generat, quae realem statum subsidii cum illis quae in Git conscripta est (talis concretio creatur utens regulae supra descriptae) idem synchronised. .

Si desyncronization occurrit, utentis in fine instruere monitum accipit cum congruente nuntio et commissura, quae applicanda est ad formam synchroni adducendam. Haec commissura etiam in peculiari annotatione memoratur werf.io/repair-patch. Ponitur manus usoris сам hanc commissuram adhibebit: werf omnino non applicabit.

Reparationem sartagines generare mensura temporalis est quae permittit ut actu probare conditionem inaequaliter fundatam in principio 3-modo merge, sed haec inaequaliter sponte non applica. In momento, hic modus operandi per defaltam facit.

III-modo-merge panni rudis modo ad novum solvo

Satus December 1, 2019, beta et alpha versiones werf incipiunt per default utere plenae armaturae 3-modo-mergo inaequaliter ad mutationes applicandas solum ad novas Helm emissiones per werf evolutas. Existens emissiones perget utendo 2-modo-merge + sarturas sarta tecta appropinquare.

Hoc modus operandi potest expresse per occasum WERF_THREE_WAY_MERGE_MODE=onlyNewReleases nunc.

illud: Pluma apparuit in werf per plures emissiones: in alveum alpha factum est cum versione paratum v1.0.5-alpha.19et in canali beta - with v1.0.4-beta.20.

III-modo-merge patch pro omnibus solvo

Satus XV Decembris MMXIX, beta et alpha versiones werf incipiunt utere plenae 15-modo-merge inaequaliter per defaltam ut mutationes applicandi ad omnes emissiones.

Hoc modus operandi potest expresse per occasum WERF_THREE_WAY_MERGE_MODE=enabled nunc.

Quid cum resource autoscaling?

Autoscaling in Kubernetes sunt 2 genera: HPA (horizontalis) et VPA (vertical).

Horizontalis automatice numerum imaginum, verticalium, numerum facultatum eligat. Tum numerus replicationum et subsidiorum requisitorum specificatur in manifestis subsidiis (vide Resource Manifesta). spec.replicas aut spec.containers[].resources.limits.cpu, spec.containers[].resources.limits.memory и другие).

Problema: si usor in charta subsidia configurat ut specificat quaedam bona pro facultatibus vel replicationibus et autoscalariis pro hac subsidii facultate, cum unaquaque instruere werf hos valores exponet ad ea quae in chartula scripta sunt manifesta. .

Duae sunt solutiones problematis. Imprimis, optimum est vitare valores autoscales in charta manifesta expresse specificans. Si haec optio ob aliquam causam non est idonea (exempli gratia, quia expedit limites subsidiorum initiales et numerum replicationum in chartis collocare), tunc werf sequentes adnotationes praebet:

  • werf.io/set-replicas-only-on-creation=true
  • werf.io/set-resources-only-on-creation=true

Si talis annotationis adest, werf non reset valores respondentes in singulis instruere, sed eas tantum ponet cum primum auxilium creatum est.

For more details, see documentum documentum pro HPA и VPA.

Prohibe usum III-modo-merge panni rudis

Usor potest currently prohibere usum novis inaequalitatibus in werf utendo environment variabilis WERF_THREE_WAY_MERGE_MODE=disabled. Sed incipiens Ex die 1 Martii 2020 hoc bannum non erit amplius. et tantum fieri poterit ut inaequaliter merge 3-modo.

Adoptio facultatum in werf

Dominandi modum applicandi mutationes cum 3-modo-coniunctis confundendi nobis permisit ut talem plumam statim efficiendam, ut facultates adhibitae in botro in Helm emissione exsistentes.

Helm 2 quaestionem habet: auxilium chart addere non potes manifestat iam in botro existere sine hoc subsidio e vulnere recreando (vide. #6031, #3275). Docuimus werf exsistentes facultates accipere pro emissione. Ad hoc faciendum, debes annotationem instituere in versione hodierna subsidii ex botro currenti (exempli gratia, usura kubectl edit):

"werf.io/allow-adoption-by-release": RELEASE_NAME

Nunc subsidia in chartula describenda et werf insequenti tempore solutionem opportuno nomine explicat, subsidia exsistentia in hanc liberationem recipietur et sub eius potestate manet. Praeterea in processu subsidii recipiendi pro remissione, werf statum currentem subsidii ex botro currenti ad statum in chartula descriptum adducet, utens eadem 3-modo-coniungendi resarciendi et subsidiorum regulae synchronizatae.

illud: occasum WERF_THREE_WAY_MERGE_MODE adoptionem facultatum non tangit - in casu adoptionis, a 3-modo-merge commissura semper adhibetur.

Singula - in documentum.

Conclusiones et consilia futura

Spero post hunc articulum clarius factum esse quid 3-modo-converti inaequales sint et cur ad eos venerint. Ex practica parte progressionis werf project, eorum exsecutio alius gradus fuit ad instruere Helm-similem meliorem. Nunc oblivisci potes de quaestionibus schematismi synchronisationum, quae saepe ortae sunt cum utens Helm 2. Eodem tempore, nova utilitas notae adoptandi iam receptae facultates Kubernetes ad Helm emissionem additae sunt.

Exstant adhuc nonnullae quaestiones et provocationes cum Helm-similes institutis, sicut usus Go template, quod alloqui pergo.

Informationes de modos et adoptiones ope renovationis etiam inveniri possunt Haec pagina documentorum.

Galea 3

Nota speciali digna dimisit sicut alter dies novam versionem maiorem de Helm - v3 - qua etiam 3-modo-consociationibus merge utitur et Tillerum expellit. Nova versio Helm postulat migratio exsistentes officinae ut eas in novam emissiones repositionis formas converterent.

Werf, pro sua parte, currently utendi Tillero depulso, switched ad 3-modo-merge et adiecit. quanto magismanens, dum stare potest cum institutionibus Helm 2 (nulla migratio scriptorum exsecutioni mandanda). Ideo donec werf permutat ad Helm 3, usores werf principales utilitates Helm 3 super Helm 2 non amittunt (werf etiam eas habet).

Sed commutatio werf ad Helm 3 codebase inevitabilis est et in proximo futuro fiet. Scilicet hoc erit werf 1.1 vel werf 1.2 (in momento, principale versio werf est 1.0; ut plus informationes de werf versionis fabrica, vide hic). Hoc tempore Helm 3 stabiliendi tempus erit.

PS

Lege etiam in nostro diario:

Source: www.habr.com

Add a comment