Timavomereza zochitika 10 mu Yandex.Cloud. Gawo 000

Moni nonse, abwenzi!

* Nkhaniyi idachokera pa REBRAIN & Yandex.Cloud open workshop, ngati mukufuna kuwonera kanema, mutha kuyipeza pa ulalo uwu - https://youtu.be/cZLezUm0ekE

Posachedwapa tinali ndi mwayi woyesera Yandex.Cloud live. Popeza tinkafuna kufufuza motalika komanso molimbika, nthawi yomweyo tinasiya lingaliro lokhazikitsa blog yosavuta ya Wordpress yokhala ndi mtambo - zinali zotopetsa kwambiri. Pambuyo poganizira pang'ono, tidaganiza zotumiza china chake chofanana ndi kapangidwe ka ntchito yopanga kuti tilandire ndikusanthula zochitika pafupi ndi nthawi yeniyeni.

Ndili wotsimikiza kuti mabizinesi ambiri pa intaneti (osati okha) amasonkhanitsa zambiri za ogwiritsa ntchito ndi zochita zawo. Pang'ono ndi pang'ono, izi ndizofunikira popanga zisankho zina - mwachitsanzo, ngati mumayendetsa masewera a pa intaneti, mutha kuyang'ana ziwerengero zomwe ogwiritsa ntchito nthawi zambiri amakakamira ndikuchotsa chidole chanu. Kapena chifukwa chake ogwiritsa ntchito amasiya tsamba lanu osagula chilichonse (hello, Yandex.Metrica).

Chifukwa chake, nkhani yathu: momwe tidalembera pulogalamu ku golang, kuyesa kafka vs rabbitmq vs yqs, tidalemba kukhamukira kwa data mugulu la Clickhouse ndikuwona deta pogwiritsa ntchito yandex datalens. Mwachilengedwe, zonsezi zidakongoletsedwa ndi zokometsera zamapangidwe monga docker, terraform, gitlab ci ndipo, ndithudi, prometheus. Tiyeni tizipita!

Ndikufuna kusungitsa nthawi yomweyo kuti sitingathe kukonza zonse nthawi imodzi - chifukwa cha izi tidzafunika zolemba zingapo pamndandanda. Zambiri za kapangidwe kake:

Gawo 1 (mukuwerenga). Tidzasankha zatsatanetsatane ndi kapangidwe ka yankho, ndikulembanso ntchito mu golang.
Gawo 2. Timamasula pulogalamu yathu kuti ipangidwe, ipangitse kuti ikhale yowonjezereka ndikuyesa katundu.
Gawo 3. Tiyeni tiyese kudziwa chifukwa chake tiyenera kusunga mauthenga mu buffer osati m'mafayilo, ndikufaniziranso kafka, rabbitmq ndi yandex queue service.
Gawo 4 Tidzatumiza gulu la Clickhouse, lembani ntchito yosinthira kusamutsa deta kuchokera ku buffer komweko, ndikukhazikitsa zowonera mu datalens.
Gawo 5 Tiyeni tibweretse zomangamanga zonse kuti zikhale zoyenera - khazikitsani ci/cd pogwiritsa ntchito gitlab ci, gwirizanitsani kuyang'anira ndi kupeza ntchito pogwiritsa ntchito prometheus ndi consul.

Π’Π—

Choyamba, tiyeni tipange mawu ofotokozera - zomwe tikufuna kupeza monga zotsatira.

  1. Tikufuna kukhala ndi mapeto monga events.kis.im (kis.im ndi malo oyesera omwe tidzagwiritse ntchito m'nkhani zonse), zomwe ziyenera kulandira zochitika pogwiritsa ntchito HTTPS.
  2. Zochitika ndi json yosavuta ngati: {"zochitika": "view", "os": "linux", "browser": "chrome"}. Pamapeto pake tidzawonjezera minda yowonjezereka, koma izi sizidzakhala ndi gawo lalikulu. Ngati mukufuna, mutha kusintha ku protobuf.
  3. Ntchitoyi iyenera kukwanitsa kukonza zochitika za 10 pamphindikati.
  4. Ziyenera kukhala zotheka kukulitsa mopingasa pongowonjezera zitsanzo zatsopano ku yankho lathu. Ndipo zikhala bwino ngati titha kusuntha gawo lakutsogolo kupita kumalo osiyanasiyana kuti tichepetse kuchedwa kwa zopempha zamakasitomala.
  5. Kulekerera zolakwa. Yankho liyenera kukhala lokhazikika mokwanira ndikutha kupulumuka kugwa kwa magawo aliwonse (mpaka chiwerengero china, ndithudi).

zomangamanga

Mwambiri, pamtundu uwu wa ntchito, zomangamanga zakale zidapangidwa kale zomwe zimalola kukweza bwino. Chithunzicho chikuwonetsa chitsanzo cha yankho lathu.

Timavomereza zochitika 10 mu Yandex.Cloud. Gawo 000

Ndiye zomwe tili nazo:

1. Kumanzere kuli zida zathu zomwe zimapanga zochitika zosiyanasiyana, kukhala osewera akumaliza mulingo mu chidole pa foni yamakono kapena kupanga dongosolo mu sitolo ya pa intaneti kudzera pa msakatuli wokhazikika. Chochitika, monga momwe tafotokozera mwatsatanetsatane, ndi json yosavuta yomwe imatumizidwa ku mapeto athu - events.kis.im.

2. Ma seva awiri oyamba ndi osavuta owerengera, ntchito zawo zazikulu ndi:

  • Khalani opezeka nthawi zonse. Kuti muchite izi, mutha kugwiritsa ntchito, mwachitsanzo, Keepalived, yomwe imasinthira IP pafupifupi pakati pa node pakagwa mavuto.
  • Kuthetsa TLS. Inde, tidzathetsa TLS pa iwo. Choyamba, kuti yankho lathu ligwirizane ndi luso lamakono, ndipo kachiwiri, kuti tithetse mtolo wa kukhazikitsa kugwirizana kwa encrypted kuchokera ku maseva athu a backend.
  • Sanjani zopempha zomwe zikubwera ku ma seva omwe alipo. Mawu ofunika apa ndi ofikirika. Kutengera izi, tifika pakumvetsetsa kuti zolemetsa zolemetsa ziyenera kuyang'anira ma seva athu ndi mapulogalamu ndikusiya kulinganiza magalimoto kumalo olephera.

3. Pambuyo poyesa, tili ndi ma seva ogwiritsira ntchito omwe akugwiritsa ntchito pulogalamu yosavuta. Iyenera kuvomereza zopempha zomwe zikubwera kudzera pa HTTP, kutsimikizira json yotumizidwa ndikuyika deta mu buffer.

4. Chithunzichi chikuwonetsa kafka ngati buffer, ngakhale, ndithudi, mautumiki ena ofanana angagwiritsidwe ntchito pamlingo uwu. Tiyerekeza Kafka, rabbitmq ndi yqs m'nkhani yachitatu.

5. Malo oyambirira a zomangamanga zathu ndi Clickhouse - database ya columnar yomwe imakulolani kusunga ndi kukonza deta yambiri. Pamulingo uwu, tiyenera kusamutsa deta kuchokera ku buffer kupita ku yosungirako yokha (zambiri pa izi m'nkhani 4).

Kapangidwe kameneka kamatipangitsa kuti tizitha kukulitsa gawo lililonse mopanda mopingasa. Ma seva obwerera kumbuyo sangathe kupirira - tiyeni tiwonjezere chinthu chimodzi - pambuyo pake, ndi ntchito zopanda malire, chifukwa chake, izi zitha kuchitika zokha. Chosungira chamtundu wa Kafka sichigwira ntchito-tiyeni tiwonjezere maseva ena ndikusamutsa magawo ena amutu wathu kwa iwo. Clickhouse sangathe kuthana nayo - ndizosatheka :) Ndipotu, tidzagwirizanitsa ma seva ndikugawa deta.

Mwa njira, ngati mukufuna kugwiritsa ntchito gawo lomwe mwasankha laukadaulo wathu komanso kukula mumitundu yosiyanasiyana, ndiye kuti palibe chosavuta:

Timavomereza zochitika 10 mu Yandex.Cloud. Gawo 000

Mu geolocation iliyonse timayika chojambulira katundu ndi ntchito ndi kafka. Kawirikawiri, ma seva ogwiritsira ntchito 2, 3 kafka node ndi balancer mtambo, mwachitsanzo, cloudflare, ndizokwanira, zomwe zidzayang'ana kupezeka kwa ma node ogwiritsira ntchito ndi pempho lolingana ndi geolocation kutengera adilesi ya IP ya kasitomala. Chifukwa chake, deta yotumizidwa ndi kasitomala waku America idzafika pa maseva aku America. Ndipo deta yochokera ku Africa ili mu Africa.

Ndiye zonse ndizosavuta - timagwiritsa ntchito chida chagalasi kuchokera ku seti ya Kafka ndikukopera deta yonse kuchokera kumalo onse kupita kumalo athu apakati omwe ali ku Russia. M'kati mwake, timagawa zambiri ndikuzilemba mu Clickhouse kuti muwonekere.

Chifukwa chake, takonza zomanga - tiyeni tiyambe kugwedeza Yandex.Cloud!

Kulemba ntchito

Mtambo usanachitike, muyenera kukhala oleza mtima pang'ono ndikulemba ntchito yosavuta yokonzekera zochitika zomwe zikubwera. Tidzagwiritsa ntchito golang chifukwa chadziwonetsera bwino ngati chilankhulo cholembera mapulogalamu a pa intaneti.

Titakhala ola limodzi (mwina maola angapo), timapeza chonchi: https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/main.go.

Mfundo zazikuluzikulu zomwe ndikufuna kuziwona apa ndi ziti:

1. Mukayamba kugwiritsa ntchito, mutha kutchula mbendera ziwiri. Mmodzi ali ndi udindo pa doko lomwe tidzamvetsera zopempha za http (-addr). Yachiwiri ndi ya adilesi ya seva ya kafka komwe tidzajambulitsa zochitika zathu (-kafka):

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

2. Pulogalamuyi imagwiritsa ntchito laibulale ya sarama ([] github.com/Shopify/sarama) kutumiza mauthenga ku gulu la kafka. Nthawi yomweyo timayika zoikamo zomwe cholinga chake ndi kuthamanga kwambiri:

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

3. Ntchito yathu ilinso ndi kasitomala wa prometheus, yemwe amasonkhanitsa ma metric osiyanasiyana, monga:

  • kuchuluka kwa zopempha zathu;
  • kuchuluka kwa zolakwika pakufunsira (kosatheka kuwerenga positi, json yosweka, zosatheka kulembera Kafka);
  • kukonza nthawi ya pempho limodzi kuchokera kwa kasitomala, kuphatikiza nthawi yolembera uthenga ku Kafka.

4. Zomaliza zitatu zomwe timagwiritsa ntchito:

  • /status - bwererani bwino kusonyeza kuti tili ndi moyo. Ngakhale mutha kuwonjezera macheke, monga kupezeka kwa gulu la Kafka.
  • /metrics - molingana ndi url iyi, kasitomala wa prometheus abweza ma metric omwe watolera.
  • /post ndiye pomaliza pomwe zopempha za POST ndi json mkati zidzatumizidwa. Ntchito yathu imayang'ana json kuti ikhale yovomerezeka ndipo ngati zonse zili bwino, zimalemba zomwe zili ku gulu la Kafka.

Ndisungirako kuti codeyo si yangwiro - ikhoza (ndipo iyenera!) itsirizidwe. Mwachitsanzo, mutha kusiya kugwiritsa ntchito net/http yomangidwa ndikusinthira ku Fasthttp. Kapena mutha kupeza nthawi yokonza ndi zida za cpu posuntha cheke chovomerezeka cha json kupita ku siteji ina - data ikasamutsidwa kuchokera ku buffer kupita kugulu la clickhouse.

Kuphatikiza pa mbali yachitukuko cha nkhaniyi, nthawi yomweyo tidaganizira za tsogolo lathu ndipo tinaganiza zotumiza ntchito yathu kudzera pa docker. Dockerfile yomaliza yopangira pulogalamuyi ndi https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/Dockerfile. Kawirikawiri, ndizosavuta, mfundo yokhayo yomwe ndikufuna kumvetsera ndi msonkhano wa multistage, womwe umatithandiza kuchepetsa chithunzi chomaliza cha chidebe chathu.

Masitepe oyamba mumtambo

Choyamba, lembani pa cloud.yandex.ru. Pambuyo podzaza minda yonse yofunikira, tidzapanga akaunti ndikupatsidwa thandizo la ndalama zina, zomwe zingagwiritsidwe ntchito kuyesa mautumiki amtambo. Ngati mukufuna kubwereza masitepe onse kuchokera m'nkhani yathu, thandizoli liyenera kukhala lokwanira kwa inu.

Pambuyo polembetsa, mtambo wosiyana ndi chikwatu chosasinthika chidzakupangirani, momwe mungayambe kupanga zinthu zamtambo. Nthawi zambiri, mu Yandex.Cloud, ubale wazinthu umawoneka motere:

Timavomereza zochitika 10 mu Yandex.Cloud. Gawo 000

Mutha kupanga mitambo ingapo pa akaunti imodzi. Ndipo mkati mwamtambo, pangani zolemba zosiyanasiyana zamapulojekiti osiyanasiyana amakampani. Mutha kuwerenga zambiri za izi muzolemba - https://cloud.yandex.ru/docs/resource-manager/concepts/resources-hierarchy. Mwa njira, nthawi zambiri ndizitchula pansipa m'malemba. Nditakhazikitsa maziko onse kuyambira pachiyambi, zolembazo zinandithandiza kangapo, kotero ndikukulangizani kuti muphunzire.

Kuti muzitha kuyang'anira mtambo, mutha kugwiritsa ntchito mawonekedwe a intaneti komanso chida chothandizira - yc. Kuyika kumachitika ndi lamulo limodzi (la Linux ndi Mac Os):

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

Ngati katswiri wanu wachitetezo chamkati akudandaula za kugwiritsa ntchito zolemba kuchokera pa intaneti, ndiye, choyamba, mutha kutsegula script ndikuwerenga, ndipo kachiwiri, timayendetsa pansi pa wogwiritsa ntchito - popanda mizu.

Ngati mukufuna kukhazikitsa kasitomala kwa Windows, mutha kugwiritsa ntchito malangizowo apa ndiyeno perekani yc initkuti musinthe mwamakonda:

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:~ $

M'malo mwake, njirayi ndi yosavuta - choyamba muyenera kupeza chizindikiro chalumbiro kuti muyang'anire mtambo, sankhani mtambo ndi chikwatu chomwe mungagwiritse ntchito.

Ngati muli ndi maakaunti angapo kapena zikwatu mumtambo womwewo, mutha kupanga ma profayilo owonjezera okhala ndi zosintha zosiyanasiyana kudzera pa yc config profile pangani ndikusintha pakati pawo.

Kuwonjezera pa njira zomwe zili pamwambazi, gulu la Yandex.Cloud linalemba zabwino kwambiri plugin ya terraform poyang'anira zothandizira zamtambo. Kwa ine, ndidakonza git repository, pomwe ndidafotokoza zonse zomwe zidzapangidwe ngati gawo la nkhaniyi - https://github.com/rebrainme/yandex-cloud-events/. Tili ndi chidwi ndi master branch, tiyeni tiyesere kwanuko:


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/

Zosintha zazikulu zonse zomwe zimagwiritsidwa ntchito mu terraform zimalembedwa mufayilo ya main.tf. Kuti muyambe, pangani fayilo ya private.auto.tfvars mufoda ya terraform ndi izi:

# 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 = ""

Zosintha zonse zitha kuchotsedwa pamndandanda wa yc config, popeza takhazikitsa kale chida chothandizira. Ndikukulangizani kuti muwonjezere nthawi yomweyo private.auto.tfvars ku .gitignore, kuti musasindikize mwangozi deta yachinsinsi.

Pachinsinsi.auto.tfvars tidatchulanso zambiri kuchokera ku Cloudflare - kupanga ma DNS ma rekodi ndikuyimira madera akuluakulu a domain events.kis.im ku maseva athu. Ngati simukufuna kugwiritsa ntchito cloudflare, chotsani kuyambitsa kwa cloudflare mu main.tf ndi fayilo ya dns.tf, yomwe ili ndi udindo wopanga zolemba zofunika za dns.

Mu ntchito yathu tidzaphatikiza njira zonse zitatu - mawonekedwe a intaneti, mawonekedwe a console, ndi terraform.

Maukonde a Virtual

Kunena zowona, mutha kudumpha izi, chifukwa mukapanga mtambo watsopano, mudzakhala ndi netiweki yosiyana ndi ma subnets atatu opangidwa - imodzi pagawo lililonse lopezeka. Koma tikufunabe kupanga network yosiyana ya projekiti yathu yokhala ndi ma adilesi ake. Chithunzi chodziwika bwino cha momwe maukonde amagwirira ntchito mu Yandex.Cloud akuwonetsedwa pazithunzi pansipa (zotengedwa moona mtima kuchokera https://cloud.yandex.ru/docs/vpc/concepts/)

Timavomereza zochitika 10 mu Yandex.Cloud. Gawo 000

Chifukwa chake, mumapanga maukonde wamba momwe zinthu zimatha kulumikizana wina ndi mnzake. Pamalo aliwonse omwe amapezeka, subnet imapangidwa yokhala ndi ma adilesi ake ndikulumikizidwa ku netiweki wamba. Zotsatira zake, zida zonse zamtambo zomwe zilimo zimatha kulumikizana, ngakhale zili m'malo osiyanasiyana opezeka. Zida zolumikizidwa ndi maukonde osiyanasiyana amtambo zimatha kuwonana kudzera pama adilesi akunja. Mwa njira, matsengawa amagwira ntchito bwanji mkati, adafotokozedwa bwino pa HabrΓ©.

Kupanga maukonde kumafotokozedwa mu fayilo ya network.tf kuchokera kumalo osungira. Pamenepo timapanga maukonde amodzi wamba wamba mkati ndikulumikiza ma subnets atatu kwa iwo m'malo osiyanasiyana kupezeka - mkati-a (172.16.1.0/24), mkati-b (172.16.2.0/24), mkati-c (172.16.3.0/24) ).

Yambitsani terraform ndikupanga maukonde:

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.

Zabwino! Tapanga maukonde athu ndipo tsopano takonzeka kupanga ntchito zathu zamkati.

Kupanga makina enieni

Kuti tiyese kugwiritsa ntchito, tidzangofunika kupanga makina awiri enieni - tidzafunika yoyamba kupanga ndi kuyendetsa pulogalamuyo, yachiwiri kuyendetsa kafka, yomwe tidzagwiritsa ntchito posungira mauthenga obwera. Ndipo tidzapanga makina ena komwe tidzakonza prometheus kuti tiziyang'anira ntchito.

Makina owoneka bwino adzakhazikitsidwa pogwiritsa ntchito ansible, kotero musanayambe terraform, onetsetsani kuti muli ndi mitundu yaposachedwa ya ansible. Ndipo ikani maudindo ofunikira ndi mlalang'amba wowoneka bwino:

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) $

M'kati mwa foda yovomerezeka muli chitsanzo .ansible.cfg fayilo yosinthira yomwe ndimagwiritsa ntchito. Ikhoza kubwera mothandiza.

Musanapange makina enieni, onetsetsani kuti muli ndi ssh-agent yomwe ikuyendetsa ndikuwonjezera kiyi ya ssh, apo ayi terraform sidzatha kulumikizana ndi makina opangidwa. Inde, ndinapeza cholakwika mu os x: https://github.com/ansible/ansible/issues/32499#issuecomment-341578864. Kuti izi zisadzachitikenso, onjezani kusintha pang'ono kwa env musanayambe Terraform:

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

Mu chikwatu chokhala ndi terraform timapanga zofunikira:

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 ...

Ngati zonse zidatha bwino (ndipo ziyenera kukhala), ndiye kuti tidzakhala ndi makina atatu:

  1. kumanga - makina oyesera ndi kupanga ntchito. Docker idakhazikitsidwa yokha ndi Ansible.
  2. kuyang'anira - makina owunikira - prometheus & grafana adayikidwapo. Login / password muyezo: admin / admin
  3. kafka ndi makina ang'onoang'ono okhala ndi kafka, opezeka padoko 9092.

Tiyeni tiwonetsetse kuti zonse zili m'malo mwake:

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 |
+----------------------+------------+---------------+---------+---------------+-------------+

Zothandizira zilipo, ndipo kuchokera apa titha kupeza ma adilesi awo a IP. Pazotsatira zonse ndigwiritsa ntchito ma adilesi a IP kulumikizana kudzera pa ssh ndikuyesa kugwiritsa ntchito. Ngati muli ndi akaunti ya cloudflare yolumikizidwa ndi terraform, omasuka kugwiritsa ntchito mayina a DNS omwe angopangidwa kumene.
Mwa njira, popanga makina enieni, IP yamkati ndi dzina lamkati la DNS limaperekedwa, kotero mutha kupeza ma seva mkati mwa netiweki ndi dzina:

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

Izi zitha kukhala zothandiza kwa ife kuwonetsa ku ntchito kumapeto ndi kafk.

Kusonkhanitsa ntchito

Zabwino, pali ma seva, pali pulogalamu - chomwe chatsalira ndikuchisonkhanitsa ndikuchisindikiza. Pakumangako tidzagwiritsa ntchito ma docker anthawi zonse, koma ngati chosungira zithunzi tidzagwiritsa ntchito ntchito yochokera ku Yandex - registry ya chidebe. Koma zinthu zoyamba choyamba.

Timakopera pulogalamuyi kumakina omanga, lowani kudzera pa ssh ndikusonkhanitsa chithunzichi:

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

Theka lankhondo latha - tsopano titha kuyang'ana momwe ntchito yathu ikugwirira ntchito poyiyambitsa ndikuitumiza ku 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) $

Pulogalamuyi idayankha bwino pakujambulitsa ndikuwonetsa id ya magawo ndi magawo omwe uthengawo unaphatikizidwa. Zomwe zatsala ndikupanga registry ku Yandex.Cloud ndikukweza chithunzi chathu pamenepo (momwe mungachitire izi pogwiritsa ntchito mizere itatu ikufotokozedwa mu fayilo ya registry.tf). Pangani posungira:

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.

Pali njira zingapo zotsimikizira mu kaundula wa zotengera - kugwiritsa ntchito chizindikiro chalumbiro, chizindikiro cha iam, kapena kiyi ya akaunti yautumiki. Zambiri zokhudzana ndi njirazi zingapezeke muzolemba. https://cloud.yandex.ru/docs/container-registry/operations/authentication. Tigwiritsa ntchito kiyi ya akaunti yautumiki, kotero timapanga akaunti:

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.

Tsopano chomwe chatsala ndikuchipangira kiyi:

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

Timalandila zambiri za ID ya malo athu, kusamutsa kiyi ndikulowa:

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:~$

Kuti tikweze chithunzicho ku registry, tikufuna ID yolembetsa chidebe, timachichotsa ku yc utility:

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

Pambuyo pake, timayika chithunzi chathu ndi dzina latsopano ndikuchiyika:

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

Titha kutsimikizira kuti chithunzicho chidakwezedwa bwino:

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

Mwa njira, ngati muyika chida cha yc pamakina a Linux, mutha kugwiritsa ntchito lamulo

yc container registry configure-docker

kupanga docker.

Pomaliza

Tagwira ntchito molimbika kwambiri ndipo zotsatira zake ndi izi:

  1. Tinabwera ndi kamangidwe ka utumiki wathu wamtsogolo.
  2. Tidalemba ntchito mu golang yomwe imagwiritsa ntchito malingaliro athu abizinesi.
  3. Tinazisonkhanitsa ndikuzitsanulira mu kaundula wa ziwiya zachinsinsi.

Mu gawo lotsatira, tipitiliza kuzinthu zosangalatsa - tidzatulutsa pulogalamu yathu kuti ipangidwe ndipo pamapeto pake tiyambitsanso katunduyo. Osasintha!

Izi zili mu kanema wojambulira wa msonkhano wotseguka REBRAIN & Yandex.Cloud: Timavomereza zopempha 10 pamphindikati pa Yandex Cloud - https://youtu.be/cZLezUm0ekE

Ngati mukufuna kupita ku zochitika ngati izi pa intaneti ndikufunsa mafunso munthawi yeniyeni, lumikizani Channel DevOps yolembedwa ndi REBRAIN.

Tikufuna kunena zikomo kwambiri kwa Yandex.Cloud chifukwa cha mwayi wochititsa mwambowu. Lumikizanani nawo - https://cloud.yandex.ru/prices

Ngati mukufuna kusamukira kumtambo kapena kukhala ndi mafunso okhudza zomangamanga zanu, omasuka kusiya pempho.

PS Tili ndi zowerengera zaulere 2 pamwezi, mwina polojekiti yanu ikhala imodzi mwazo.

Source: www.habr.com

Kuwonjezera ndemanga