Imọran ti oniṣẹ ikarahun jẹ ohun rọrun: ṣe alabapin si awọn iṣẹlẹ lati awọn nkan Kubernetes, ati nigbati awọn iṣẹlẹ wọnyi ba gba, ṣe ifilọlẹ eto ita kan, pese alaye nipa iṣẹlẹ naa:
Iwulo fun rẹ dide nigbati, lakoko iṣẹ awọn iṣupọ, awọn iṣẹ-ṣiṣe kekere bẹrẹ si han pe a fẹ gaan lati ṣe adaṣe ni ọna ti o tọ. Gbogbo awọn iṣẹ-ṣiṣe kekere wọnyi ni a yanju nipa lilo awọn iwe afọwọkọ bash ti o rọrun, botilẹjẹpe, bi o ṣe mọ, o dara lati kọ awọn oniṣẹ ni Golang. O han ni, idoko-owo ni idagbasoke iwọn-kikun ti oniṣẹ fun ọkọọkan iru iṣẹ-ṣiṣe kekere yoo jẹ ailagbara.
Onišẹ ni 15 iṣẹju
Jẹ ki a wo apẹẹrẹ ti ohun ti o le ṣe adaṣe ni iṣupọ Kubernetes ati bii oniṣẹ ẹrọ ikarahun ṣe le ṣe iranlọwọ. Apeere kan yoo jẹ atẹle yii: tun ṣe aṣiri kan lati wọle si iforukọsilẹ docker.
Awọn adarọ-ese ti o lo awọn aworan lati iforukọsilẹ ikọkọ gbọdọ ni ninu iṣafihan wọn ọna asopọ kan si aṣiri kan pẹlu data fun iraye si iforukọsilẹ. Aṣiri yii gbọdọ ṣẹda ni aaye orukọ kọọkan ṣaaju ṣiṣẹda awọn adarọ-ese. Eyi le ṣee ṣe pẹlu ọwọ, ṣugbọn ti a ba ṣeto awọn agbegbe ti o ni agbara, lẹhinna aaye orukọ fun ohun elo kan yoo di pupọ. Ati pe ti ko ba tun wa awọn ohun elo 2-3 ... nọmba awọn aṣiri di pupọ. Ati ohun kan diẹ sii nipa awọn aṣiri: Emi yoo fẹ lati yi bọtini pada lati wọle si iforukọsilẹ lati igba de igba. Níkẹyìn, ọwọ mosi bi ojutu patapata doko - a nilo lati ṣe adaṣe adaṣe ati imudojuiwọn awọn aṣiri.
Irọrun adaṣe
Jẹ ki a kọ iwe afọwọkọ ikarahun kan ti o nṣiṣẹ lẹẹkan ni gbogbo iṣẹju-aaya N ati ṣayẹwo awọn aaye orukọ fun wiwa aṣiri kan, ati pe ti ko ba si aṣiri, lẹhinna o ṣẹda. Anfani ti ojutu yii ni pe o dabi iwe afọwọkọ ikarahun ni cron - ọna Ayebaye ati oye si gbogbo eniyan. Ilọkuro ni pe ni aarin laarin awọn ifilọlẹ rẹ aaye orukọ tuntun le ṣẹda ati fun igba diẹ yoo wa laisi aṣiri, eyiti yoo ja si awọn aṣiṣe ni ifilọlẹ awọn adarọ-ese.
Adaṣiṣẹ pẹlu ikarahun-onišẹ
Fun iwe afọwọkọ wa lati ṣiṣẹ ni deede, ifilọlẹ cron Ayebaye nilo lati paarọ rẹ pẹlu ifilọlẹ kan nigbati aaye orukọ kan ba ṣafikun: ninu ọran yii, o le ṣẹda aṣiri ṣaaju lilo rẹ. Jẹ ki a wo bii o ṣe le ṣe eyi nipa lilo oluṣe-iṣẹ ikarahun.
Ni akọkọ, jẹ ki a wo iwe afọwọkọ naa. Awọn iwe afọwọkọ ni awọn ofin oluṣe ikarahun ni a pe ni kio. Gbogbo kio nigba ṣiṣe pẹlu asia --config sọfun oniṣẹ ẹrọ ikarahun nipa awọn asopọ rẹ, i.e. lori awọn iṣẹlẹ wo ni o yẹ ki o ṣe ifilọlẹ. Ninu ọran wa a yoo lo onKubernetesEvent:
#!/bin/bash
if [[ $1 == "--config" ]] ; then
cat <<EOF
{
"onKubernetesEvent": [
{ "kind": "namespace",
"event":["add"]
}
]}
EOF
fi
O ṣe apejuwe nibi pe a nifẹ lati ṣafikun awọn iṣẹlẹ (add) awọn nkan ti iru namespace.
Bayi o nilo lati ṣafikun koodu ti yoo ṣiṣẹ nigbati iṣẹlẹ ba waye:
#!/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
Nla! Abajade jẹ iwe afọwọkọ kekere, lẹwa. Lati “sọji” rẹ, awọn igbesẹ meji lo wa: mura aworan naa ki o ṣe ifilọlẹ ni iṣupọ.
Ngbaradi aworan pẹlu kio kan
Ti o ba wo iwe afọwọkọ, o le rii pe a lo awọn aṣẹ naa kubectl и jq. Eyi tumọ si pe aworan naa gbọdọ ni awọn nkan wọnyi: kio wa, oniṣẹ ẹrọ ikarahun ti yoo ṣe atẹle awọn iṣẹlẹ ati ṣiṣe kio, ati awọn aṣẹ ti a lo nipasẹ kio (kubectl ati jq). Hub.docker.com ti ni aworan ti o ti ṣetan ninu eyiti o ti ṣajọ ẹrọ-isẹ, kubectl ati jq. Gbogbo ohun ti o ku ni lati ṣafikun kio ti o rọrun Dockerfile:
Jẹ ki a wo kio lẹẹkansi ati ni akoko yii kọ awọn iṣe wo ati pẹlu awọn nkan wo ni o ṣe ninu iṣupọ:
ṣe alabapin si awọn iṣẹlẹ ẹda orukọ;
ṣẹda aṣiri ni awọn aaye orukọ yatọ si eyiti o ti ṣe ifilọlẹ.
O wa ni jade pe podu ninu eyiti aworan wa yoo ṣe ifilọlẹ gbọdọ ni awọn igbanilaaye lati ṣe awọn iṣe wọnyi. Eyi le ṣee ṣe nipa ṣiṣẹda Account Service tirẹ. Igbanilaaye gbọdọ ṣee ni irisi ClusterRole ati ClusterRoleBinding, nitori a nifẹ si awọn nkan lati gbogbo iṣupọ.
Iyẹn ni gbogbo rẹ: oniṣẹ ikarahun yoo bẹrẹ, ṣe alabapin si awọn iṣẹlẹ ẹda orukọ ati ṣiṣe kio nigbati o nilo.
Ni ọna yi, iwe afọwọkọ ikarahun ti o rọrun kan yipada si oniṣẹ gidi fun Kubernetes ati pe o ṣiṣẹ gẹgẹbi apakan ti iṣupọ kan. Ati gbogbo eyi laisi ilana eka ti awọn oniṣẹ idagbasoke ni Golang:
Àpèjúwe mìíràn tún wà lórí ọ̀ràn yìí...
A yoo ṣe afihan itumọ rẹ ni awọn alaye diẹ sii ninu ọkan ninu awọn atẹjade atẹle.
Sisẹ
Ṣiṣayẹwo awọn nkan dara, ṣugbọn igbagbogbo nilo lati fesi si iyipada diẹ ninu awọn ohun ini, fun apẹẹrẹ, lati yi nọmba awọn ẹda ni Imuṣiṣẹ tabi lati yi awọn aami ohun pada.
Nigbati iṣẹlẹ ba de, oniṣẹ ikarahun gba ifihan JSON ti nkan naa. A le yan awọn ohun-ini ti o nifẹ si wa ni JSON yii ati ṣiṣe kio naa Nikan nigbati nwọn yipada. Aaye kan wa fun eyi jqFilter, nibiti o nilo lati pato ikosile jq ti yoo lo si ifihan JSON.
Fun apẹẹrẹ, lati dahun si awọn ayipada ninu awọn akole fun awọn ohun imuṣiṣẹ, o nilo lati ṣe àlẹmọ aaye naa labels jade ninu oko metadata. Eto naa yoo dabi eyi:
Digression kekere: bẹẹni, ikarahun-onišẹ atilẹyin nṣiṣẹ crontab ara awọn iwe afọwọkọ. Awọn alaye diẹ sii ni a le rii ni iwe.
Lati ṣe iyatọ idi ti a fi ṣe ifilọlẹ kio naa, oniṣẹ ikarahun ṣẹda faili igba diẹ ati ki o kọja ọna si ọdọ rẹ ni oniyipada si kio. BINDING_CONTEXT_TYPE. Faili naa ni apejuwe JSON kan ti idi fun ṣiṣe kio naa. Fun apẹẹrẹ, ni gbogbo iṣẹju mẹwa 10 kio yoo ṣiṣẹ pẹlu akoonu atẹle:
Awọn akoonu ti awọn aaye le ni oye lati awọn orukọ wọn, ati awọn alaye diẹ sii ni a le ka ninu iwe. Apeere ti gbigba orukọ orisun lati aaye kan resourceName lilo jq ti han tẹlẹ ninu kio kan ti o ṣe atunṣe awọn aṣiri:
jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH
O le gba awọn aaye miiran ni ọna kanna.
Ohun ti ni tókàn?
Ninu ibi ipamọ ise agbese, ni / awọn apẹẹrẹ awọn ilana, Awọn apẹẹrẹ ti awọn kio wa ti o ṣetan lati ṣiṣe lori iṣupọ kan. Nigbati o ba kọ awọn kio tirẹ, o le lo wọn gẹgẹbi ipilẹ.
Atilẹyin wa fun gbigba awọn metiriki nipa lilo Prometheus - awọn metiriki ti o wa ni a ṣe apejuwe ni apakan METIRI.
Bi o ṣe le gboju, oluṣe ikarahun naa ni kikọ ni Go ati pinpin labẹ iwe-aṣẹ Orisun Ṣii (Apache 2.0). A yoo dupẹ lọwọ eyikeyi iranlọwọ idagbasoke ise agbese lori GitHub: ati awọn irawọ, ati awọn oran, ati awọn ibeere fa.
Gbigbe ibori ti asiri, a yoo tun sọ fun ọ pe oniṣẹ ẹrọ ikarahun jẹ kekere apakan ti eto wa ti o le jẹ ki awọn afikun fi sori ẹrọ ni iṣupọ Kubernetes titi di oni ati ṣe ọpọlọpọ awọn iṣe adaṣe. Ka siwaju sii nipa yi eto so fun gangan ni Ọjọ Aarọ ni HighLoad ++ 2019 ni St.
A ni eto lati ṣii awọn iyokù eto yii: oluṣe-addon ati ikojọpọ awọn iwọ ati awọn modulu wa. Nipa ọna, addon-operator ti wa tẹlẹ wa lori github, ṣugbọn awọn iwe fun o jẹ ṣi lori awọn ọna. Itusilẹ ti gbigba ti awọn modulu ni a gbero fun igba ooru.