Hoʻohui 3 ala i werf: kau ʻia i nā Kubernetes me Helm "ma nā steroids"

ʻO ka mea a mākou (a ʻaʻole wale mākou) i kali ai no ka manawa lōʻihi i hiki mai: werf, kā mākou mea hoʻohana Open Source no ke kūkulu ʻana i nā noi a me ka hāʻawi ʻana iā Kubernetes, ke kākoʻo nei i ka hoʻohana ʻana i nā hoʻololi me ka hoʻohana ʻana i nā ʻāpana merge 3-way! Ma waho aʻe o kēia, hiki ke hoʻohana i nā kumuwaiwai K8 i loaʻa i nā hoʻokuʻu Helm me ka ʻole o ke kūkulu hou ʻana i kēia mau kumuwaiwai.

Hoʻohui 3 ala i werf: kau ʻia i nā Kubernetes me Helm "ma nā steroids"

Inā pōkole loa, hoʻokomo mākou WERF_THREE_WAY_MERGE=enabled - loaʻa iā mākou ka hoʻolālā "e like me ka kubectl apply", kūpono me nā mea hoʻokomo Helm 2 a ʻoi aku ka liʻiliʻi.

Akā, e hoʻomaka kākou me ka manaʻo: he aha ke ʻano o nā ʻāpana 3-way-merge, pehea i hele mai ai ka poʻe me ke ala e hana ai iā lākou, a no ke aha lākou i koʻikoʻi ai i nā kaʻina CI/CD me nā ʻōnaehana kumu Kubernetes? A ma hope o kēlā, e ʻike kākou i ka 3-way-merge i werf, he aha nā ʻano i hoʻohana ʻia e ka paʻamau a pehea e hoʻokele ai.

He aha ka 3-way-merge patch?

No laila, e hoʻomaka me ka hana o ka ʻōwili ʻana i nā kumuwaiwai i wehewehe ʻia ma YAML hōʻike i nā Kubernetes.

No ka hana ʻana me nā kumuwaiwai, hāʻawi ka Kubernetes API i kēia mau hana maʻamau: hana, hoʻopaʻa, hoʻololi a holoi. Ua manaʻo ʻia me kā lākou kōkua he mea pono e kūkulu i kahi rollout mau o nā kumuwaiwai i ka pūpū. Pehea?

nā kauoha koʻikoʻi kubectl

ʻO ke ala mua i ka hoʻokele ʻana i nā mea ma Kubernetes ʻo ia ka hoʻohana ʻana i nā kauoha kubectl imperative e hana, hoʻololi, a holoi i kēia mau mea. Hoʻopuka maʻalahi:

  • hui kubectl run hiki iā ʻoe ke holo i ka Deployment a i ʻole Job:
    kubectl run --generator=deployment/apps.v1 DEPLOYMENT_NAME --image=IMAGE
  • hui kubectl scale - hoʻololi i ka helu o nā kope:
    kubectl scale --replicas=3 deployment/mysql
  • a pēlā aku nō.

He kūpono paha kēia ala i ka nānā mua ʻana. Eia nō naʻe, aia nā pilikia:

  1. He paʻakikī hana maʻalahi.
  2. Pehea hōʻike hoʻonohonoho ma Git? Pehea e nānā ai i nā loli i hana ʻia i ka pūʻulu?
  3. Pehea e hoʻolako ai hana hou nā hoʻonohonoho ma ka hoʻomaka hou?
  4. ...

Akaka ʻaʻole kūpono kēia ala me ka mālama ʻana i ka noi a me nā ʻōnaehana e like me ke code (IaC; a i ʻole GitOps ma ke ʻano he koho hou aʻe, e loaʻa ana ka kaulana i ka kaiaola Kubernetes). No laila, ʻaʻole i loaʻa i kēia mau kauoha ka hoʻomohala hou ma kubectl.

Hana, loaʻa, hoʻololi a holoi i nā hana

Me ka mea mua hana ʻana maʻalahi: hoʻouna i ka hōʻike i ka hana create kube api a ua hana ʻia ke kumuwaiwai. Hiki ke mālama ʻia ka hōʻike YAML o ka hōʻike ma Git a hana ʻia me ke kauoha kubectl create -f manifest.yaml.

С ka hemo ʻana maʻalahi hoʻi: hoʻololi i ka mea like manifest.yaml mai Git i ka hui kubectl delete -f manifest.yaml.

Ka lawelawe replace hiki iā ʻoe ke hoʻololi piha i ka hoʻonohonoho waiwai me kahi mea hou, me ka hana ʻole ʻana i ka kumuwaiwai. ʻO ia hoʻi, ma mua o ka hoʻololi ʻana i kahi kumuwaiwai, pono e nīnau i ka mana o kēia manawa me ka hana get, hoʻololi a hōʻano hou me ka hana replace. kūkulu ʻia ka kube apiserver hoʻopaʻa manaʻo a inā ma hope o ka ʻoki ʻana get ua loli ka mea, a laila ka hana replace ʻaʻole e hana.

No ka mālama ʻana i ka hoʻonohonoho ma Git a hoʻonui iā ia me ka hoʻohana ʻana i ka hoʻololi, pono ʻoe e hana i ka hana get, hoʻohui i ka config mai Git me ka mea i loaʻa iā mākou, a hoʻokō replace. Ma ka maʻamau, ʻae wale ʻo kubectl iā ʻoe e hoʻohana i ke kauoha kubectl replace -f manifest.yamlkahi manifest.yaml - kahi hōʻike i mākaukau piha ʻia (i kā mākou hihia, hui ʻia) pono e hoʻokomo ʻia. ʻIke ʻia e pono ka mea hoʻohana e hoʻokō i nā hōʻike merge, ʻaʻole ia he mea liʻiliʻi ...

He mea kūpono hoʻi e ʻike ʻoiai manifest.yaml a mālama ʻia ma Git, ʻaʻole hiki iā mākou ke ʻike ma mua inā pono e hana i kahi mea a hoʻonui paha - pono e hana ʻia kēia e ka polokalamu hoʻohana.

Hōʻuluʻulu: hiki iā mākou ke kūkulu i kahi rollout mau me ka hoʻohana wale ʻana i ka hana, hoʻololi a hoʻopau, e hōʻoia ana e mālama ʻia ka hoʻonohonoho ʻōnaehana ma Git me ke code a me ka CI / CD kūpono?

Ma ke kumu, hiki iā mākou ... No kēia pono ʻoe e hoʻokō i ka hana hoʻohui manifestos a me kekahi ʻano paʻa e:

  • nānā i ka loaʻa ʻana o kahi mea i loko o ka pūpū,
  • hana mua i ka hana waiwai,
  • hōʻano hou a holoi paha.

Ke hoʻohou nei, e ʻoluʻolu e hoʻomaopopo i kēlā ua loli paha ke kumu waiwai mai ka hope get a e hoʻopaʻa maʻalahi i ka hihia o ka laka maikaʻi - e hana hou i nā hoʻāʻo hou.

Eia naʻe, no ke aha e hana hou ai i ka huila ke hāʻawi ʻo kube-apiserver i kahi ala ʻē aʻe e hoʻonui ai i nā kumuwaiwai: ka hana patch, ka mea e hoʻomaha ai i ka mea hoʻohana i kekahi o nā pilikia i wehewehe ʻia?

one

I kēia manawa hele mākou i nā pā.

ʻO Patches ke ala mua e hoʻololi ai i nā mea i loaʻa ma Kubernetes. Hana patch hana ia penei:

  • Pono ka mea hoʻohana kube-apiserver e hoʻouna i kahi pā i ka palapala JSON a kuhikuhi i ka mea,
  • a ʻo apiserver ponoʻī e hana i ke kūlana o kēia manawa a lawe mai i ke ʻano i makemake ʻia.

ʻAʻole koi ʻia ka laka Optimistic i kēia hihia. ʻOi aku ka ʻoi aku o kēia hana ma mua o ka hoʻololi ʻana, ʻoiai i ka wā mua he ʻano ʻē aʻe paha ia.

I kēia ala:

  • hoʻohana i kahi hana create hana mākou i kahi mea e like me ka hōʻike mai Git,
  • me ke kōkuaʻana o delete - holoi inā ʻaʻole pono ka mea,
  • me ke kōkuaʻana o patch - hoʻololi mākou i ka mea, lawe iā ia i ke ʻano i wehewehe ʻia ma Git.

Eia naʻe, no ka hana ʻana i kēia, pono ʻoe e hana kāʻei pololei!

Pehea ka hana ʻana o nā pā ma Helm 2: 2-way-merge

Ke kau mua ʻoe i kahi hoʻokuʻu, hana ʻo Helm i ka hana create no nā kumuwaiwai pakuhi.

Ke hoʻohou nei i kahi hoʻokuʻu Helm no kēlā me kēia kumuwaiwai:

  • e noʻonoʻo i ka pā ma waena o ka mana punawai mai ka pakuhi mua a me ka mana o ka pakuhi o kēia manawa,
  • pili i kēia pā.

E kapa mākou i kēia pā 2-ʻaoʻao merge patch, no ka mea, ua komo nā manifesto 2 i kāna hana ʻana:

  • hōʻike waiwai mai ka hoʻokuʻu mua ʻana,
  • hōʻike waiwai mai ka punawai o kēia manawa.

Ke wehe i ka hana delete i ka kube apiserver ua kāhea ʻia no nā kumuwaiwai i haʻi ʻia ma ka hoʻokuʻu mua, akā ʻaʻole i haʻi ʻia i kēia manawa.

He pilikia ka 2 way merge patch approach: alakaʻi ia i ma waho o ka sync me ke kūlana maoli o ka waiwai i loko o ka pūpū a me ka hōʻike ma Git.

Hoʻohālike o ka pilikia me kahi laʻana

  • Ma Git, mālama ʻia kahi pakuhi i kahi hōʻike i loko o ke kahua image He mea nui ka hoʻolālā ubuntu:18.04.
  • Mea hoʻohana ma o kubectl edit hoʻololi i ka waiwai o kēia kahua i ubuntu:19.04.
  • Ke kau hou i ka pakuhi Helm ʻaʻole ia e hana i kahi pā, no ka mea, ke kula image i ka mana mua o ka hoʻokuʻu ʻana a ma ka pakuhi o kēia manawa ua like.
  • Ma hope o ka hana hou ʻana image koe ubuntu:19.04, ʻoiai ke ʻōlelo nei ka pakuhi ubuntu:18.04.

Loaʻa iā mākou ka desynchronization a nalowale ka declarativeness.

He aha ke kumu waiwai i hoʻonohonoho ʻia?

Ma keʻano maʻamau piha ʻAʻole hiki ke loaʻa kahi hoʻokūkū ma waena o ka hōʻike kumu i loko o kahi pūʻulu holo a me ka hōʻike mai Git. No ka mea, ma kahi hōʻike maoli, aia paha nā hōʻike / lepili lawelawe, nā ipu hou a me nā ʻikepili ʻē aʻe i hoʻohui ʻia a hoʻoneʻe ʻia mai ka kumuwaiwai e kekahi mau mea hoʻokele. ʻAʻole hiki iā mākou a makemake ʻole e mālama i kēia ʻikepili ma Git. Eia nō naʻe, makemake mākou i nā māla a mākou i kuhikuhi pono ai ma Git e lawe i nā waiwai kūpono i ka wā o ka rollout.

He mea laulā loa ia lula kumu waiwai i hoʻonohonoho ʻia: i ka wā e ʻōwili ai i kahi punawai, hiki iā ʻoe ke hoʻololi a holoi paha i kēlā mau māla i hōʻike maopopo ʻia ma ka hōʻike mai Git (a i ʻole i kuhikuhi ʻia ma ka mana mua a ua holoi ʻia i kēia manawa).

3-ʻaoʻao merge patch

Manaʻo manaʻo 3-ʻaoʻao merge patch: e hana i kahi papa ma waena o ka mana hope loa o ka hōʻike mai Git a me ka mana i manaʻo ʻia o ka hōʻike mai Git, e noʻonoʻo ana i ka mana o kēia manawa o ka hōʻike mai ka pūʻulu holo. Pono e hoʻokō ka pā i ka hopena me ke kānāwai kumu waiwai i hoʻonohonoho ʻia:

  • hoʻohui ʻia nā kahua hou i hoʻohui ʻia i ka mana i hoʻopaʻa ʻia me ka hoʻohana ʻana i kahi pā;
  • ua hoʻonohonoho hou ʻia nā kahua i loaʻa i ka mana hope i noi ʻia a ʻaʻole i loaʻa i ka mana i koho ʻia me ka hoʻohana ʻana i kahi pā;
  • nā kahua i ka mana o kēia manawa o ka mea i ʻokoʻa mai ka mana i manaʻo ʻia o ka hōʻike e hōʻano hou ʻia me ka hoʻohana ʻana i ka patch.

Aia ma luna o kēia kumumanaʻo e hoʻopuka ai i nā patch kubectl apply:

  • ʻO ka mana hope loa o ka hōʻike e mālama ʻia ma ka hōʻike o ka mea ponoʻī,
  • pahuhopu - lawe ʻia mai ka faila YAML i kuhikuhi ʻia,
  • ʻo ka mea i kēia manawa mai kahi hui holo.

I kēia manawa ua hoʻokaʻawale mākou i ke kumumanaʻo, ua hiki i ka manawa e haʻi iā ʻoe i ka mea a mākou i hana ai ma werf.

Ke noi nei i nā loli i ka werf

Ma mua, ua hoʻohana ʻo werf, e like me Helm 2, i nā ʻāpana 2-way-merge.

Hoʻoponopono paʻi

I mea e hoʻololi ai i kahi ʻano patches hou - 3-way-merge - ʻo ka hana mua mākou i hoʻokomo ai i ka mea i kapa ʻia hoʻoponopono hou.

Ke hoʻohana ʻia nei, hoʻohana ʻia kahi patch 2-way-merge maʻamau, akā hoʻopuka pū ʻo werf i kahi patch e hoʻohui i ke kūlana maoli o ka punawai me ka mea i kākau ʻia ma Git (ua hana ʻia kēlā ʻāpana me ka hoʻohana ʻana i ka lula kumu i hoʻonohonoho ʻia ma luna) .

Inā loaʻa kahi desynchronization, i ka pau ʻana o ka hoʻolaha ʻana e loaʻa i ka mea hoʻohana he WARNING me kahi memo e pili ana a me kahi pākuʻi pono e hoʻopili ʻia e lawe i ka punawai i kahi palapala synchronized. Hoʻopaʻa ʻia kēia ʻāpana i kahi hōʻike kūikawā werf.io/repair-patch. Ua manaʻo ʻia ʻo nā lima o ka mea hoʻohana ia iho e hoʻopili i kēia pā: ʻaʻole e hoʻopili ʻo werf iā ia.

ʻO ka hana ʻana i nā pākuʻi hoʻoponopono he ana manawa pōkole e hiki ai iā ʻoe ke hoʻāʻo maoli i ka hana ʻana o nā pākuʻi e pili ana i ke kumu 3-way-merge, akā ʻaʻole e hoʻopili aunoa i kēia mau pā. I kēia manawa, hoʻohana ʻia kēia ʻano hana ma ka paʻamau.

3-way-merge patch wale no nā mea hou

E hoʻomaka ana i ka lā 1 Dekemaba, 2019, hoʻomaka nā mana beta a me alpha o werf ma ke ʻano e hoʻohana i nā ʻāpana 3-way-merge piha piha no ka hoʻopili ʻana i nā loli i nā hoʻokuʻu Helm hou i ʻōwili ʻia ma o werf. E hoʻohana mau ʻia nā hoʻokuʻu ʻana i kēia manawa i ka hoʻohana ʻana i ke ala 2-way-merge + repair patch.

Hiki ke hoʻohana ʻia kēia ʻano hana ma ka hoʻonohonoho ʻana WERF_THREE_WAY_MERGE_MODE=onlyNewReleases i kēia manawa.

i hoʻopuka: ua ʻike ʻia ka hiʻohiʻona ma werf ma luna o kekahi mau hoʻokuʻu: ma ke kahawai alpha ua mākaukau me ka mana v1.0.5-alpha.19, a ma ke ala beta - me v1.0.4-beta.20.

3-way-merge patch no nā hoʻokuʻu a pau

E hoʻomaka ana i ka lā 15 o Kekemapa, 2019, hoʻomaka nā mana beta a me alpha o werf e hoʻohana i nā patches 3-way-merge piha ma ka paʻamau e hoʻopili i nā loli i nā hoʻokuʻu āpau.

Hiki ke hoʻohana ʻia kēia ʻano hana ma ka hoʻonohonoho ʻana WERF_THREE_WAY_MERGE_MODE=enabled i kēia manawa.

He aha kāu e hana ai me ka hoʻonui ʻana i nā kumuwaiwai?

Aia 2 ʻano o ka autoscaling ma Kubernetes: HPA (horizontal) a me VPA (vertical).

Koho 'akomi 'o Horizontal i ka helu o nā replicas, vertical - ka helu o nā kumuwaiwai. Hōʻike ʻia ka helu o nā kope a me nā pono waiwai ma ka hōʻike kumu waiwai (e ʻike i ka Resource Manifest). spec.replicas ai ole ia, spec.containers[].resources.limits.cpu, spec.containers[].resources.limits.memory и keʻano).

Ka pilikia: inā hoʻonohonoho ka mea hoʻohana i kahi kumuwaiwai i loko o ka pakuhi i mea e kuhikuhi ai i kekahi mau waiwai no nā kumuwaiwai a i ʻole replicas a hiki i nā autoscalers ke hoʻohana ʻia no kēia kumuwaiwai, a laila me kēlā me kēia deployment werf e hoʻonohonoho hou i kēia mau waiwai i ka mea i kākau ʻia ma ka palapala hōʻike. .

ʻElua mau hoʻonā i ka pilikia. I ka hoʻomaka ʻana, ʻoi aku ka maikaʻi o ka pale ʻana i ka wehewehe kikoʻī ʻana i nā waiwai autoscaled i ka hōʻike palapala. Inā ʻaʻole kūpono kēia koho no kekahi kumu (no ka laʻana, no ka mea maʻalahi ke kau ʻana i nā palena kumu waiwai mua a me ka helu o nā replicas i ka pakuhi), a laila hāʻawi ʻo werf i nā annotation penei:

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

Inā loaʻa kēlā ʻano hōʻike, ʻaʻole e hoʻonohonoho hou ʻo werf i nā koina e pili ana i kēlā me kēia kau ʻana, akā e hoʻonohonoho wale iā lākou i ka wā i hana mua ʻia ai ke kumu.

No nā kikoʻī hou aku, e ʻike i ka palapala papahana no HPA и VPA.

E pāpā i ka hoʻohana ʻana i ka patch 3-way-merge

Hiki i ka mea hoʻohana ke pāpā i ka hoʻohana ʻana i nā pāpaʻi hou ma werf me ka hoʻohana ʻana i kahi ʻano hoʻololi kaiapuni WERF_THREE_WAY_MERGE_MODE=disabled. Eia naʻe, hoʻomaka Mai Malaki 1, 2020, ʻaʻole pili kēia pāpā. a hiki ke hoʻohana wale i nā ʻāpana 3-way-merge.

Hoʻokomo i nā kumuwaiwai ma werf

ʻO ka hoʻomaʻamaʻa ʻana i ke ʻano o ka hoʻopili ʻana i nā hoʻololi me 3-way-merge patches i hiki iā mākou ke hoʻokō koke i kahi hiʻohiʻona e like me ka hoʻohana ʻana i nā kumuwaiwai i loaʻa i ka pūʻulu i ka hoʻokuʻu Helm.

He pilikia ko Helm 2: ʻaʻole hiki iā ʻoe ke hoʻohui i kahi kumuwaiwai i ka pakuhi i nā hōʻike i loaʻa i loko o ka pūʻulu me ka ʻole o ka hana hou ʻana i kēia kumuwaiwai mai ka wā ʻōpala (nānā. #6031, #3275). Ua aʻo mākou iā werf e ʻae i nā kumuwaiwai i loaʻa no ka hoʻokuʻu ʻana. No ka hana ʻana i kēia, pono ʻoe e hoʻokomo i kahi hōʻike ma ka mana o kēia manawa o ka punawai mai ka pūʻulu holo (e laʻa, me ka hoʻohana ʻana. kubectl edit):

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

I kēia manawa pono e wehewehe ʻia ka punawai ma ka pakuhi a i ka manawa aʻe e hoʻopuka ai ʻo werf i kahi hoʻokuʻu me ka inoa kūpono, e ʻae ʻia ka kumuwaiwai i kēia hoʻokuʻu ʻana a noho ʻia ma lalo o kāna mana. Eia kekahi, ma ke kaʻina o ka ʻae ʻana i kahi kumuwaiwai no ka hoʻokuʻu ʻana, e lawe mai ʻo werf i ke kūlana o kēia manawa o ka punawai mai ka hui holo ʻana i ka mokuʻāina i wehewehe ʻia ma ka pakuhi, me ka hoʻohana ʻana i nā patches 3-way-merge like a me ke kānāwai kumu waiwai synchronized.

i hoʻopuka: hoʻonohonoho WERF_THREE_WAY_MERGE_MODE ʻaʻole pili i ka lawe ʻana i nā kumuwaiwai - i ka hihia o ka hāpai ʻana, hoʻohana mau ʻia kahi patch 3-way-merge.

Nā kikoʻī - ma palapala.

Nā hopena a me nā hoʻolālā e hiki mai ana

Manaʻo wau ma hope o kēia ʻatikala ua ʻoi aku ka maopopo o ke ʻano o ka 3-way-merge patch a me ke kumu i hele mai ai lākou. Mai ka manaʻo kūpono o ka hoʻomohala ʻana i ka pāhana werf, ʻo kā lākou hoʻokō ʻana he hana ʻē aʻe i ka hoʻomaikaʻi ʻana i ka hoʻolaha ʻana e like me Helm. I kēia manawa hiki iā ʻoe ke poina e pili ana i nā pilikia me ka hoʻonohonoho hoʻonohonoho hoʻonohonoho ʻana i ala pinepine i ka wā e hoʻohana ai iā Helm 2. Ma ka manawa like, ua hoʻohui ʻia kahi hiʻohiʻona hou o ka hoʻohana ʻana i nā kumuwaiwai Kubernetes i hoʻoiho ʻia i ka hoʻokuʻu Helm.

Aia kekahi mau pilikia a me nā paʻakikī me nā hoʻolaha e like me Helm, e like me ka hoʻohana ʻana i nā template Go, a mākou e hoʻomau ai e kamaʻilio.

Hiki ke loaʻa ka ʻike e pili ana i nā ʻano hoʻohou waiwai a me ka hoʻohana ʻana ma keia palapala palapala.

Helm 3

Pono i ka palapala kūikawā hookuuia i ka lā aʻe he mana nui hou o Helm - v3 - e hoʻohana pū ana i nā ʻāpana 3-way-merge a hoʻopau iā Tiller. Pono ka mana hou o Helm ka neʻe ʻana nā mea hoʻonoho e hoʻohuli iā lākou i loko o ke ʻano hoʻokuʻu hou.

ʻO Werf, no kāna ʻāpana, ua hoʻopau i ka hoʻohana ʻana iā Tiller, ua hoʻololi ʻia i 3-way-merge a hoʻohui ʻia. nui hou aku, oiai e noho like ana me ka Helm 2 i loaʻa (ʻaʻole pono e hoʻokō ʻia nā palapala neʻe). No laila, a hiki i ka huli ʻana o werf i Helm 3, ʻaʻole e nalowale nā ​​mea hoʻohana werf i nā pono nui o Helm 3 ma mua o Helm 2 (ua loaʻa iā werf).

Eia nō naʻe, ʻaʻole hiki ke hoʻololi ʻia ka werf i ka Helm 3 codebase a hiki i ka wā e hiki mai ana. ʻO kēia paha ka werf 1.1 a i ʻole werf 1.2 (i kēia manawa, ʻo ka mana nui o werf ʻo 1.0; no ka ʻike hou aku e pili ana i ka hāmeʻa werf versioning, ʻike. maanei). I kēia manawa, loaʻa i ka Helm 3 ka manawa e hoʻopaʻa ai.

PS

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka