Gabhaidh sinn ri 10 tachartas ann an Yandex.Cloud. Pàirt 000

Halo a h-uile duine, a charaidean!

* Tha an artaigil seo stèidhichte air bùth-obrach fosgailte REBRAIN & Yandex.Cloud, mas fheàrr leat coimhead air a’ bhidio, gheibh thu e aig a’ cheangal seo - https://youtu.be/cZLezUm0ekE

O chionn ghoirid fhuair sinn an cothrom feuchainn air Yandex.Cloud beò. Leis gu robh sinn airson sgrùdadh fada agus cruaidh, thrèig sinn sa bhad am beachd blog WordPress sìmplidh a chuir air bhog le bunait sgòthan - bha e ro thrang. Às deidh beagan smaoineachaidh, chuir sinn romhainn rudeigin coltach ri ailtireachd seirbheis toraidh a chleachdadh airson tachartasan fhaighinn agus a sgrùdadh ann am modh faisg air fìor-ùine.

Tha mi gu tur cinnteach gu bheil a’ mhòr-chuid de ghnìomhachasan air-loidhne (agus chan ann a-mhàin) ann an dòigh air choireigin a’ cruinneachadh beinn fiosrachaidh mun luchd-cleachdaidh agus na gnìomhan aca. Aig a 'char as lugha, tha seo riatanach airson co-dhùnaidhean sònraichte a dhèanamh - mar eisimpleir, ma stiùireas tu geama air-loidhne, faodaidh tu coimhead air na staitistig aig an ìre as trice a bhios luchd-cleachdaidh a' faighinn greis agus a 'sguabadh às do dhèideag. No carson a bhios luchd-cleachdaidh a’ fàgail na làraich agad gun a bhith a’ ceannach dad (hello, Yandex.Metrica).

Mar sin, an sgeulachd againn: mar a sgrìobh sinn tagradh ann an golang, a’ dèanamh deuchainn air kafka vs rabbitmq vs yqs, a’ sgrìobhadh sruthadh dàta ann am brabhsair Clickhouse agus a’ faicinn an dàta a’ cleachdadh yandex datalens. Gu nàdarra, bha seo uile air a shàrachadh le toileachas bun-structair ann an cruth docker, terraform, gitlab ci agus, gu dearbh, prometheus. Tiugainn!

Bu mhath leam glèidheadh ​​​​sa bhad nach bi e comasach dhuinn a h-uile càil a rèiteachadh ann an aon suidhe - airson seo feumaidh sinn grunn artaigilean san t-sreath. Beagan mun structar:

Pàirt 1 (tha thu ga leughadh). Nì sinn co-dhùnadh air mion-chomharrachadh agus ailtireachd an fhuasglaidh, agus cuideachd sgrìobhaidh sinn tagradh ann an golang.
Pàirt 2 . Bidh sinn a’ leigeil a-mach an tagradh againn gu cinneasachadh, ga dhèanamh scalable agus a’ dèanamh deuchainn air an luchd.
Pàirt 3 . Feuchaidh sinn ri faighinn a-mach carson a dh'fheumas sinn teachdaireachdan a stòradh ann am bufair agus chan ann ann am faidhlichean, agus cuideachd coimeas a dhèanamh eadar kafka, rabbitmq agus seirbheis ciudha yandex.
Pàirt 4 Cleachdaidh sinn brabhsair Clickhouse, sgrìobhaidh sinn seirbheis sruthadh gus dàta a ghluasad bhon bhufair an sin, agus cuiridh sinn air dòigh fradharc ann an datalens.
Pàirt 5 Bheir sinn am bun-structar gu lèir ann an cumadh ceart - stèidhich ci / cd a’ cleachdadh gitlab ci, ceangail sgrùdadh agus lorg seirbheis a’ cleachdadh prometheus agus consul.

ТЗ

An toiseach, cruthaichidh sinn na cumhachan iomraidh - dè dìreach a tha sinn airson faighinn mar thoradh air an sin.

  1. Tha sinn airson crìoch a chuir air mar events.kis.im (is e kis.im an raon deuchainn a chleachdas sinn anns na h-artaigilean gu lèir), a bu chòir tachartasan fhaighinn a’ cleachdadh HTTPS.
  2. Tha tachartasan mar json sìmplidh mar: {“tachartas”: “view”, “os”: “linux”, “browser”: “chrome”}. Aig an ìre mu dheireadh cuiridh sinn beagan a bharrachd raointean ris, ach cha bhi àite mòr aig seo. Ma thogras tu, faodaidh tu atharrachadh gu protobuf.
  3. Feumaidh an t-seirbheis a bhith comasach air 10 tachartas a làimhseachadh gach diog.
  4. Bu chòir gum biodh e comasach sgèileadh gu còmhnard le bhith dìreach a’ cur suidheachaidhean ùra ris an fhuasgladh againn. Agus bidh e math mas urrainn dhuinn am pàirt aghaidh a ghluasad gu diofar geolocations gus latency airson iarrtasan teachdaiche a lughdachadh.
  5. Fulangas sgàinidh. Feumaidh am fuasgladh a bhith seasmhach gu leòr agus a bhith comasach air mairsinn ann an tuiteam pàirtean sam bith (suas ri àireamh sònraichte, gu dearbh).

ailtireachd

San fharsaingeachd, airson an seòrsa gnìomh seo, chaidh ailtirean clasaigeach a chruthachadh o chionn fhada a leigeas le sgèileadh èifeachdach. Tha an dealbh a’ sealltainn eisimpleir den fhuasgladh againn.

Gabhaidh sinn ri 10 tachartas ann an Yandex.Cloud. Pàirt 000

Mar sin na tha againn:

1. Air an taobh chlì tha na h-innealan againn a ghineas diofar thachartasan, ge bith an e cluicheadairean a bhith a’ crìochnachadh ìre ann an dèideag air fòn cliste no a’ cruthachadh òrdugh ann an stòr air-loidhne tro bhrobhsair àbhaisteach. Tha tachartas, mar a tha air a shònrachadh san t-sònrachadh, na json sìmplidh a thèid a chuir chun phuing crìochnachaidh againn - events.kis.im.

2. Tha a’ chiad dà sheirbheisiche nan luchd-cothromachaidh sìmplidh, is iad na prìomh ghnìomhan aca:

  • Bi ri fhaighinn an-còmhnaidh. Gus seo a dhèanamh, faodaidh tu a chleachdadh, mar eisimpleir, keepvived, a thionndaidheas an IP brìgheil eadar nodan gun fhios nach bi duilgheadasan ann.
  • Cuir crìoch air TLS. Seadh, cuiridh sinn crìoch air TLS orra. An toiseach, gus am bi am fuasgladh againn a’ gèilleadh ris na mion-chomharrachadh teignigeach, agus san dàrna àite, gus faochadh a thoirt don eallach bho bhith a’ stèidheachadh ceangal crioptaichte bho na frithealaichean backend againn.
  • Cothromaich iarrtasan a-steach gu frithealaichean backend a tha rim faighinn. Tha am prìomh fhacal an seo ruigsinneach. Stèidhichte air an seo, tha sinn a’ tighinn chun tuigse gum feum luchd-cothromachaidh luchdan a bhith comasach air sùil a chumail air na frithealaichean againn le tagraidhean agus stad a chuir air cothromachadh trafaic gu nodan air fàiligeadh.

3. Às dèidh an balancers, tha sinn air frithealaichean iarrtas a 'ruith gu math sìmplidh iarrtas. Bu chòir dha a bhith comasach air gabhail ri iarrtasan a thig a-steach tro HTTP, an json a chaidh a chuir a dhearbhadh agus an dàta a chuir ann am bufair.

4. Tha an diagram a 'sealltainn kafka mar bufair, ged, gu dearbh, faodar seirbheisean eile den aon seòrsa a chleachdadh aig an ìre seo. Nì sinn coimeas eadar Kafka, rabbitmq agus yqs san treas artaigil.

5. Is e an dàrna puing mu dheireadh den ailtireachd againn Clickhouse - stòr-dàta colbh a leigeas leat tòrr dàta a stòradh agus a phròiseasadh. Aig an ìre seo, feumaidh sinn dàta a ghluasad bhon bhufair chun an t-siostam stòraidh fhèin (barrachd air seo ann an artaigil 4).

Leigidh an dealbhadh seo leinn sgèile a dhèanamh air gach còmhdach gu neo-eisimeileach gu còmhnard. Chan urrainn do luchd-frithealaidh backend dèiligeadh - cuiridh sinn aon rud eile ris - às deidh a h-uile càil, is e tagraidhean gun stàit a th’ annta, agus mar sin, faodar seo a dhèanamh eadhon gu fèin-ghluasadach. Chan obraich am bufair ann an stoidhle Kafka - cuiridh sinn barrachd luchd-frithealaidh ris agus gluaisidh sinn cuid de na pàirtean den chuspair againn thuca. Chan urrainn dha Clickhouse a làimhseachadh - tha e do-dhèanta :) Gu dearbh, bidh sinn cuideachd a’ ceangal na frithealaichean agus a ’gearradh an dàta.

Co-dhiù, ma tha thu airson am pàirt roghainneil de na mion-chomharrachaidhean teicnigeach againn agus sgèile a chuir an gnìomh ann an diofar geolocations, chan eil dad nas sìmplidh:

Gabhaidh sinn ri 10 tachartas ann an Yandex.Cloud. Pàirt 000

Anns gach geolocation bidh sinn a’ cleachdadh cothromachadh luchdan le tagradh agus kafka. San fharsaingeachd, tha frithealaichean tagraidh 2, nodan 3 kafka agus inneal-cothromachaidh sgòthan, mar eisimpleir, cloudflare, gu leòr, a nì sgrùdadh air na tha ri fhaighinn de nodan tagraidh agus iarrtasan cothromachaidh le geolocation stèidhichte air seòladh IP stòr an neach-dèiligidh. Mar sin, thig dàta a chuir neach-dèiligidh Ameireaganach air tìr air frithealaichean Ameireaganach. Agus tha dàta à Afraga ann an Afraga.

An uairsin tha a h-uile dad gu math sìmplidh - bidh sinn a ’cleachdadh an inneal sgàthan bho sheata Kafka agus a’ dèanamh lethbhreac den dàta gu lèir bho gach àite chun ionad dàta meadhanach againn a tha suidhichte san Ruis. Taobh a-staigh, bidh sinn a’ parsadh an dàta agus ga chlàradh ann an Clickhouse airson sealladh às deidh sin.

Mar sin, tha sinn air an ailtireachd a rèiteachadh - leig leinn tòiseachadh a 'crathadh Yandex.Cloud!

A 'sgrìobhadh tagradh

Ron Cloud, feumaidh tu fhathast a bhith beagan euslainteach agus seirbheis gu math sìmplidh a sgrìobhadh gus tachartasan a tha a’ tighinn a-steach a phròiseasadh. Cleachdaidh sinn golang oir tha e air a dhearbhadh fhèin gu math mar chànan airson tagraidhean lìonraidh a sgrìobhadh.

Às deidh uair a thìde (is dòcha uair no dhà), gheibh sinn rudeigin mar seo: https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/main.go.

Dè na prìomh phuingean a bu mhath leam a thoirt fa-near an seo:

1. Nuair a thòisicheas tu air an tagradh, faodaidh tu dà bhratach a shònrachadh. Tha aon an urra ris a’ phort air an èist sinn ri iarrtasan http a tha a’ tighinn a-steach (-addr). Tha an dàrna fear airson seòladh frithealaiche kafka far an clàraich sinn na tachartasan againn (-kafka):

addr     = flag.String("addr", ":8080", "TCP address to listen to")
kafka    = flag.String("kafka", "127.0.0.1:9092", "Kafka endpoints”)

2. Bidh an aplacaid a’ cleachdadh leabharlann sarama ([] github.com/Shopify/sarama) teachdaireachdan a chuir chun bhuidheann kafka. Shuidhich sinn sa bhad na roghainnean a tha ag amas air an astar giollachd as àirde:

config := sarama.NewConfig()
config.Producer.RequiredAcks = sarama.WaitForLocal
config.Producer.Compression = sarama.CompressionSnappy
config.Producer.Return.Successes = true

3. Tha neach-dèiligidh prometheus togte aig an tagradh againn cuideachd, a bhios a’ cruinneachadh diofar mheatairean, leithid:

  • an àireamh de dh'iarrtasan airson an tagraidh againn;
  • àireamh de mhearachdan nuair a thathar a’ cur an gnìomh an iarrtais (do-dhèanta iarrtas puist a leughadh, json briste, do-dhèanta sgrìobhadh gu Kafka);
  • ùine giollachd airson aon iarrtas bhon neach-dèiligidh, a’ toirt a-steach an ùine airson teachdaireachd a sgrìobhadh gu Kafka.

4. Trì cinn-uidhe anns na pròiseasan tagraidh againn:

  • / inbhe - dìreach till ceart gu leòr gus sealltainn gu bheil sinn beò. Ged as urrainn dhut cuid de sgrùdaidhean a chuir ris, leithid na tha ri fhaighinn de bhuidheann Kafka.
  • / metrics - a rèir an url seo, tillidh an neach-dèiligidh prometheus na meatrach a chruinnich e.
  • / post am prìomh phuing crìochnachaidh far an tèid iarrtasan POST le json a-staigh a chuir. Bidh an tagradh againn a’ sgrùdadh an json airson dligheachd agus ma tha a h-uile dad ceart gu leòr, bidh e a’ sgrìobhadh an dàta gu cruinneachadh Kafka.

Nì mi cinnteach nach eil an còd foirfe - faodar (agus bu chòir!) A chrìochnachadh. Mar eisimpleir, faodaidh tu stad a bhith a’ cleachdadh an lìon togte/http agus atharraich gu luathhttp nas luaithe. No faodaidh tu ùine giollachd agus goireasan cpu fhaighinn le bhith a’ gluasad an sgrùdadh dligheachd json gu ìre nas fhaide air adhart - nuair a thèid an dàta a ghluasad bhon bhufair gu brabhsair taigh-cliog.

A bharrachd air taobh leasachaidh na cùise, smaoinich sinn sa bhad air ar bun-structar san àm ri teachd agus chuir sinn romhainn an tagradh againn a chuir a-steach tro docker. Is e an Dockerfile mu dheireadh airson an tagradh a thogail https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/Dockerfile. San fharsaingeachd, tha e gu math sìmplidh, is e an aon phuing a bu mhath leam aire a thoirt dha an co-chruinneachadh ioma-ìre, a leigeas leinn ìomhaigh dheireannach ar container a lughdachadh.

A ' chiad cheum anns an neul

An toiseach, clàraich air adhart sgòth.yandex.ru. Às deidh dhuinn na raointean riatanach gu lèir a lìonadh, thèid cunntas a chruthachadh dhuinn agus tabhartas a thoirt dhuinn airson beagan airgid, a dh'fhaodar a chleachdadh gus seirbheisean sgòthan a dhearbhadh. Ma tha thu airson a h-uile ceum bhon artaigil againn ath-aithris, bu chòir gum biodh an tabhartas seo gu leòr dhut.

Às deidh clàradh, thèid sgòth air leth agus eòlaire bunaiteach a chruthachadh dhut, anns an urrainn dhut tòiseachadh air goireasan sgòthan a chruthachadh. San fharsaingeachd, ann an Yandex.Cloud, an dàimh goireasan a 'coimhead mar seo:

Gabhaidh sinn ri 10 tachartas ann an Yandex.Cloud. Pàirt 000

Faodaidh tu grunn sgòthan a chruthachadh airson aon chunntas. Agus taobh a-staigh an sgòth, dèan diofar chlàran airson diofar phròiseactan companaidh. Faodaidh tu barrachd a leughadh mu dheidhinn seo anns na sgrìobhainnean - https://cloud.yandex.ru/docs/resource-manager/concepts/resources-hierarchy. Co-dhiù, bidh mi tric a’ toirt iomradh air gu h-ìosal anns an teacsa. Nuair a shuidhich mi am bun-structar gu lèir bhon toiseach, chuidich na sgrìobhainnean mi barrachd air aon uair, agus mar sin tha mi a’ toirt comhairle dhut sgrùdadh a dhèanamh air.

Gus an sgòth a riaghladh, faodaidh tu an dà chuid an eadar-aghaidh lìn agus an goireas tòcan a chleachdadh - yc. Tha an stàladh air a dhèanamh le aon àithne (airson Linux agus Mac Os):

curl https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash

Ma tha an eòlaiche tèarainteachd taobh a-staigh agad feargach mu bhith a’ ruith sgriobtaichean bhon eadar-lìn, an uairsin, an toiseach, faodaidh tu an sgriobt fhosgladh agus a leughadh, agus san dàrna àite, bidh sinn ga ruith fon neach-cleachdaidh againn - gun chòraichean freumha.

Ma tha thu airson cleachdaiche a stàladh airson Windows, faodaidh tu an stiùireadh a chleachdadh an seo agus an uairsin a chur an gnìomh yc inita ghnàthachadh gu h-iomlan :

vozerov@mba:~ $ yc init
Welcome! This command will take you through the configuration process.
Please go to https://oauth.yandex.ru/authorize?response_type=token&client_id= in order to obtain OAuth token.

Please enter OAuth token:
Please select cloud to use:
 [1] cloud-b1gv67ihgfu3bp (id = b1gv67ihgfu3bpt24o0q)
 [2] fevlake-cloud (id = b1g6bvup3toribomnh30)
Please enter your numeric choice: 2
Your current cloud has been set to 'fevlake-cloud' (id = b1g6bvup3toribomnh30).
Please choose folder to use:
 [1] default (id = b1g5r6h11knotfr8vjp7)
 [2] Create a new folder
Please enter your numeric choice: 1
Your current folder has been set to 'default' (id = b1g5r6h11knotfr8vjp7).
Do you want to configure a default Compute zone? [Y/n]
Which zone do you want to use as a profile default?
 [1] ru-central1-a
 [2] ru-central1-b
 [3] ru-central1-c
 [4] Don't set default zone
Please enter your numeric choice: 1
Your profile default Compute zone has been set to 'ru-central1-a'.
vozerov@mba:~ $

Ann am prionnsabal, tha am pròiseas sìmplidh - an toiseach feumaidh tu comharradh fhaighinn airson an sgòth a stiùireadh, tagh an sgòth agus am pasgan a chleachdas tu.

Ma tha grunn chunntasan no phasganan agad taobh a-staigh an aon sgòth, faodaidh tu pròifilean a bharrachd a chruthachadh le roghainnean air leth tro phròifil config yc cruthaich agus gluais eatorra.

A bharrachd air na dòighean gu h-àrd, sgrìobh sgioba Yandex.Cloud fìor mhath Plugin airson terraform airson goireasan sgòthan a riaghladh. Airson mo phàirt, dheasaich mi stòr git, far an tug mi cunntas air na goireasan gu lèir a thèid a chruthachadh mar phàirt den artaigil - https://github.com/rebrainme/yandex-cloud-events/. Tha ùidh againn anns a’ phrìomh mheur, dèanamaid clonadh gu h-ionadail:


vozerov@mba:~ $ git clone https://github.com/rebrainme/yandex-cloud-events/ events
Cloning into 'events'...
remote: Enumerating objects: 100, done.
remote: Counting objects: 100% (100/100), done.
remote: Compressing objects: 100% (68/68), done.
remote: Total 100 (delta 37), reused 89 (delta 26), pack-reused 0
Receiving objects: 100% (100/100), 25.65 KiB | 168.00 KiB/s, done.
Resolving deltas: 100% (37/37), done.
vozerov@mba:~ $ cd events/terraform/

Tha na prìomh chaochladairean uile a thathas a’ cleachdadh ann an terraform sgrìobhte anns an fhaidhle main.tf. Gus tòiseachadh, cruthaich faidhle private.auto.tfvars anns a’ phasgan terraform leis an t-susbaint a leanas:

# Yandex Cloud Oauth token
yc_token = ""
# Yandex Cloud ID
yc_cloud_id = ""
# Yandex Cloud folder ID
yc_folder_id = ""
# Default Yandex Cloud Region
yc_region = "ru-central1-a"
# Cloudflare email
cf_email = ""
# Cloudflare token
cf_token = ""
# Cloudflare zone id
cf_zone_id = ""

Faodar a h-uile caochladair a thoirt bhon liosta config yc, leis gu bheil sinn air goireas a’ chonsail a rèiteachadh mu thràth. Tha mi a’ toirt comhairle dhut private.auto.tfvars a chuir gu .gitignore sa bhad, gus nach foillsich thu dàta prìobhaideach gun fhiosta.

Ann an private.auto.tfvars shònraich sinn dàta bho Cloudflare cuideachd - gus clàran DNS a chruthachadh agus neach-ionaid prìomh thachartasan àrainn.kis.im dha na frithealaichean againn. Mura h-eil thu airson cloudflare a chleachdadh, thoir air falbh toiseach tòiseachaidh an t-solaraiche cloudflare ann am main.tf agus am faidhle dns.tf, air a bheil uallach airson na clàran dns riatanach a chruthachadh.

Anns an obair againn cuiridh sinn na trì dòighean còmhla - an eadar-aghaidh lìn, an goireas tòcan, agus cruth-tìre.

Lìonraidhean mas-fhìor

Gus a bhith onarach, dh’ fhaodadh tu an ceum seo a leum, oir nuair a chruthaicheas tu sgòth ùr, bidh lìonra air leth agad gu fèin-ghluasadach agus 3 subnets air an cruthachadh - aon airson gach sòn ruigsinneachd. Ach bu mhath leinn fhathast lìonra air leth a dhèanamh airson ar pròiseact le a sheòladh fhèin. Tha an diagram coitcheann air mar a tha an lìonra ag obair ann an Yandex.Cloud ri fhaicinn anns an fhigear gu h-ìosal (onarach air a thoirt bho https://cloud.yandex.ru/docs/vpc/concepts/)

Gabhaidh sinn ri 10 tachartas ann an Yandex.Cloud. Pàirt 000

Mar sin, cruthaichidh tu lìonra coitcheann anns am faod goireasan conaltradh ri chèile. Airson gach sòn ruigsinneachd, thèid subnet a chruthachadh leis an t-seòladh aige fhèin agus ceangailte ris an lìonra coitcheann. Mar thoradh air an sin, faodaidh a h-uile goireas sgòthan a tha ann conaltradh a dhèanamh, eadhon ged a tha iad ann an diofar sònaichean rim faighinn. Chan fhaic goireasan ceangailte ri diofar lìonraidhean sgòthan a chèile ach tro sheòlaidhean taobh a-muigh. Co-dhiù, ciamar a tha an draoidheachd seo ag obair a-staigh, air a dheagh mhìneachadh air Habré.

Tha cruthachadh lìonra air a mhìneachadh anns an fhaidhle network.tf bhon stòr. An sin bidh sinn a’ cruthachadh aon lìonra prìobhaideach coitcheann a-staigh agus a’ ceangal trì subnets ris ann an diofar shònaichean ri fhaighinn - taobh a-staigh-a (172.16.1.0/24), internal-b (172.16.2.0/24), taobh a-staigh-c (172.16.3.0/24). ).

Tòisich cruth-tìre agus cruthaich lìonraidhean:

vozerov@mba:~/events/terraform (master) $ terraform init
... skipped ..

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_vpc_subnet.internal-a -target yandex_vpc_subnet.internal-b -target yandex_vpc_subnet.internal-c

... skipped ...

Plan: 4 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

yandex_vpc_network.internal: Creating...
yandex_vpc_network.internal: Creation complete after 3s [id=enp2g2rhile7gbqlbrkr]
yandex_vpc_subnet.internal-a: Creating...
yandex_vpc_subnet.internal-b: Creating...
yandex_vpc_subnet.internal-c: Creating...
yandex_vpc_subnet.internal-a: Creation complete after 6s [id=e9b1dad6mgoj2v4funog]
yandex_vpc_subnet.internal-b: Creation complete after 7s [id=e2liv5i4amu52p64ac9p]
yandex_vpc_subnet.internal-c: Still creating... [10s elapsed]
yandex_vpc_subnet.internal-c: Creation complete after 10s [id=b0c2qhsj2vranoc9vhcq]

Apply complete! Resources: 4 added, 0 changed, 0 destroyed.

Sgoinneil! Tha sinn air ar lìonra a chruthachadh agus tha sinn a-nis deiseil airson ar seirbheisean a-staigh a chruthachadh.

Cruthaich mas-fhìor innealan

Gus an tagradh a dhearbhadh, cha bhith againn ach dà inneal brìgheil a chruthachadh - feumaidh sinn a’ chiad fhear airson an tagradh a thogail agus a ruith, an dàrna fear airson kafka a ruith, a chleachdas sinn gus teachdaireachdan a thig a-steach a stòradh. Agus cruthaichidh sinn inneal eile far am bi sinn a’ rèiteachadh prometheus gus sùil a chumail air an tagradh.

Bidh na h-innealan brìgheil air an rèiteachadh le bhith a’ cleachdadh ansible, mar sin mus tòisich thu air terraform, dèan cinnteach gu bheil aon de na dreachan as ùire de ansible agad. Agus stàlaich na dreuchdan riatanach le galaxy iomchaidh:

vozerov@mba:~/events/terraform (master) $ cd ../ansible/
vozerov@mba:~/events/ansible (master) $ ansible-galaxy install -r requirements.yml
- cloudalchemy-prometheus (master) is already installed, skipping.
- cloudalchemy-grafana (master) is already installed, skipping.
- sansible.kafka (master) is already installed, skipping.
- sansible.zookeeper (master) is already installed, skipping.
- geerlingguy.docker (master) is already installed, skipping.
vozerov@mba:~/events/ansible (master) $

Taobh a-staigh a’ phasgan a ghabhas cleachdadh tha eisimpleir .ansible.cfg faidhle rèiteachaidh a bhios mi a’ cleachdadh. Is dòcha gun tig e gu feum.

Mus cruthaich thu innealan brìgheil, dèan cinnteach gu bheil ssh-agent agad a’ ruith agus iuchair ssh air a chur ris, air neo cha bhith e comasach dha terraform ceangal ris na h-innealan cruthaichte. Thachair mi, gu dearbh, air bug ann an os x: https://github.com/ansible/ansible/issues/32499#issuecomment-341578864. Gus casg a chuir air seo bho bhith a’ tachairt a-rithist, cuir caochladair beag ris an env mus cuir thu Terraform air bhog:

vozerov@mba:~/events/terraform (master) $ export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

Anns a 'phasgan le terraform bidh sinn a' cruthachadh nan goireasan riatanach:

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_compute_instance.build -target yandex_compute_instance.monitoring -target yandex_compute_instance.kafka
yandex_vpc_network.internal: Refreshing state... [id=enp2g2rhile7gbqlbrkr]
data.yandex_compute_image.ubuntu_image: Refreshing state...
yandex_vpc_subnet.internal-a: Refreshing state... [id=e9b1dad6mgoj2v4funog]

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

... skipped ...

Plan: 3 to add, 0 to change, 0 to destroy.

... skipped ...

Ma thàinig a h-uile càil gu crìch gu soirbheachail (agus bu chòir dha a bhith), bidh trì innealan brìgheil againn:

  1. togail - inneal airson deuchainn agus togail iarrtas. Chaidh Docker a chuir a-steach gu fèin-ghluasadach le Ansible.
  2. sgrùdadh - inneal sgrùdaidh - prometheus & grafana air a chuir air. Inbhe logadh a-steach / facal-faire: admin / admin
  3. Is e inneal beag a th’ ann an kafka le kafka air a chuir a-steach, ruigsinneach air port 9092.

Dèan cinnteach gu bheil iad uile nan àite:

vozerov@mba:~/events (master) $ yc compute instance list
+----------------------+------------+---------------+---------+---------------+-------------+
|          ID          |    NAME    |    ZONE ID    | STATUS  |  EXTERNAL IP  | INTERNAL IP |
+----------------------+------------+---------------+---------+---------------+-------------+
| fhm081u8bkbqf1pa5kgj | monitoring | ru-central1-a | RUNNING | 84.201.159.71 | 172.16.1.35 |
| fhmf37k03oobgu9jmd7p | kafka      | ru-central1-a | RUNNING | 84.201.173.41 | 172.16.1.31 |
| fhmt9pl1i8sf7ga6flgp | build      | ru-central1-a | RUNNING | 84.201.132.3  | 172.16.1.26 |
+----------------------+------------+---------------+---------+---------------+-------------+

Tha na goireasan nan àite, agus às an seo gheibh sinn na seòlaidhean IP aca. Tro na leanas cleachdaidh mi seòlaidhean IP gus ceangal tro ssh agus deuchainn a dhèanamh air an tagradh. Ma tha cunntas cloudflare agad ceangailte ri terraform, faodaidh tu ainmean DNS a chaidh an cruthachadh às ùr a chleachdadh.
Air an t-slighe, nuair a chruthaicheas tu inneal brìgheil, thèid IP a-staigh agus ainm DNS a-staigh a thoirt seachad, gus am faigh thu cothrom air frithealaichean taobh a-staigh an lìonra le ainm:

ubuntu@build:~$ ping kafka.ru-central1.internal
PING kafka.ru-central1.internal (172.16.1.31) 56(84) bytes of data.
64 bytes from kafka.ru-central1.internal (172.16.1.31): icmp_seq=1 ttl=63 time=1.23 ms
64 bytes from kafka.ru-central1.internal (172.16.1.31): icmp_seq=2 ttl=63 time=0.625 ms
^C
--- kafka.ru-central1.internal ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.625/0.931/1.238/0.308 ms

Bidh seo feumail dhuinn an deireadh-phuing le kafk a chomharrachadh don tagradh.

A 'cruinneachadh an tagraidh

Sgoinneil, tha frithealaichean ann, tha tagradh ann - chan eil air fhàgail ach a chruinneachadh agus fhoillseachadh. Airson an togail cleachdaidh sinn an togail àbhaisteach docker, ach mar stòradh ìomhaigh cleachdaidh sinn seirbheis bho Yandex - container registry. Ach an toiseach rudan an-toiseach.

Bidh sinn a’ dèanamh lethbhreac den tagradh chun inneal togail, a’ logadh a-steach tro ssh agus a’ cruinneachadh an ìomhaigh:

vozerov@mba:~/events/terraform (master) $ cd ..
vozerov@mba:~/events (master) $ rsync -av app/ [email protected]:app/

... skipped ...

sent 3849 bytes  received 70 bytes  7838.00 bytes/sec
total size is 3644  speedup is 0.93

vozerov@mba:~/events (master) $ ssh 84.201.132.3 -l ubuntu
ubuntu@build:~$ cd app
ubuntu@build:~/app$ sudo docker build -t app .
Sending build context to Docker daemon  6.144kB
Step 1/9 : FROM golang:latest AS build
... skipped ...

Successfully built 9760afd8ef65
Successfully tagged app:latest

Tha leth den bhlàr air a dhèanamh - a-nis is urrainn dhuinn sgrùdadh a dhèanamh air gnìomhachd an tagraidh againn le bhith ga chuir air bhog agus ga chuir gu kafka:

ubuntu@build:~/app$ sudo docker run --name app -d -p 8080:8080 app /app/app -kafka=kafka.ru-central1.internal:9092</code>

С локальной машинки можно отправить тестовый event и посмотреть на ответ:

<code>vozerov@mba:~/events (master) $ curl -D - -s -X POST -d '{"key1":"data1"}' http://84.201.132.3:8080/post
HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 13 Apr 2020 13:53:54 GMT
Content-Length: 41

{"status":"ok","partition":0,"Offset":0}
vozerov@mba:~/events (master) $

Fhreagair an tagradh gu soirbheachail leis a’ chlàradh agus chomharraich e id a’ sgaradh agus an co-chothromachadh anns an robh an teachdaireachd air a ghabhail a-steach. Chan eil air fhàgail ach clàr a chruthachadh ann an Yandex.Cloud agus an ìomhaigh againn a luchdachadh suas an sin (tha mar a nì thu seo le bhith a’ cleachdadh trì loidhnichean air a mhìneachadh anns an fhaidhle registry.tf). Cruthaich stòr-stòraidh:

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_container_registry.events

... skipped ...

Plan: 1 to add, 0 to change, 0 to destroy.

... skipped ...

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Tha grunn dhòighean ann airson dearbhadh ann an clàr nan soithichean - a’ cleachdadh oauth token, iam token, no iuchair cunntas seirbheis. Gheibhear barrachd fiosrachaidh mu na dòighean sin anns na sgrìobhainnean. https://cloud.yandex.ru/docs/container-registry/operations/authentication. Cleachdaidh sinn iuchair cunntas seirbheis, agus mar sin cruthaichidh sinn cunntas:

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_iam_service_account.docker -target yandex_resourcemanager_folder_iam_binding.puller -target yandex_resourcemanager_folder_iam_binding.pusher

... skipped ...

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

A-nis chan eil air fhàgail ach iuchair a dhèanamh air a shon:

vozerov@mba:~/events/terraform (master) $ yc iam key create --service-account-name docker -o key.json
id: ajej8a06kdfbehbrh91p
service_account_id: ajep6d38k895srp9osij
created_at: "2020-04-13T14:00:30Z"
key_algorithm: RSA_2048

Gheibh sinn fiosrachadh mu id an stòraidh againn, gluais an iuchair agus log a-steach:

vozerov@mba:~/events/terraform (master) $ scp key.json [email protected]:
key.json                                                                                                                    100% 2392   215.1KB/s   00:00

vozerov@mba:~/events/terraform (master) $ ssh 84.201.132.3 -l ubuntu

ubuntu@build:~$ cat key.json | sudo docker login --username json_key --password-stdin cr.yandex
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
ubuntu@build:~$

Gus an dealbh a luchdachadh suas chun chlàr, feumaidh sinn ID clàraidh an t-soithich, bheir sinn e bhon ghoireas yc:

vozerov@mba:~ $ yc container registry get events
id: crpdgj6c9umdhgaqjfmm
folder_id:
name: events
status: ACTIVE
created_at: "2020-04-13T13:56:41.914Z"

Às deidh sin, bidh sinn a ’tagadh an ìomhaigh againn le ainm ùr agus a’ luchdachadh suas:

ubuntu@build:~$ sudo docker tag app cr.yandex/crpdgj6c9umdhgaqjfmm/events:v1
ubuntu@build:~$ sudo docker push cr.yandex/crpdgj6c9umdhgaqjfmm/events:v1
The push refers to repository [cr.yandex/crpdgj6c9umdhgaqjfmm/events]
8c286e154c6e: Pushed
477c318b05cb: Pushed
beee9f30bc1f: Pushed
v1: digest: sha256:1dd5aaa9dbdde2f60d833be0bed1c352724be3ea3158bcac3cdee41d47c5e380 size: 946

Is urrainn dhuinn dearbhadh gun deach an dealbh a luchdachadh gu soirbheachail:

vozerov@mba:~/events/terraform (master) $ yc container repository list
+----------------------+-----------------------------+
|          ID          |            NAME             |
+----------------------+-----------------------------+
| crpe8mqtrgmuq07accvn | crpdgj6c9umdhgaqjfmm/events |
+----------------------+-----------------------------+

Co-dhiù, ma stàlaicheas tu goireas yc air inneal Linux, faodaidh tu an àithne a chleachdadh

yc container registry configure-docker

gus docker a rèiteachadh.

co-dhùnadh

Tha sinn air tòrr obair chruaidh a dhèanamh agus mar thoradh air sin:

  1. Thàinig sinn suas le ailtireachd ar seirbheis san àm ri teachd.
  2. Sgrìobh sinn tagradh ann an golang a chuireas an gnìomh ar loidsig gnìomhachais.
  3. Chruinnich sinn e agus dhòirt sinn a-steach e ann an clàr soithichean prìobhaideach.

Anns an ath phàirt, gluaisidh sinn air adhart chun stuth inntinneach - leigidh sinn a-mach an tagradh againn gu cinneasachadh agus mu dheireadh cuiridh sinn air bhog an luchd air. Na gluais!

Tha an stuth seo anns a’ chlàradh bhidio den bhùth-obrach fhosgailte REBRAIN & Yandex.Cloud: Gabhaidh sinn ri 10 iarrtas gach diog air Yandex Cloud - https://youtu.be/cZLezUm0ekE

Ma tha ùidh agad a bhith an làthair aig tachartasan mar seo air-loidhne agus a’ faighneachd cheistean ann an àm fìor, ceangail ri sianal DevOps le REBRAIN.

Bu mhath leinn taing shònraichte a thoirt do Yandex.Cloud airson an cothrom tachartas mar seo a chumail. Ceangal riutha - https://cloud.yandex.ru/prices

Ma dh’ fheumas tu gluasad chun sgòth no ma tha ceistean agad mun bhun-structar agad, faodaidh tu iarrtas fhàgail.

PS Tha 2 sgrùdadh an-asgaidh againn gach mìos, is dòcha gum bi am pròiseact agad mar aon dhiubh.

Source: www.habr.com

Cuir beachd ann