Kubernetes varias optiones habet ad augendi facultates: applicare, recensere, panni rudis ac reponere. Est confusio circa ea quae quisque agit et quando utitur. Sit instar est.
si kubectl patch
quae comparationem non includit apply
ΠΈ patch
. Articulus hic varias optiones spectabit, tum proprium uniuscuiusque usum.
Per vitam cycli Kubernetarum (ministerium, instruere, ingressu, etc.) interdum debes mutare, addere vel removere aliquas possessiones huius subsidii. Exempli causa, notam addere, numerum replicationum augere vel diminuere.
Kubernetes CLI
Si iam laboratis cum Kubernetes racemis per CLI, iam nota es apply
ΠΈ edit
. Team apply
legit resource specification from the file and makes an "upsert" to the Kubernetes clusters, i.e. Substantiam creat si non est, ac updates eam si existit. Team edit
opum per API legit, deinde subsidia specificationem ad fasciculi localem scribit, quae tunc in editore textu aperitur. Post te recensere et tabellam serva; kubectl
mutationes factas per API mittet, quae mutationes harum subsidii diligenter adhibebit.
Non novit mandata patch
ΠΈ replace
. Team patch
sino te mutare partem specificationis subsidii, modo partem mutatam in linea imperativa. Team replace
idem quod edit
sed omnia manually facienda sunt: ββnecesse est ut hodiernam versionem subsidii specificationis excipere, exempli gratia, usura kubectl get -o yaml
edit, deinde utere replace
ut update resource secundum speciem mutatam. Team replace
non laborabit si aliquae mutationes factae sunt inter lectionem et locum subsidii.
Kubernetes API
Probabiliter nota cum modis CoreV1().Pods().Update()
, replaceNamespacedService
aut patch_namespaced_deployment
, si opus ligaturas per PUT
ΠΈ PATCH
... quibus update
ΠΈ replace
used PUT
quod patch
quantumvis leve, usus PATCH
.
Est memorabile est quod, kubectl
etiam botri laborat per API. In aliis verbis, kubectl
est fascia in summitate bibliothecae clientis pro lingua Go, quae late facultatem praebet ut subcommandarum in forma magis compacta et lectibiliora provideant praeter vexillum API facultatibus. Exempli gratia, ut jam notavi, methodus apply
non memoratur in praecedenti paragrapho. Currently (May 2020, proxime. translator) omnis logica kubectl apply
, i.e. opes non existentes creandi et adaequationis entium, totum in codice latus operatur kubectl
. Conatus fiunt apply
ad API latus, sed adhuc in beta est. Plura infra scribemus.
Repeciare per default
Optimus usus patch
si vis renovare eopia. Hoc est quomodo utriusque clientis bibliothecae in Kubernetes API et kubectl
(nec mirum, cum fascia clientis sit; proxime. translator).
Opus opportuna
Omnes teams kubectl
apply
, edit
ΠΈ patch
utere modum PATCH
in HTTP petitiones ut update existentis resource. Si accuratius exsecutionem mandatorum inseras, omnes accessu utuntur patch
ut aliis accessionibus uti possim (de hoc infra plura). Appropinquatio opportuna-merge inaequationis conatus ad "rectum acquirere", applicata specificatione cum specificatione existente. Specialius, nititur res simul et vestit, quae per mutationes elogia tendunt. Nam ut cursus mandatum patch
cum nova environment variabilis in vasculi specificatione, facit ut ambitus variabilis addatur potius variabilibus ambitus existentibus quam scribendo. Ad hoc utens accessu removendum, parametri valorem ad nullum in praevisa specificatione cogere debes. Quod ex iugis kubectl
Optimum est uti ad updating?
Si vis creare et administrare facultates tuas utens kubectl apply
Cum adaequationis melius semper uti kubectl apply
ut kubectl
configurationem administrare et recte indagare mutationes ab applicatione ad applicationem postulare posse. Uti semper apply
est, quod servat vestigia cuiusdam specificationis antea applicatae, permittens eam cognoscere quando specificatio proprietatum et elementorum ordinata explicite removetur. Hoc concedit ut uti apply
proprietates et elementa ordinata removere, dum normalis merge opportuna non laborabit. Teams edit
ΠΈ patch
non update notas quod kubectl apply
utitur ad inuestigandum suas mutationes, ideo nullas mutationes quae per Kubernetes API fiunt et perscrutantur, sed fiunt per imperia. edit
ΠΈ patch
Invisibilia ad subsequentia mandata apply
, Id est, apply
eas non removet, etiamsi in specificatione initus non comparent apply
( Documenta dicit edit
ΠΈ patch
fac updates ut notas usus apply
sed usu β non).
Si non uti imperium apply
Potest esse quod edit
autem patch
id quod maxime convenit mutato imperio eligens. Cum addendo et mutando proprietates BOM, utraque ratio fere eadem est. Cum proprietatibus sive ordinata elementis speciem delendo edit
se habet sicut unum tempus Lorem apply
, e vestigio observatio qualis ante et post editum fuit, ut proprietates et elementa ordinata ab subsidio explicite removere potes. Opus expresse declarare valorem proprietatis ad nullum in specificatione pro patch
de eo demere de eopia. Removere elementum ordinata utens opportuna-merge patching magis implicata est quia usum praescriptionum merge requirit. Vide alias upgrade accessiones infra pro oppositorum viabilium.
Modi renovationis efficiendi in bibliotheca clientis, quae similiter se habent cum mandatis supra kubectl
, apponi in petitionibus content-type
Π² application/strategic-merge-patch+json
. Si proprietates in specificatione removere vis, bona sua simili modo nullas explicite ponere debes kubectl patch
. Si ordinata elementa removere debes, normas confundas in renovatione specificationis includere vel diverso accessu ad updates utere.
Alius aditus ad updates
Kubernetes adiuvat duas alias renovationes aditus; kubectl patch --type=merge
. Cum operando cum Kubernetibus API, modum petitionis utere debes PATCH
et institutionem content-type
Π² application/merge-patch+json
.
Plenitudinem accessus JSON magis quam subsidii specificationem partialem praebens, utitur ut mutationes quas vis ad subsidium ordinandum, in quo singula ordinatae descriptionem mutationis factae subsidii repraesentat. Accessus hic flexibilior et validior est modus ad significandas mutationes factas, sed cum pretio enumerationis mutationes in forma separata, non-Kubernetes factae, quam particularis subsidii specificatio mittens. IN' kubectl
potes eligere JSON lacus utens kubectl patch --type=json
. Cum Kubernetes API utentes, aditus opera utens methodo rogatu PATCH
et institutionem content-type
Π² application/json-patch+json
.
Non opus est fiducia - usus reponere
In quibusdam casibus pro certo debes nullas mutationes fieri subsidio inter tempus quod legitur subsidii et cum renovatur. Id est, fac ut omnes mutationes erunt nuclei. In hoc casu, ad renovandas facultates uti debes replace
. Exempli gratia, si ConfigMap habes cum calculo quod multiplicibus fontibus renovatum est, scito duos fontes non simul calculum renovare, renovationem perdendi causando. Demonstrare, meditare successu rerum utendo accessu patch
:
- A et B obtine statum hodiernam subsidii ex API
- Unusquisque localiter specificationem ab uno calculo augendo addit et "A" vel "B" respective ad notam "novatis".
- Et subsidia paulo citius renovat
- B updates eopia
Quam ob rem renovatio A amissa est. Ultima operatio patch
vincit, calculus ab uno loco duorum incrementa est, et valor notationis "B" cum "B" terminationibus "A" non continet. Conferamus superiora cum iis quae fiunt cum accessu updates fiunt replace
:
- A et B obtine statum hodiernam subsidii ex API
- Unusquisque localiter specificationem ab uno calculo augendo addit et "A" vel "B" respective ad notam "novatis".
- Et subsidia paulo citius renovat
- B subsidii renovare conatur, sed renovatio ab API repudiatur quia versio resource in specificatione est
replace
non congruit hodiernae versioni subsidii in Kubernetes, quia versio subsidii aucta opera substituendi ab A est.
In casu superiore, B subsidia iterum arcessere debebit, in novum statum mutabit et iterum conetur replace
. Hoc calculus efficiet ut duo et "updated" notam "AB" in fine includant.
Exemplum est, quod cum exequens replace
Subsidium totum reponitur. Specificatione usus est replace
non debet esse partialis aut in partibus ut in apply
sed completa, addito resourceVersion
in specificatione metadata. Si non para resourceVersion
vel versionem quam exhibeas non est praesens, substitutio reicietur. Itaque optimum accessum ad usum is replace
β Subsidium legite, illud renova et statim repone. utens kubectl
videri posset:
$ kubectl get deployment my-deployment -o json
| jq '.spec.template.spec.containers[0].env[1].value = "new value"'
| kubectl replace -f -
Notatu dignum est duo sequentia mandata, sequentiter exsecuta, feliciter facient, cum deployment.yaml
non habet res .metadata.resourceVersion
$ kubectl create -f deployment.yaml
$ kubectl replace -f deployment.yaml
Hoc videtur contradicere supradictis, i.e. "addere" resourceVersion
in specificatione metadata. "Numquid nefas est dicere? Non, non est, quia si kubectl
animadvertit quod non specificare resourceVersion
, perleget ex subsidio et addet speciem quam nominat, et tunc demum faciet replace
. Quia hoc est in potentia periculosum si atomicity, magicae opera omnino in parte kubectl
, ne innitaris in eo cum bibliothecis clientibus utens qui cum API operantur. In hoc casu debebis legere specificationem subsidii currentis, eam renovare ac deinde exequi PUT
rogamus.
Molestiam facere non potes - nos reponere faciamus
Aliquando debes facere mutationes aliquas quae ab API tractari non possunt. His in casibus, reponenda subsidii opprimere potes eam delendo et recreando. Hoc fit utens kubectl replace --force
. Praeceptum currens statim facultates removet ac deinde eas a suppeditata specificatione recreat. Non est vis "reponere" tractorem in API, quod ut per API id fiat, duas operationes praestare debes. Primum auxilium delere debes pro eo gracePeriodSeconds
ut nulla (0) et propagationPolicy
in "Background" ac deinde hoc auxilium re-creare cum specificatione desiderata.
Monitum: Hic aditus in potentia periculosus est et ad indefinitum statum perducet.
Applicare in calculonis servi parte
Ut supra dictum est, tincidunt Kubernetes ad logicam exsequendam operam dant apply
ex kubectl
in Kubernetes API. Logica apply
available in Kubernetes 1.18 via kubectl apply --server-side
aut per API utendi modum PATCH
Ρ content-type
application/apply-patch+YAML
.
Nota: JSON valet etiam YAML, sic specificationem mittere potes ut JSON etiam si
content-type
eritapplication/apply-patch+yaml
.
Praeter quod logica kubectl
omnibus praesto fit per API, apply
in calculonis servi, vestigia servat qui agros in specificatione habet, ita multiplicis accessus ad certaminum liberorum edendam secure permittens. Id est, si apply
in parte ministri latius fiet, procuratio instrumenti universalis secure apparebit pro diversis clientibus, exempli gratia, kubectl, Pulumi vel Terraform, GitOps, necnon scriptorum auto-scriptorum utentium librariorum clientium.
results
Spero hanc brevem contemplationem diversimode ad facultates in racemis renovandas tibi profuisse. Bonum est scire quod non solum est applicare versus reponere, potest auxilium renovare utendo applicare, recensere, commissuram, vel reponere. Post omnia, in principio, unaquaeque accessus suam partem applicationis habet. Pro mutationibus atomicis, repone potior: alias, opportuna-merge commissura utere debeas adhibere. Saltem, expecto te intelligere te non posse credere Google vel StackOerflow cum inquisitione "kubernetes nobis applicandi". Saltem usque ad hunc articulum responsum praesentem substituit.
Source: www.habr.com