Kubernetes dia manana safidy maromaro amin'ny fanavaozana loharano: ampiharo, ovay, patch ary manolo. Misy fifanjevoana momba ny zavatra ataon'ny tsirairay sy ny fotoana hampiasana azy ireo. Andeha hojerentsika izany.
raha kubectl patch
, izay tsy ahitana fampitahana apply
и patch
. Ity lahatsoratra ity dia hijery ireo safidy samihafa, ary koa ny fampiasana araka ny tokony ho izy ny tsirairay.
Mandritra ny androm-piainan'ny loharanon-karena Kubernetes (serivisy, fametrahana, fidirana, sns.), indraindray mila manova, manampy na manala ny toetra sasany amin'ity loharano ity ianao. Ohatra, ampio naoty, ampitomboy na ahena ny isan'ny kopia.
Kubernetes CLI
Raha efa miara-miasa amin'ny kluster Kubernetes amin'ny alalan'ny CLI ianao, dia efa mahazatra anao izany apply
и edit
. Ekipa apply
mamaky ny famaritana loharano avy amin'ny rakitra ary manao "upsert" amin'ny cluster Kubernetes, i.e. mamorona ny loharano raha tsy misy ary manavao azy raha misy. Ekipa edit
mamaky loharano amin'ny alàlan'ny API, avy eo manoratra ny fanondroana loharano amin'ny rakitra eo an-toerana, izay misokatra amin'ny tonian-dahatsoratra. Rehefa avy manitsy sy mitahiry ny rakitra ianao, kubectl
dia handefa ny fanovana natao tamin'ny alàlan'ny API, izay hampihatra tsara ireo fanovana ireo amin'ny loharano.
Tsy ny rehetra no mahalala ny baiko patch
и replace
. Ekipa patch
mamela anao hanova ny ampahany amin'ny fanondroana loharanon-karena, manome afa-tsy ny ampahany niova eo amin'ny baiko baiko. Ekipa replace
miasa mitovy amin'ny edit
, fa mila atao amin'ny tanana ny zava-drehetra: mila misintona ny dikan-teny ankehitriny momba ny fanondroana loharano ianao, ohatra, mampiasa kubectl get -o yaml
, amboary izany, dia ampiasao replace
mba hanavao ny loharanon-karena araka ny voafaritra voafaritra. Ekipa replace
tsy mandeha raha misy fiovana nitranga teo anelanelan'ny famakiana sy fanoloana ny loharano.
Kubernetes API
Fantatrao angamba ny fomba CoreV1().Pods().Update()
, replaceNamespacedService
na patch_namespaced_deployment
, raha miasa miaraka amin'ny clusters amin'ny PUT
и PATCH
... izay update
и replace
fampiasana PUT
ary patch
, na dia tsy misy dikany aza izany, dia ampiasaina PATCH
.
Tsara ny manamarika izany kubectl
miasa miaraka amin'ny cluster amin'ny alàlan'ny API. Raha lazaina amin'ny fomba hafa, kubectl
dia fonosina eo an-tampon'ny tranombokin'ny mpanjifa ho an'ny fiteny Go, izay manome ny fahafahana manome subcommands amin'ny endrika mirindra kokoa sy mora vakina ankoatra ny fahaizan'ny API mahazatra. Ohatra, araka ny efa tsikaritrareo, ny fomba apply
tsy voalaza etsy ambony ao amin'ny andalana teo aloha. Amin'izao fotoana izao (Mey 2020, eo ho eo MPANDIKA TENY) lojika rehetra kubectl apply
, i.e. mamorona loharano tsy misy ary manavao ny efa misy, miasa tanteraka amin'ny lafiny code kubectl
. Misy ny ezaka atao apply
amin'ny lafiny API, fa mbola ao amin'ny beta. Hanoratra amin'ny antsipiriany bebe kokoa etsy ambany aho.
Patch amin'ny alàlan'ny default
Fampiasana tsara indrindra patch
, raha te hanavao ny loharano ianao. Izany no fomba fiasan'ny tranomboky mpanjifa eo an-tampon'ny Kubernetes API sy kubectl
(tsy mahagaga, satria fonosana ho an'ny tranomboky mpanjifa izy io, eo ho eo MPANDIKA TENY).
Miasa stratejika
Ny ekipa rehetra kubectl
apply
, edit
и patch
mampiasa ny fomba PATCH
amin'ny fangatahana HTTP hanavao ny loharano efa misy. Raha mandinika ny fampiharana ny baiko amin'ny antsipiriany kokoa ianao, dia samy mampiasa ny fomba fiasa izy ireo patch
dia afaka mampiasa fomba hafa (bebe kokoa momba izany eto ambany). Ny fomba fiasa patching stratejika dia manandrana "hahazo izany tsara" amin'ny alàlan'ny fampifangaroana ny fepetra omena amin'ny fepetra efa misy. Amin'ny ankapobeny, miezaka ny manambatra ny zavatra sy ny array, izay midika fa ny fanovana dia mirona ho additive. Ohatra, mihazakazaka ny baiko patch
miaraka amin'ny fari-piainan'ny tontolo iainana vaovao ao amin'ny fanondroana fitoeran'entana pod, mahatonga an'io fari-piainan'ny tontolo iainana io ho ampidirina amin'ny fari-piainan'ny tontolo iainana efa misy fa tsy mandika azy ireo. Mba hanesorana amin'ny fampiasana an'io fomba io dia tsy maintsy manery ny sandan'ny paramètre ho null ianao amin'ny famaritana nomena. Iza amin'ireo ekipa kubectl
Tsara kokoa ve ny mampiasa ny fanavaozana?
Raha mamorona sy mitantana ny loharanonao ianao amin'ny fampiasana kubectl apply
, rehefa manavao dia aleo ampiasaina foana kubectl apply
ny kubectl
afaka mitantana ny fandrindrana ary manara-maso tsara ny fanovana nangatahana avy amin'ny fampiharana mankany amin'ny fampiharana. Advantage ampiasaina foana apply
dia ny fitazomana ny fepetra efa nampiharina teo aloha, ahafahany mahafantatra rehefa nesorina mazava tsara ny toetra manokana sy ny singa array. Izany dia ahafahanao mampiasa apply
hanesorana ny fananana sy ny singa array, raha toa ka tsy mandeha ny fampivondronana stratejika mahazatra. Ekipa edit
и patch
aza manavao naoty izany kubectl apply
dia ampiasaina hanaraha-maso ny fiovany, ka izay fiovana rehetra arahina sy atao amin'ny alàlan'ny Kubernetes API, fa atao amin'ny baiko edit
и patch
, tsy hita amin'ny baiko manaraka apply
, izany dia apply
tsy manala azy ireo na dia tsy hita ao amin'ny toromarika fampidirana ho apply
(Ny antontan-taratasy dia milaza fa edit
и patch
manaova fanavaozana ny naoty ampiasaina apply
, fa amin'ny fampiharana - tsia).
Raha tsy mampiasa ny baiko ianao apply
, azo ampiasaina ho edit
, ary patch
, mifidy ny baiko mifanaraka indrindra amin'ny fanovana atao. Rehefa manampy sy manova ny toetran'ny BOM dia mitovy ny fomba roa. Rehefa mamafa ny toetra manokana na singa array edit
mitondra tena toy ny fandefasana indray mandeha apply
, ao anatin'izany ny fitazonana ny toetran'ny famaritana taloha sy taorian'ny fanitsiana azy, mba hahafahanao manaisotra mazava ny fananana sy singa maromaro amin'ny loharano iray. Mila mametraka mazava tsara ny sandan'ny fananana ho null ianao ao amin'ny famaritana ny patch
hanesorana azy amin'ny loharano. Sarotra kokoa ny fanesorana singa iray amin'ny fampiasana patching stratejika satria mitaky ny fampiasana torolalana fampitambatra. Jereo ny fomba fanavaozana hafa eto ambany raha te hahita safidy azo atao kokoa.
Mampihatra fomba fanavaozana ao amin'ny tranomboky mpanjifa izay mitondra tena mitovy amin'ny baiko etsy ambony kubectl
, dia tokony apetraka amin'ny fangatahana content-type
в application/strategic-merge-patch+json
. Raha te hanaisotra ny fananana amin'ny famaritana iray ianao dia mila mametraka mazava ny soatoaviny ho null amin'ny fomba mitovy kubectl patch
. Raha mila manaisotra ireo singa manara-penitra ianao dia tokony hampidirinao ny toromarika mampiray ao amin'ny fanondroana fanavaozana na mampiasa fomba fiasa hafa amin'ny fanavaozana.
Fomba hafa amin'ny fanavaozana
Kubernetes dia manohana fomba fanavaozana roa hafa: kubectl patch --type=merge
. Rehefa miasa miaraka amin'ny Kubernetes API dia tokony hampiasa ny fomba fangatahana ianao PATCH
ary fametrahana content-type
в application/merge-patch+json
.
Ny fomba fiasa patch JSON, fa tsy manome famaritana ampahany amin'ny loharano iray, dia mampiasa ny fanomezana ny fanovana tianao hatao amin'ny loharano ho toy ny array, izay ny singa tsirairay amin'ny array dia maneho ny famaritana ny fanovana natao tamin'ny loharano. Ity fomba fiasa ity dia fomba mora kokoa sy mahery vaika hanehoana ireo fanovana natao, saingy amin'ny sandan'ny fitanisana ireo fanovana atao amin'ny endrika misaraka tsy Kubernetes, fa tsy mandefa famaritana ampahany amin'ny loharano. IN kubectl
azonao atao ny misafidy patch JSON mampiasa kubectl patch --type=json
. Rehefa mampiasa ny Kubernetes API, ity fomba fiasa ity dia miasa amin'ny alàlan'ny fomba fangatahana PATCH
ary fametrahana content-type
в application/json-patch+json
.
Mila fahatokisan-tena isika - mampiasa soloina
Amin'ny toe-javatra sasany, mila mahazo antoka ianao fa tsy misy fiovana atao amin'ny loharano iray eo anelanelan'ny fotoana vakina ny loharano sy ny fanavaozana azy. Raha lazaina amin'ny teny hafa, tokony ho azonao antoka fa hisy ny fanovana rehetra atomika. Amin'ity tranga ity, mba hanavao ny loharano tokony hampiasainao replace
. Ohatra, raha manana ConfigMap ianao miaraka amin'ny kaontera nohavaozina avy amin'ny loharanom-baovao maro, dia tokony ho azonao antoka fa loharano roa no tsy manavao ny kaontera amin'ny fotoana iray, ka mahatonga ny fanavaozana ho very. Mba hampisehoana, alaivo sary an-tsaina ny filaharan'ny fisehoan-javatra mampiasa ny fomba fiasa patch
:
- A sy B dia mahazo ny toetry ny loharano amin'izao fotoana izao avy amin'ny API
- Ny tsirairay dia manavao ny fanondroana amin'ny alàlan'ny fampitomboana ny kaontera iray ary manampy ny "A" na "B" tsirairay avy amin'ny naoty "nohavaozina".
- Ary havaozina haingana kokoa ny loharano
- B dia manavao ny loharano
Vokatr'izany dia very ny fanavaozana A. Hetsika farany patch
mandresy, ny kaontera dia mitombo iray fa tsy roa, ary ny sandan'ny naoty "havaozina" dia mifarana amin'ny "B" ary tsy misy "A". Andao ampitahaina amin'ny zavatra mitranga rehefa vita ny fanavaozana amin'ny fampiasana ny fomba fiasa replace
:
- A sy B dia mahazo ny toetry ny loharano amin'izao fotoana izao avy amin'ny API
- Ny tsirairay dia manavao ny fanondroana amin'ny alàlan'ny fampitomboana ny kaontera iray ary manampy ny "A" na "B" tsirairay avy amin'ny naoty "nohavaozina".
- Ary havaozina haingana kokoa ny loharano
- B dia manandrana manavao ny loharano, saingy nolavin'ny API ny fanavaozana satria ao amin'ny famaritana ny dikan-teny.
replace
tsy mifanandrify amin'ny dikan-teny ankehitriny amin'ny loharano ao amin'ny Kubernetes satria ny dikan-ny loharanon-karena dia nampitomboina tamin'ny alalan'ny fandidiana fanoloana an'i A.
Amin'ity tranga etsy ambony ity dia tsy maintsy maka indray ny loharanon-karena i B, manao fanovana amin'ny fanjakana vaovao ary manandrana indray replace
. Izany dia hahatonga ny kaontera hitombo roa ary ny naoty "havaozina" dia hampiditra "AB" any amin'ny farany.
Ny ohatra etsy ambony dia midika fa rehefa manatanteraka replace
Nosoloina tanteraka ny loharanon-karena iray manontolo. Specification ampiasaina amin'ny replace
, tsy tokony ho ampahany, na amin'ny ampahany toy ny ao apply
, fa feno, anisan'izany ny fanampiny resourceVersion
ao amin'ny metadata specification. Raha mbola tsy navelanao resourceVersion
na ny dikan-teny omenao dia tsy amin'izao fotoana izao, ny fanoloana dia holavina. Noho izany, ny fomba tsara indrindra ampiasaina dia replace
– vakio ny loharano, havaozy ary soloy avy hatrany. mampiasa kubectl
, mety ho toy izao izany:
$ kubectl get deployment my-deployment -o json
| jq '.spec.template.spec.containers[0].env[1].value = "new value"'
| kubectl replace -f -
Tsara ny manamarika fa ireto baiko roa manaraka ireto, izay tanterahina misesy, dia hotanterahina amim-pahombiazana, satria deployment.yaml
tsy ahitana fananana .metadata.resourceVersion
$ kubectl create -f deployment.yaml
$ kubectl replace -f deployment.yaml
Toa mifanohitra amin'izay voalaza tetsy ambony io, i.e. " manampy resourceVersion
ao amin'ny metadata manokana." Diso ve ny milaza an'izany? Tsia, tsy izany, satria raha kubectl
fanamarihana izay tsy nofaritanao resourceVersion
, dia hamaky azy io avy amin'ny loharanon-karena ary ampidiriny amin'ny famaritana nofaritanao, ary avy eo dia tanteraho izany replace
. Satria mety hampidi-doza izany raha miantehitra amin'ny atomika ianao, dia miasa tanteraka ny majika kubectl
, tsy tokony hiantehitra amin'izany ianao rehefa mampiasa tranomboky mpanjifa miasa miaraka amin'ny API. Amin'ity tranga ity dia tsy maintsy mamaky ny fanondroana loharano ankehitriny ianao, manavao azy ary manatanteraka PUT
fangatahana.
Tsy afaka manao patch ianao - manao fanolo izahay
Indraindray ianao dia mila manao fanovana sasany izay tsy azon'ny API. Amin'ireo tranga ireo dia azonao atao ny manery ny fanoloana ny loharano amin'ny alàlan'ny famafana sy ny famoronana azy indray. Izany dia atao amin'ny fampiasana kubectl replace --force
. Ny fampandehanana ny baiko dia manala avy hatrany ny loharanon-karena ary avy eo dia mamerina azy ireo avy amin'ny famaritana nomena. Tsy misy mpandrindra "hanoloana hery" ao amin'ny API, ary raha te hanao izany amin'ny alàlan'ny API dia mila manao asa roa ianao. Voalohany dia mila mamafa ny loharano ianao amin'ny fametrahana azy gracePeriodSeconds
aotra (0) ary propagationPolicy
ao amin'ny "Background" ary avereno amboary ity loharano ity miaraka amin'ny famaritana tiana.
Fampitandremana: Ity fomba fiasa ity dia mety hampidi-doza ary mety hitarika amin'ny toe-javatra tsy voafaritra.
Ampiharo amin'ny lafiny mpizara
Araka ny voalaza etsy ambony, miasa amin'ny fampiharana ny lojika ny mpamorona Kubernetes apply
avy amin'ny kubectl
ao amin'ny Kubernetes API. Lojika apply
azo alaina ao amin'ny Kubernetes 1.18 amin'ny alàlan'ny kubectl apply --server-side
na amin'ny alàlan'ny API mampiasa ny fomba PATCH
с content-type
application/apply-patch+YAML
.
Fanamarihana: JSON dia YAML manan-kery ihany koa, ka azonao atao ny mandefa ny famaritana ho JSON na dia
content-type
dia hoapplication/apply-patch+yaml
.
Ankoatra izay lojika kubectl
azon'ny rehetra atao amin'ny alalan'ny API, apply
eo amin'ny lafin'ny mpizara, dia manara-maso izay tompon'andraikitra amin'ireo saha ao amin'ny famaritana, ka mamela ny fidirana maro azo antoka ho an'ny fanovana tsy misy fifandirana. Amin'ny teny hafa, raha apply
eo amin'ny lafiny mpizara dia hiparitaka bebe kokoa, hisy interface tsara fitantanana loharanon-karena azo antoka ho an'ny mpanjifa samihafa, ohatra, kubectl, Pulumi na Terraform, GitOps, ary koa ny sora-tanana nosoratan'ny tena mampiasa tranomboky mpanjifa.
vokatra
Manantena aho fa nanampy anao ity topimaso fohy momba ny fomba isan-karazany hanavaozana ireo loharano ao anaty cluster. Tsara ny mahafantatra fa tsy mihatra amin'ny fanoloana fotsiny no azo atao ny manavao loharano iray amin'ny fampiasana app, manitsy, mametaka, na manolo. Raha ny marina, amin'ny ankapobeny, ny fomba fiasa tsirairay dia manana ny faritra fampiharana azy. Ho an'ny fiovan'ny atomika, dia tsara kokoa ny manolo raha tsy izany dia tokony hampiasa patch stratejika ianao amin'ny alàlan'ny fampiharana. Farafaharatsiny, manantena aho fa takatrao fa tsy afaka matoky an'i Google na StackOerflow ianao rehefa mikaroka ny "kubernetes mihatra vs manolo". Farafaharatsiny mandra-panoloan'ity lahatsoratra ity ny valiny ankehitriny.
Source: www.habr.com