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.
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:
He paʻakikī hana maʻalahi.
Pehea hōʻike hoʻonohonoho ma Git? Pehea e nānā ai i nā loli i hana ʻia i ka pūʻulu?
Pehea e hoʻolako ai hana hou nā hoʻonohonoho ma ka hoʻomaka hou?
...
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.
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:
ʻO kahi pūʻulu memo e pili ana i nā mea hou i werf: