Tha am beachd air gnìomhaiche sligean gu math sìmplidh: fo-sgrìobh gu tachartasan bho nithean Kubernetes, agus nuair a gheibhear na tachartasan sin, cuir air bhog prògram taobh a-muigh, a ’toirt seachad fiosrachadh mun tachartas:
Dh’ èirich feum air nuair a thòisich gnìomhan beaga a’ nochdadh, rè obrachadh cruinneachaidhean, gu robh sinn dha-rìribh ag iarraidh fèin-ghluasad san dòigh cheart. Chaidh na gnìomhan beaga sin uile fhuasgladh le bhith a ’cleachdadh sgriobtaichean bash sìmplidh, ged, mar a tha fios agad, tha e nas fheàrr gnìomhaichean a sgrìobhadh ann an Golang. Gu dearbh, bhiodh tasgadh ann an làn-sgèile leasachadh gnìomhaiche airson gach gnìomh beag mar sin neo-èifeachdach.
Gnìomhaiche ann an 15 mionaidean
Bheir sinn sùil air eisimpleir de na ghabhas a dhèanamh fèin-ghluasadach ann an cruinneachadh Kubernetes agus mar as urrainn don ghnìomhaiche sligean cuideachadh. Bhiodh eisimpleir mar a leanas: ag ath-aithris dìomhaireachd gus faighinn gu clàr an docker.
Feumaidh pods a bhios a’ cleachdadh ìomhaighean bho chlàr prìobhaideach ceangal follaiseach a bhith aca ri dìomhaireachd le dàta airson faighinn chun chlàr. Feumar an dìomhair seo a chruthachadh anns gach ainm-àite mus cruthaichear pods. Faodar seo a dhèanamh le làimh, ach ma shuidhicheas sinn àrainneachdan fiùghantach, bidh an t-àite ainm airson aon iarrtas gu bhith tòrr. Agus mura h-eil 2-3 tagradh ann an dàrna cuid ... bidh an àireamh de dhìomhaireachd gu math mòr. Agus aon rud eile mu dhìomhaireachd: bu mhath leam an iuchair atharrachadh gus faighinn chun chlàr bho àm gu àm. Mu dheireadh, obrachaidhean làimhe mar fhuasgladh gu tur neo-èifeachdach - feumaidh sinn cruthachadh agus ùrachadh dìomhaireachdan gu fèin-ghluasadach.
Automation sìmplidh
Sgrìobhamaid sgriobt slige a ruitheas aon uair gach N diog agus a nì sgrùdadh air àiteachan ainmean airson dìomhaireachd a bhith ann, agus mura h-eil dìomhaireachd ann, thèid a chruthachadh. Is e buannachd an fhuasglaidh seo gu bheil e coltach ri sgriobt shligean ann an cron - dòigh-obrach clasaigeach agus so-thuigsinn don h-uile duine. Is e an ana-cothrom a th’ ann gum faodar àite-ainm ùr a chruthachadh san eadar-ama eadar an cur air bhog agus gum fuirich e às aonais dìomhaireachd airson ùine, a dh’ adhbhraicheas mearachdan ann a bhith a’ cur air bhog pods.
Automation le slige-obrachaidh
Gus an obraich an sgriobt againn gu ceart, feumar cur air bhog a chuir an àite an cur air bhog clasaigeach cron nuair a thèid àite-ainm a chur ris: anns a’ chùis seo, faodaidh tu dìomhaireachd a chruthachadh mus cleachd thu e. Chì sinn mar a chuireas sinn seo an gnìomh le bhith a’ cleachdadh slige-ghnìomhaiche.
An toiseach, leig dhuinn sùil a thoirt air an sgriobt. Canar dubhan ri sgriobtaichean ann an teirmean gnìomhaiche sligean. A h-uile dubhan nuair a ruith le bratach --config ag innse don ghnìomhaiche shligean mu na ceanglachan aige, i.e. air dè na tachartasan a bu chòir a chur air bhog. Anns a 'chùis againn cleachdaidh sinn onKubernetesEvent:
#!/bin/bash
if [[ $1 == "--config" ]] ; then
cat <<EOF
{
"onKubernetesEvent": [
{ "kind": "namespace",
"event":["add"]
}
]}
EOF
fi
Tha e air a mhìneachadh an seo gu bheil ùidh againn tachartasan a chuir ris (add) nithean de sheòrsa namespace.
A-nis feumaidh tu an còd a chuir ris a thèid a chuir gu bàs nuair a thachras an tachartas:
#!/bin/bash
if [[ $1 == "--config" ]] ; then
# конфигурация
cat <<EOF
{
"onKubernetesEvent": [
{ "kind": "namespace",
"event":["add"]
}
]}
EOF
else
# реакция:
# узнать, какой namespace появился
createdNamespace=$(jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH)
# создать в нём нужный секрет
kubectl create -n ${createdNamespace} -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
...
data:
...
EOF
fi
Sgoinneil! B 'e an toradh sgriobt beag, brèagha. Gus a “ath-bheothachadh”, tha dà cheum air fhàgail: ullaich an ìomhaigh agus cuir air bhog e sa bhuidheann.
Ag ullachadh ìomhaigh le dubhan
Ma choimheadas tu air an sgriobt, chì thu gu bheil na h-òrdughan gan cleachdadh kubectl и jq. Tha seo a’ ciallachadh gum feum na rudan a leanas a bhith san ìomhaigh: an dubhan againn, gnìomhaiche slige a dh’èisteas ri tachartasan agus a ruitheas an dubhan, agus na h-àitheantan a chleachdas an dubhan (kubectl agus jq). Tha ìomhaigh deiseil aig Hub.docker.com mu thràth anns a bheil slige-ghnìomhaiche, kubectl agus jq air am pacadh. Chan eil air fhàgail ach dubhan sìmplidh a chur ris Dockerfile:
Bheir sinn sùil air an dubhan a-rithist agus an turas seo sgrìobh sìos dè na gnìomhan agus leis na nithean a bhios e a’ coileanadh sa bhuidheann:
fo-sgrìobhadh do thachartasan cruthachadh spacespace;
a’ cruthachadh dìomhaireachd ann an ainmean eile seach an tè far a bheil e air a chur air bhog.
Tha e a 'tionndadh a-mach gum feum cead a bhith aig a' pod anns an tèid an ìomhaigh againn a chuir air bhog na gnìomhan sin a dhèanamh. Faodar seo a dhèanamh le bhith a’ cruthachadh do chunntas seirbheis fhèin. Feumar an cead a dhèanamh ann an cruth ClusterRole agus ClusterRoleBinding, oir tha ùidh againn ann an nithean bhon bhuidheann gu lèir.
Bidh an tuairisgeul deireannach ann an YAML a’ coimhead rudeigin mar seo:
Airson goireasachd, thèid àite-ainm fa leth a chruthachadh far an tèid an gnìomhaiche sligean a chuir air bhog agus thèid na taisbeanaidhean cruthaichte a chuir an sàs:
Sin agad e: tòisichidh an gnìomhaiche sligean, fo-sgrìobh gu tachartasan cruthachaidh namespace agus ruithidh e an dubhan nuair a bhios feum air.
Mar sin, thionndaidh sgriobt shligean sìmplidh gu bhith na fhìor ghnìomhaiche airson Kubernetes agus ag obair mar phàirt de bhuidheann. Agus seo uile às aonais pròiseas iom-fhillte a bhith a 'leasachadh ghnìomhaichean ann an Golang:
Tha dealbh eile air a' chuspair seo...
Nochdaidh sinn a bhrìgh ann am fear de na foillseachaidhean a leanas.
criathradh
Tha e math lorg nithean, ach gu tric feumar dèiligeadh riutha ag atharrachadh cuid de fheartan nithean, mar eisimpleir, gus an àireamh de mhac-samhail ann an Cleachdadh atharrachadh no gus bileagan nì atharrachadh.
Nuair a ruigeas tachartas, gheibh an gnìomhaiche shligean am foillseachadh JSON den nì. Is urrainn dhuinn na feartan anns a bheil ùidh againn anns an JSON seo a thaghadh agus an dubhan a ruith a-mhàin nuair a dh'atharraicheas iad. Tha raon ann airson seo jqFilter, far am feum thu an abairt jq a shònrachadh a thèid a chuir an sàs ann am manifesto JSON.
Mar eisimpleir, gus freagairt a thoirt do dh'atharrachaidhean ann an bileagan airson stuthan cleachdadh, feumaidh tu an raon a shìoladh labels as an raon metadata. Bidh an rèiteachadh mar seo:
Bidh an abairt jqFilter seo a’ tionndadh foillseachadh fada JSON deployment gu JSON goirid le bileagan:
cha ruith shell-operator an dubhan ach nuair a dh’ atharraicheas an JSON goirid seo is nach tèid atharraichean air feartan eile a leigeil seachad.
Co-theacs cur air bhog Hook
Leigidh an rèiteachadh dubhan leat grunn roghainnean a shònrachadh airson tachartasan - mar eisimpleir, roghainnean 2 airson tachartasan bho Kubernetes agus 2 chlàr:
Gluasad beag: tha, tha gnìomhaiche slige a’ toirt taic ruith sgriobtaichean stoidhle crontab. Gheibhear tuilleadh mion-fhiosrachaidh ann an sgrìobhainnean.
Gus faighinn a-mach carson a chaidh an dubhan a chuir air bhog, bidh an gnìomhaiche sligean a’ cruthachadh faidhle sealach agus a’ dol seachad air an t-slighe thuige ann an caochladair chun dubhan BINDING_CONTEXT_TYPE. Anns an fhaidhle tha tuairisgeul JSON air an adhbhar airson an dubhan a ruith. Mar eisimpleir, a h-uile 10 mionaidean ruithidh an dubhan leis an t-susbaint a leanas:
Faodar susbaint nan raointean a thuigsinn bho na h-ainmean aca, agus faodar barrachd fiosrachaidh a leughadh a-steach sgrìobhainnean. Eisimpleir de bhith a’ faighinn ainm stòrais bho raon resourceName tha cleachdadh jq air a shealltainn mar-thà ann an dubhan a tha ag ath-aithris dìomhaireachdan:
jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH
Gheibh thu raointean eile san aon dòigh.
Dè a-nis?
Ann an stòr a’ phròiseict, ann an / mar eisimpleir clàran, tha eisimpleirean ann de dubhan a tha deiseil airson ruith air braisle. Nuair a bhios tu a’ sgrìobhadh na dubhan agad fhèin, faodaidh tu an cleachdadh mar bhunait.
Tha taic ann airson metrics a chruinneachadh a’ cleachdadh Prometheus - tha na meatrach a tha rim faighinn air am mìneachadh san earrann MEADHAIREAN.
Mar a shaoileadh tu, tha an gnìomhaiche shligean sgrìobhte ann an Go agus air a chuairteachadh fo chead Open Source (Apache 2.0). Bidh sinn taingeil airson taic leasachaidh sam bith pròiseact air GitHub: agus reultan, agus cùisean, agus tarraing iarrtasan.
A’ togail brat dìomhaireachd, innsidh sinn dhut cuideachd gur e gnìomhaiche sligean a th’ ann beag mar phàirt den t-siostam againn as urrainn tuilleadan a chuir a-steach ann an cruinneachadh Kubernetes ùrachadh agus diofar ghnìomhan fèin-ghluasadach a dhèanamh. Leugh tuilleadh mun t-siostam seo dh ’innis gu litireil Diluain aig HighLoad ++ 2019 ann an St. Petersburg - bidh sinn a’ foillseachadh a’ bhidio agus an tar-sgrìobhadh den aithisg seo a dh’ aithghearr.
Tha plana againn gus an còrr den t-siostam seo fhosgladh: an addon-operator agus ar cruinneachadh de dubhan agus mhodalan. Co-dhiù, tha addon-operator mu thràth ri fhaighinn air github, ach tha na sgrìobhainnean air a shon fhathast air an t-slighe. Thathas an dùil an cruinneachadh de mhodalan a leigeil ma sgaoil airson an t-samhraidh.