Isu tinotambira 10 zviitiko muYandex.Cloud. Chikamu 000

Mhoroi mose, shamwari!

* Ichi chinyorwa chakavakirwa paREBRAIN & Yandex.Cloud yakavhurika musangano, kana uchida kuona vhidhiyo, unogona kuiwana pane iyi link - https://youtu.be/cZLezUm0ekE

Isu munguva pfupi yapfuura takava nemukana wekuyedza Yandex.Cloud live. Sezvo taida kuongorora kwenguva yakareba uye zvakaoma, takabva tasiya pfungwa yekutangisa bhurogi rakapfava reWordpress rine gore-bhesi - zvaive zvakanyanya kufinha. Mushure meimwe pfungwa, takafunga kuendesa chimwe chinhu chakafanana neyekugadzira sevhisi yekuvaka yekugamuchira uye kuongorora zviitiko zviri pedyo nenguva chaiyo.

Ndine chokwadi chekuti ruzhinji rwepamhepo (uye kwete chete) mabhizinesi neimwe nzira anounganidza gomo reruzivo nezvevashandisi vavo nezviito zvavo. Zvirinani, izvi zvinodikanwa pakuita dzimwe sarudzo - semuenzaniso, kana iwe uchigona mutambo wepamhepo, unogona kutarisa nhamba iyo iyo vashandisi vanowanzomira uye kudzima toyi yako. Kana kuti nei vashandisi vachisiya saiti yako vasina kutenga chero chinhu (hesi, Yandex.Metrica).

Saka, nyaya yedu: manyorero atakaita application mugolang, yakaedzwa kafka vs rabbitmq vs yqs, yakanyora kuyerera kwedhata muClickhouse cluster uye kuona iyo data uchishandisa yandex datalens. Sezvingatarisirwa, zvese izvi zvakarungwa nezvivakwa zvinonakidzwa nenzira yedocker, terraform, gitlab ci uye, hongu, prometheus. Handeyi!

Ndinoda kukurumidza kuita chengetedzo kuti isu hatizokwanisa kugadzirisa zvese mune imwechete kugara - nekuda kweizvi isu tichada akati wandei zvinyorwa munhevedzano. Zvishoma nezve chimiro:

Chikamu 1 (uri kuverenga). Isu tichasarudza pane zvakatemwa uye zvivakwa zvemhinduro, uye zvakare nyora application mugolang.
Chikamu 2. Isu tinoburitsa application yedu mukugadzira, ita kuti iwedzere uye kuyedza mutoro.
Chikamu 3. Ngatiedzei kufunga kuti nei tichifanira kuchengeta mameseji mubuffer uye kwete mumafaira, uye zvakare enzanisa kafka, rabbitmq uye yandex queue sevhisi.
Chikamu chechina Isu tichaendesa Clickhouse cluster, nyora sevhisi yekufambisa kuendesa data kubva kune buffer ipapo, uye kumisikidza kuona mu datalens.
Chikamu 5 Ngatiunzei zvivakwa zvese muchimiro chakakodzera - gadza ci/cd uchishandisa gitlab ci, batanidza kutarisa uye kuwanikwa kwesevhisi uchishandisa prometheus uye consul.

TK

Kutanga, ngatigadzirire mazwi ekunongedza - chii chaizvo chatinoda kuwana semhedzisiro.

  1. Tinoda kuve nemagumo sezviitiko.kis.im (kis.im ndiyo test domain yatichashandisa mukati mezvinyorwa zvese), iyo inofanirwa kugamuchira zviitiko tichishandisa HTTPS.
  2. Zviitiko zviri nyore json senge: {"chiitiko": "view", "os": "linux", "browser": "chrome"}. Padanho rekupedzisira tichawedzera mamwe mashoma minda, asi izvi hazvizoite basa rakakura. Kana uchida, unogona kushandura kune protobuf.
  3. Iyo sevhisi inofanirwa kukwanisa kugadzirisa 10 zviitiko pasekondi.
  4. Zvinofanira kugoneka kuyera zvakachinjika nekungowedzera zviitiko zvitsva kune yedu mhinduro. Uye zvichave zvakanaka kana tikakwanisa kufambisa chikamu chemberi kune akasiyana geolocations kuderedza latency yekukumbira kwevatengi.
  5. Kushivirira mhosva. Mhinduro yacho inofanira kunge yakagadzikana zvakakwana uye inokwanisa kupona kudonha kwechero zvikamu (kusvika kune imwe nhamba, hongu).

akitekicha

Kazhinji, kune rudzi urwu rwebasa, classical architectures yakagara yakagadzirwa iyo inobvumira kuyera kwakanaka. Mufananidzo unoratidza muenzaniso wemhinduro yedu.

Isu tinotambira 10 zviitiko muYandex.Cloud. Chikamu 000

Saka izvo zvatinazvo:

1. Kuruboshwe kune zvishandiso zvedu zvinogadzira zviitiko zvakasiyana, vangave vatambi vanozadza nhanho mutoyi pane smartphone kana kugadzira odha muchitoro chendaneti kuburikidza nebrowser yenguva dzose. Chiitiko, sekutsanangurwa kwazvinoitwa, iri nyore json inotumirwa kune yedu yekupedzisira - events.kis.im.

2. Masevha maviri ekutanga ari nyore kuenzanisa, mabasa awo makuru ndeaya:

  • Gara uripo. Kuti uite izvi, unogona kushandisa, semuenzaniso, keepalived, iyo inoshandura iyo chaiyo IP pakati pemanodhi kana paine matambudziko.
  • Kumisa TLS. Ehe, isu tichamisa TLS pavari. Chekutanga, kuitira kuti mhinduro yedu ienderane neiyo tekinoroji yakatarwa, uye chechipiri, kuitira kudzoreredza mutoro wekumisikidza yakavharidzirwa yekubatanidza kubva kumaseva edu ekumashure.
  • Balance zvikumbiro zvinouya kune anowanikwa backend maseva. Izwi rakakosha pano rinosvikika. Zvichienderana neizvi, tinosvika pakunzwisisa kuti zvinoremedza zvinorema zvinofanirwa kukwanisa kutarisa maseva edu nemaapplication uye kumisa kuyera traffic kune dzakakundikana node.

3. Mushure mevalancers, tine maseva ekushandisa anomhanyisa application iri nyore. Inofanirwa kukwanisa kugamuchira zvikumbiro zvinouya kuburikidza neHTTP, simbisa iyo yakatumirwa json uye isa iyo data mubuffer.

4. Dhiagiramu inoratidza kafka sebhafa, kunyange, hongu, mamwe masevhisi akafanana anogona kushandiswa padanho iri. Tichafananidza Kafka, rabbitmq uye yqs muchinyorwa chechitatu.

5. Iyo peultimate poindi yezvivakwa zvedu ndeye Clickhouse - iyo columnar dhatabhesi iyo inobvumidza iwe kuchengeta uye kugadzirisa huwandu hukuru hwe data. Pane iyi nhanho, isu tinofanirwa kuendesa data kubva kune buffer kuenda kune yekuchengetedza system pachayo (zvimwe pane izvi mune chinyorwa 4).

Iyi dhizaini inotibvumira kuyera dhizaini yega yega takazvimiririra. Masevha ekumashure haakwanise kutsungirira - ngatiwedzerei chimwe chinhu - mushure mezvose, iwo maapplication asina chirevo, uye nekudaro, izvi zvinogona kuitwa otomatiki. Iyo Kafka-style buffer haishande-ngatiwedzere mamwe maseva uye titumire mamwe ezvikamu zvemusoro wedu kwavari. Clickhouse haigone kuzvibata - hazvigoneke :) Muchokwadi, isu tichabatanidzawo maseva uye kugova data.

Nenzira, kana iwe uchida kushandisa chikamu chekusarudza chehunyanzvi hwekuita uye chiyero mune dzakasiyana geolocation, saka hapana chiri nyore:

Isu tinotambira 10 zviitiko muYandex.Cloud. Chikamu 000

Mune yega yega geolocation isu tinotumira muyero wekuenzanisa nekushandisa uye kafka. Kazhinji, 2 maseva ekushandisa, 3 kafka node uye cloud balancer, semuenzaniso, cloudflare, zvakakwana, izvo zvichatarisa kuwanikwa kwemaapplication node uye zvikumbiro zvechiyero negeolocation zvichibva pane yemutengi IP kero. Saka, data inotumirwa nemutengi weAmerica inomhara pamaseva eAmerica. Uye data kubva kuAfrica iri muAfrica.

Ipapo zvese zviri nyore - isu tinoshandisa girazi chishandiso kubva kuKafka seti uye kukopa data rese kubva kunzvimbo dzese kuenda kune yedu yepakati data centre iri muRussia. Mukati, isu tinoparura iyo data uye toirekodha muClickhouse yekuzotevera kuona.

Saka, isu takarongedza zvivakwa - ngatitangei kuzunguza Yandex.Cloud!

Kunyora application

Pamberi peGore, iwe uchiri kufanira kuve nemoyo murefu uye kunyora iri nyore sevhisi kugadzirisa zviitiko zvinouya. Tichashandisa golang nekuti yakazviratidza kwazvo semutauro wekunyora maapplication network.

Mushure mekushandisa awa (zvichida maawa mashoma), tinowana chimwe chinhu chakadai: https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/main.go.

Ndeapi mapfundo makuru andinoda kucherechedza pano:

1. Paunotanga kushanda, unogona kutsanangura mireza miviri. Mumwe ane mutoro wechiteshi chatinoteerera kune zvinouya http zvikumbiro (-addr). Yechipiri ndeye kero yekafka server kwatinozonyora zviitiko zvedu (-kafka):

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

2. Chishandiso chinoshandisa raibhurari yesarama ([] github.com/Shopify/sarama) kutumira mameseji kune kafka cluster. Isu takabva taseta zvigadziriso zvine chinangwa chekumhanyisa kukurumidza kugadzirisa:

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

3. Yedu application ine yakavakirwa-mukati prometheus mutengi, iyo inounganidza akasiyana metrics, akadai se:

  • nhamba yezvikumbiro kune yedu application;
  • nhamba yezvikanganiso paunenge uchiita chikumbiro (hazvibviri kuverenga post chikumbiro, yakaputsika json, hazvibviri kunyora kuKafka);
  • kugadzirisa nguva yechikumbiro chimwe kubva kumutengi, kusanganisira nguva yekunyora meseji kuKafka.

4. Matatu emagumo ayo maitiro edu ekushandisa:

  • /status - ingodzoka zvakanaka kuratidza kuti tiri vapenyu. Kunyangwe iwe uchigona kuwedzera mamwe macheki, sekuvepo kweiyo Kafka cluster.
  • /metrics - zvinoenderana neiyi url, mutengi weprometheus anodzosa metrics yaakaunganidza.
  • / post ndiyo huru yekupedzisira panotumirwa zvikumbiro zvePOST nejson mukati. Yedu application inotarisa iyo json yechokwadi uye kana zvese zvakanaka, inonyora iyo data kuKafka cluster.

Ini ndichaita chengetedzo kuti kodhi haina kukwana - inogona (uye inofanirwa!) Kupedzwa. Semuenzaniso, unogona kumira kushandisa yakavakirwa-mukati mambure/http uye chinja kune inokurumidza kukurumidzahttp. Kana iwe unogona kuwana nguva yekugadzirisa uye cpu zviwanikwa nekufambisa iyo json yechokwadi cheki kune imwe gare gare nhanho - kana iyo data yatamiswa kubva kune buffer kuenda kune clickhouse cluster.

Pamusoro pedivi rekusimudzira renyaya, takabva tangofunga nezveramangwana redu uye takafunga kuendesa application yedu kuburikidza nedocker. Iyo yekupedzisira Dockerfile yekuvaka application ndeye https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/Dockerfile. Kazhinji, zviri nyore, iyo chete pfungwa yandinoda kuterera ndeye multistage gungano, iyo inotibvumira kudzikisa mufananidzo wekupedzisira wemudziyo wedu.

Matanho ekutanga ari mugore

Chekutanga, nyoresa pa cloud.yandex.ru. Mushure mekuzadza minda yese inodiwa, isu tichagadzira account uye kupa rubatsiro kune imwe mari, iyo inogona kushandiswa kuyedza makore masevhisi. Kana iwe uchida kudzokorora nhanho dzese kubva kuchinyorwa chedu, iyi mvumo inofanirwa kukukwanira.

Mushure mekunyoresa, gore rakaparadzana uye dhairekitori rekutanga richagadzirirwa iwe, maunogona kutanga kugadzira zviwanikwa zvegore. Kazhinji, muYandex.Cloud, hukama hwezviwanikwa hunotaridzika seizvi:

Isu tinotambira 10 zviitiko muYandex.Cloud. Chikamu 000

Unogona kugadzira makore akati wandei kune imwe account. Uye mukati megore, gadzira madhairekitori akasiyana emakambani akasiyana mapurojekiti. Unogona kuverenga zvakawanda pamusoro peizvi mune zvinyorwa - https://cloud.yandex.ru/docs/resource-manager/concepts/resources-hierarchy. Nenzira, ini kazhinji ndichataura nezvayo pazasi mune chinyorwa. Pandinomisa hurongwa hwese kubva pakutanga, zvinyorwa zvakandibatsira kanopfuura kamwe, saka ndinokupa zano kuti uzvidzidze.

Kugadzirisa gore, unogona kushandisa zvese zviri zviviri webhu interface uye iyo console utility - yc. Kuiswa kunoitwa nemurairo mumwe (weLinux neMac Os):

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

Kana nyanzvi yako yekuchengetedzwa kwemukati iri kutsamwa pamusoro pekushandisa zvinyorwa kubva paInternet, saka, chekutanga, unogona kuzarura script uye kuiverenga, uye chechipiri, tinoifambisa pasi pemushandisi wedu - pasina kodzero dzemidzi.

Kana iwe uchida kuisa mutengi weWindows, unogona kushandisa mirairo pano uye wozoita yc initkuigadzirisa zvizere:

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

Muchidimbu, maitiro acho ari nyore - kutanga iwe unofanirwa kuwana chiratidzo chemhiko kubata gore, sarudza gore uye folda yauchashandisa.

Kana iwe uine akati wandei maakaundi kana maforodha mukati megore rimwe chete, unogona kugadzira mamwe maprofile ane akasiyana marongero kuburikidza neyc config profile gadzira uye chinja pakati pavo.

Mukuwedzera kune nzira dziri pamusoro apa, boka reYandex.Cloud rakanyora zvakanaka kwazvo plugin ye terraform yekutarisira cloud resources. Kune chikamu changu, ndakagadzirira git repository, kwandakatsanangura zviwanikwa zvese zvichagadzirwa sechikamu chechinyorwa - https://github.com/rebrainme/yandex-cloud-events/. Isu tiri kufarira iyo master bazi, ngatiigadzirise munharaunda:


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/

Mavara makuru ese anoshandiswa mu terraform akanyorwa mu main.tf file. Kuti utange, gadzira yakavanzika.auto.tfvars faira muterraform folda ine zvinotevera zvirimo:

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

Zvese zvinosiyana zvinogona kutorwa kubva kuyc config list, sezvo isu takatogadzira iyo console utility. Ndinokupa zano kuti uwedzere nekukurumidza private.auto.tfvars ku .gitignore, kuitira kuti usaburitse zvakavanzika data netsaona.

Mupachivande.auto.tfvars isu takatsanangurawo data kubva kuCloudflare - kugadzira DNS marekodhi uye proxy iyo huru domain zviitiko.kis.im kumaseva edu. Kana iwe usingadi kushandisa cloudflare, zvino bvisa kutanga kwe cloudflare mupi mune main.tf uye dns.tf faira, iyo ine basa rekugadzira inodiwa dns zvinyorwa.

Mubasa redu isu tichabatanidza ese matatu nzira - iyo webhu interface, iyo console utility, uye terraform.

Virtual network

Kutaura chokwadi, unogona kusvetuka nhanho iyi, sezvo kana iwe ukagadzira gore idzva, iwe unongove uine yakaparadzana network uye 3 subnets yakagadzirwa - imwe yenzvimbo yega yega inowanikwa. Asi isu tichiri kuda kugadzira network yakaparadzana yeprojekiti yedu ine kero yayo. Dhiagiramu yakajairika yekuti network inoshanda sei muYandex.Cloud inoratidzwa mumufananidzo uri pazasi (kutendeseka yakatorwa kubva https://cloud.yandex.ru/docs/vpc/concepts/)

Isu tinotambira 10 zviitiko muYandex.Cloud. Chikamu 000

Saka, iwe unogadzira network yakajairika mukati umo zviwanikwa zvinogona kutaurirana. Kune yega yega nzvimbo inowanikwa, subnet inogadzirwa ine kero yayo uye yakabatana kune general network. Nekuda kweizvozvo, zvese zvegore zviwanikwa mairi zvinogona kutaurirana, kunyangwe zviri munzvimbo dzakasiyana dzekuwanikwa. Zviwanikwa zvakabatana kune akasiyana cloud network zvinogona kuonana chete kuburikidza nemakero ekunze. Nenzira, mashiripiti aya anoshanda sei mukati, yakanyatsorondedzerwa pana HabrΓ©.

Kusikwa kwetiweki kunotsanangurwa mune network.tf faira kubva pane repository. Ikoko isu tinogadzira imwe yakajairika yakavanzika network yemukati uye tinobatanidza ma subnets matatu kwairi munzvimbo dzakasiyana dzekuwanikwa - mukati-a (172.16.1.0/24), mukati-b (172.16.2.0/24), mukati-c (172.16.3.0/24) )

Tanga terraform uye gadzira network:

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.

Hukuru! Isu takagadzira network yedu uye tagadzirira kugadzira yedu yemukati masevhisi.

Kugadzira virtual machines

Kuti tiedze mashandisiro, isu tichangoda kugadzira maviri chaiwo machina - isu tichada yekutanga kuvaka uye kumhanyisa application, yechipiri yekumhanyisa kafka, yatichashandisa kuchengetedza mameseji anouya. Uye isu tichagadzira mumwe muchina kwatino gadzirisa prometheus yekutarisa application.

Iwo chaiwo machina anozogadziriswa uchishandisa ansible, saka usati watanga terraform, ita shuwa kuti une imwe yeazvino vhezheni yeansible. Uye isa mabasa anodiwa neanonzwisisika galaxy:

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

Mukati meiyo ansible forodha mune muenzaniso .ansible.cfg configuration file yandinoshandisa. Inogona kuuya inobatsira.

Usati wagadzira mashini chaiwo, ita shuwa kuti une ssh-agent inomhanya uye ssh kiyi yakawedzerwa, zvikasadaro terraform haizokwanisi kubatana kumashini akagadzirwa. Ini, hongu, ndakasangana nebug mu os x: https://github.com/ansible/ansible/issues/32499#issuecomment-341578864. Kuti izvi zvisaitike zvakare, wedzera diki diki kune env usati watanga Terraform:

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

Mune folda ine terraform tinogadzira zviwanikwa zvinodiwa:

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

Kana zvese zvakapera zvinobudirira (uye zvinofanirwa kudaro), saka tichava nemashini matatu chaiwo:

  1. kuvaka - muchina wekuyedza uye kuvaka application. Docker yakaiswa otomatiki neAnsible.
  2. kutarisa - muchina wekutarisa - prometheus & grafana yakaiswa pairi. Login / password chiyero: admin / admin
  3. kafka muchina mudiki une kafka yakaiswa, unowanikwa pachiteshi 9092.

Ngative nechokwadi kuti zvese zviri munzvimbo:

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

Izvo zviwanikwa zviripo, uye kubva pano tinogona kuwana avo IP kero. Pane zvese zvinotevera ini ndichashandisa IP kero kubatanidza kuburikidza ne ssh uye kuyedza application. Kana iwe uine cloudflare account yakabatana neterraform, inzwa wakasununguka kushandisa mazita achangobva kugadzirwa eDNS.
Nenzira, pakugadzira muchina chaiwo, IP yemukati uye yemukati DNS zita rinopihwa, saka iwe unokwanisa kuwana maseva mukati metiweki nemazita:

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

Izvi zvichatibatsira isu kuratidza kune application iyo yekupedzisira nekafk.

Kuunganidza application

Hukuru, kune maseva, pane application - chasara kuiunganidza nekuishambadza. Pakuvaka isu tichashandisa yakajairwa docker kuvaka, asi sechifananidzo chekuchengetedza isu tichashandisa sevhisi kubva kuYandex - mudziyo registry. Asi zvinhu zvekutanga kutanga.

Isu tinokopa chishandiso kumushini wekuvaka, pinda mukati kuburikidza ne ssh uye unganidza mufananidzo:

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

Hafu yehondo yaitwa - ikozvino tinogona kutarisa kushanda kwechikumbiro chedu nekuchivhura uye nekuchitumira 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) $

Chikumbiro chakapindura nekubudirira kurekodha uye kuratidza id yechikamu uye offset umo meseji yakaverengerwa. Zvose zvakasara kugadzira registry muYandex.Cloud uye tumira mufananidzo wedu ipapo (maitirwo ekuita izvi uchishandisa mitsara mitatu inotsanangurwa mu registry.tf file). Gadzira nzvimbo yekuchengetedza:

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.

Pane nzira dzakati wandei dzekusimbisa mune registry yemidziyo - uchishandisa chiratidzo chemhiko, iam tokeni, kana kiyi yeakaundi yebasa. Mamwe mashoko pamusoro penzira idzi anogona kuwanikwa mune zvinyorwa. https://cloud.yandex.ru/docs/container-registry/operations/authentication. Isu tichashandisa kiyi yeakaundi yebasa, saka tinogadzira account:

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.

Zvino chasara kuita kiyi yacho:

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

Isu tinogashira ruzivo nezve id yekuchengetedza yedu, chinjisa kiyi uye pinda mukati:

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 tiise mufananidzo kune registry, tinoda iyo mudziyo wekunyoresa ID, tinoitora kubva kune 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"

Mushure meizvozvo, tinomaka mufananidzo wedu nezita idzva uye torodha:

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

Tinogona kuona kuti mufananidzo wacho wakatakura zvinobudirira:

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

Nenzira, kana iwe ukaisa iyo yc utility pamushini weLinux, unogona kushandisa iwo murairo

yc container registry configure-docker

kugadzirisa docker.

mhedziso

Takaita basa rakaoma rakawanda uye semhedzisiro:

  1. Takauya nemavakirwo ebasa redu remangwana.
  2. Isu takanyora application mugolang iyo inoshandisa pfungwa dzebhizinesi redu.
  3. Takazviunganidza ndokuzvidira muprivate container registry.

Muchikamu chinotevera, tichaenda kune izvo zvinonakidza zvinhu - isu tichaburitsa application yedu mukugadzira uye pakupedzisira totanga mutoro pairi. Usachinja!

Izvi zviri muvhidhiyo kurekodha yemusangano wakavhurika REBRAIN & Yandex.Cloud: Tinotambira zviuru gumi zvikumbiro pasekondi yega yega paYandex Cloud - https://youtu.be/cZLezUm0ekE

Kana iwe uchifarira kuenda kuzviitiko zvakadaro online uye kubvunza mibvunzo munguva chaiyo, batanidza kune DevOps neREBRAIN chiteshi.

Tinoda kutaura zvakakosha kukutendai kuYandex.Cloud nemukana wekugamuchira chiitiko chakadaro. Batanidza navo - https://cloud.yandex.ru/prices

Kana iwe uchida kutamira kune gore kana uine mibvunzo pamusoro pezvivakwa zvako, Inzwa wakasununguka kutumira chikumbiro.

PS Tine 2 emahara edhisheni pamwedzi, pamwe chirongwa chako chichava chimwe chazvo.

Source: www.habr.com

Voeg