Manaiky hetsika 10 izahay ao amin'ny Yandex.Cloud. Fizarana 000

Salama daholo ry namana!

* Ity lahatsoratra ity dia mifototra amin'ny atrikasa misokatra REBRAIN & Yandex.Cloud, raha tianao ny mijery ilay horonan-tsary dia azonao jerena amin'ity rohy ity - https://youtu.be/cZLezUm0ekE

Vao haingana izahay no nanana fahafahana nanandrana mivantana ny Yandex.Cloud. Koa satria te-hanadihady lava sy mafy izahay, dia nafoinay avy hatrany ny hevitra hanangana bilaogy Wordpress tsotra misy fototra rahona - mankaleo loatra izany. Taorian'ny fieritreretana kely dia nanapa-kevitra ny hametraka zavatra mitovitovy amin'ny maritrano serivisy famokarana izahay mba handraisana sy handinihana ny zava-mitranga ao anatin'ny fotoana tena izy.

Tena azoko antoka fa ny ankamaroan'ny orinasa amin'ny Internet (fa tsy ihany) dia manangona fampahalalana be dia be momba ny mpampiasa azy sy ny fihetsik'izy ireo. Farafaharatsiny, ilaina izany amin'ny fandraisana fanapahan-kevitra sasany - ohatra, raha mitantana lalao an-tserasera ianao, dia azonao atao ny mijery ny antontan'isa amin'ny ambaratonga izay matetika miraikitra sy mamafa ny kilalao. Na nahoana ny mpampiasa no mandao ny tranokalanao nefa tsy mividy na inona na inona (miarahaba, Yandex.Metrica).

Noho izany, ny tantaranay: ny fomba nanoratanay fampiharana tamin'ny golang, nanandrana ny kafka vs rabbitmq vs yqs, nanoratra angon-drakitra mivantana tao anaty cluster Clickhouse ary nijery ny angona tamin'ny fampiasana yandex datalens. Mazava ho azy, izany rehetra izany dia novolavolaina tamin'ny fotodrafitrasa mahafinaritra amin'ny endrika docker, terraform, gitlab ci ary, mazava ho azy, prometheus. Andao!

Te hanao famandrihana avy hatrany aho fa tsy ho vitantsika ny manamboatra ny zava-drehetra amin'ny seza iray - noho izany dia mila lahatsoratra maromaro ao amin'ny andian-dahatsoratra. Kely momba ny rafitra:

Fizarana 1 (mamaky azy ianao). Hanapa-kevitra momba ny famaritana sy ny maritrano ny vahaolana izahay, ary hanoratra fampiharana amin'ny golang ihany koa.
Fizarana 2. Mamoaka ny fangatahanay amin'ny famokarana izahay, manao izany ho azo ekena ary andramana ny entana.
Fizarana faha-3. Andeha hojerentsika hoe nahoana isika no mila mitahiry hafatra ao anaty buffer fa tsy anaty rakitra, ary ampitahao koa ny serivisy filaharana kafka, rabbitmq ary yandex.
Fizarana faha-4 Hametraka cluster Clickhouse izahay, hanoratra serivisy streaming handefasana angona avy amin'ny buffer any, ary hametraka sary amin'ny datalens.
Fizarana faha-5 Andao hitondra ny fotodrafitrasa manontolo amin'ny endriny mety - manangana ci/cd mampiasa gitlab ci, mampifandray ny fanaraha-maso sy ny fitadiavana serivisy amin'ny alàlan'ny prometheus sy consul.

TK

Voalohany, andeha hojerentsika ny fepetra momba ny fanondroana - inona marina no tiantsika ho azo ho vokatr'izany.

  1. Tianay ny hanana teboka farany toy ny events.kis.im (kis.im no sehatra fitsapana izay hampiasainay manerana ny lahatsoratra rehetra), izay tokony handray hetsika amin'ny alàlan'ny HTTPS.
  2. Ny hetsika dia json tsotra toy ny: {“event”: “view”, “os”: “linux”, “browser”: “chrome”}. Amin'ny dingana farany dia hanampy saha kely kokoa isika, saingy tsy handray anjara lehibe izany. Raha tianao dia azonao atao ny mivadika amin'ny protobuf.
  3. Ny serivisy dia tsy maintsy mahazaka hetsika 10 isan-tsegondra.
  4. Tokony ho azo atao ny mi-scale mitsivalana amin'ny alalan'ny fampidirana tranga vaovao amin'ny vahaolanay. Ary ho tsara raha afaka mamindra ny tapany anoloana amin'ny geolocations samihafa isika mba hampihenana ny fahatarana amin'ny fangatahan'ny mpanjifa.
  5. Fandeferana fahadisoana. Ny vahaolana dia tsy maintsy marin-toerana tsara ary afaka miaina amin'ny fianjeran'ny faritra rehetra (hatramin'ny isa, mazava ho azy).

maritrano

Amin'ny ankapobeny, ho an'ity karazana asa ity, ny maritrano klasika dia efa noforonina hatry ny ela izay ahafahan'ny scaling mahomby. Ny sary dia mampiseho ohatra iray amin'ny vahaolana ataontsika.

Manaiky hetsika 10 izahay ao amin'ny Yandex.Cloud. Fizarana 000

Ka izay ananantsika:

1. Eo amin'ny ankavia ny fitaovantsika izay miteraka hetsika isan-karazany, na mpilalao mameno ambaratonga amin'ny kilalao amin'ny finday na mamorona baiko amin'ny fivarotana an-tserasera amin'ny alàlan'ny navigateur mahazatra. Ny hetsika iray, araka ny voalaza ao amin'ny famaritana, dia json tsotra izay alefa any amin'ny teboka farany - events.kis.im.

2. Ny mpizara roa voalohany dia mpandrindra tsotra, ny tena asany dia:

  • Aoka ho azo atao foana. Mba hanaovana izany, azonao atao ny mampiasa, ohatra, keepalived, izay hanova ny IP virtoaly eo anelanelan'ny nodes raha misy olana.
  • Atsaharo ny TLS. Eny, hamarana ny TLS amin'izy ireo izahay. Voalohany, mba hifanaraka amin'ny fepetra ara-teknika ny vahaolana ataontsika, ary faharoa, mba hanamaivanana ny vesatry ny fametrahana fifandraisana misy miafina avy amin'ireo mpizara backend.
  • Ampifandanja ny fangatahana miditra amin'ireo mpizara backend misy. Ny teny fototra eto dia azo idirana. Mifototra amin'izany, tonga amin'ny fahatakarana isika fa ny mpandrindra entana dia tsy maintsy afaka manara-maso ny lohamilina amin'ny fampiharana ary manakana ny fampifandanjana ny fifamoivoizana amin'ny node tsy nahomby.

3. Aorian'ny balancers, dia manana mpizara fampiharana manao fampiharana tsotra izahay. Tokony ho afaka hanaiky ny fangatahana miditra amin'ny alàlan'ny HTTP, manamarina ny json nalefa ary mametraka ny angon-drakitra ao anaty buffer.

4. Ny kisary dia mampiseho ny kafka ho toy ny buffer, na dia mazava ho azy fa azo ampiasaina amin'ity ambaratonga ity ny serivisy hafa mitovy amin'izany. Hampitahantsika ny Kafka, rabbitmq ary yqs ao amin'ny lahatsoratra fahatelo.

5. Ny teboka farany amin'ny maritranontsika dia Clickhouse - angona tsanganana izay ahafahanao mitahiry sy manodina angon-drakitra be dia be. Amin'ity ambaratonga ity, mila mamindra ny angona avy amin'ny buffer mankany amin'ny rafitra fitahirizana ny tenany (miresaka bebe kokoa amin'ity lahatsoratra 4 ity).

Ity endrika ity dia ahafahantsika manitsy ny sosona tsirairay mitsivalana. Tsy afaka miatrika ny mpizara backend - andao ampiana zavatra iray hafa - raha ny marina, dia fampiharana tsy misy fanjakana izy ireo, ary noho izany dia azo atao izany na dia mandeha ho azy aza. Tsy mandeha ny buffer amin'ny endrika Kafka — andao hanampy mpizara bebe kokoa ary hamindra ny ampahany amin'ny lohahevitray amin'izy ireo. Tsy zakany ny Clickhouse - tsy azo atao izany :) Raha ny marina, hampifandray ireo mpizara ihany koa izahay ary hanaparitaka ny angona.

Raha ny tokony ho izy, raha te hampihatra ny ampahany azo atao amin'ny famaritana ara-teknika sy ny mari-pamantaranay amin'ny geolocation samihafa ianao, dia tsy misy zavatra tsotra kokoa:

Manaiky hetsika 10 izahay ao amin'ny Yandex.Cloud. Fizarana 000

Ao amin'ny geolocation tsirairay dia mametraka mpifandanja entana misy fampiharana sy kafka. Amin'ny ankapobeny, ny lohamilina fampiharana 2, ny kafka 3 ary ny mpandrindra rahona, ohatra, cloudflare, dia ampy, izay hanamarina ny fisian'ny node fampiharana sy ny fangatahana fifandanjana amin'ny geolocation mifototra amin'ny adiresy IP loharanon'ny mpanjifa. Noho izany, ny angon-drakitra nalefan'ny mpanjifa amerikana dia hipetraka amin'ny mpizara amerikana. Ary ny angona avy any Afrika dia any Afrika.

Avy eo dia tena tsotra ny zava-drehetra - mampiasa ny fitaratry ny fitaratra avy amin'ny set Kafka izahay ary mandika ny angon-drakitra rehetra avy amin'ny toerana rehetra mankany amin'ny foibe data afovoany any Rosia. Amin'ny ankapobeny, manara-maso ny angon-drakitra izahay ary mirakitra izany ao amin'ny Clickhouse ho an'ny sary manaraka.

Noho izany, nandamina ny maritrano izahay - andao hanomboka hanozongozona Yandex.Cloud!

Manoratra fampiharana

Alohan'ny Cloud dia mila manam-paharetana kely ianao ary manoratra serivisy tsotra mba hikarakarana hetsika ho avy. Hampiasa ny golang izahay satria nanaporofo tsara ny tenany ho fiteny iray hanoratana rindranasa tambajotra.

Rehefa avy nandany adiny iray (mety adiny roa) dia mahazo zavatra toy izao isika: https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/main.go.

Inona avy ireo hevi-dehibe tiako ho marihina eto:

1. Rehefa manomboka ny fampiharana dia azonao atao ny mamaritra saina roa. Ny iray dia tompon'andraikitra amin'ny seranan-tsambo izay hihainoantsika ny fangatahana http (-addr). Ny faharoa dia ho an'ny adiresin'ny mpizara kafka izay handraketana ny hetsikay (-kafka):

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

2. Ny fampiharana dia mampiasa ny tranomboky sarama ([] github.com/Shopify/sarama) handefa hafatra amin'ny kluster kafka. Napetratsika avy hatrany ny fandrindrana mikendry ny hafainganam-pandeha ambony indrindra:

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

3. Ny fampiharana anay koa dia manana mpanjifa prometheus naorina, izay manangona metrika isan-karazany, toy ny:

  • isan'ny fangatahana amin'ny fangatahanay;
  • ny isan'ny lesoka rehefa manatanteraka ny fangatahana (tsy azo atao ny mamaky ny fangatahana lahatsoratra, tapaka json, tsy afaka manoratra amin'ny Kafka);
  • fotoana fikarakarana fangatahana iray avy amin'ny mpanjifa, anisan'izany ny fotoana hanoratana hafatra ho an'i Kafka.

4. Teboka farany telo izoran'ny fampiharana anay:

  • /status - miverena ok fotsiny mba hampisehoana fa velona isika. Na dia afaka manampy fisavana sasany aza ianao, toy ny fisian'ny cluster Kafka.
  • /metrics - araka ity url ity, ny mpanjifa prometheus dia hamerina ny metrika nangoniny.
  • /post no teboka farany indrindra handefasana ny fangatahana POST miaraka amin'i json ao anatiny. Ny fampiharana anay dia manamarina ny maha-marina ny json ary raha tsara ny zava-drehetra dia manoratra ny angon-drakitra amin'ny cluster Kafka.

Hanao famandrihana aho fa tsy tonga lafatra ny kaody - azo (ary tokony!) vita. Ohatra, azonao atao ny mijanona amin'ny fampiasana ny net/http naorina ary mifindra amin'ny http haingana kokoa. Na azonao atao ny mahazo fotoana fanodinana sy loharanon'ny cpu amin'ny alàlan'ny famindrana ny fanamarinana ny maha-marina ny json mankany amin'ny dingana manaraka - rehefa afindra avy amin'ny buffer mankany amin'ny cluster clickhouse ny angon-drakitra.

Ho fanampin'ny lafiny fampandrosoana ny olana dia nieritreritra avy hatrany ny fotodrafitrasa ho avy izahay ary nanapa-kevitra ny hametraka ny fampiharana amin'ny docker. Ny Dockerfile farany amin'ny fananganana ny fampiharana dia https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/Dockerfile. Amin'ny ankapobeny dia tena tsotra izany, ny hany teboka tiako hojerena dia ny fivoriambe multistage, izay ahafahantsika mampihena ny sary farany amin'ny fitoerantsika.

Dingana voalohany amin'ny rahona

Voalohany indrindra, misoratra anarana amin'ny cloud.yandex.ru. Aorian'ny famenoana ny sehatra ilaina rehetra, dia hamorona kaonty isika ary omena fanomezana ho an'ny vola sasany, izay azo ampiasaina hitsapana serivisy rahona. Raha te hamerina ny dingana rehetra avy amin'ny lahatsoratray ianao, ity fanomezana ity dia tokony ho ampy ho anao.

Aorian'ny fisoratana anarana dia hamorona rahona misaraka sy lahatahiry default ho anao, izay ahafahanao manomboka mamorona loharanon-karena rahona. Amin'ny ankapobeny, ao amin'ny Yandex.Cloud, ny fifandraisan'ny loharanon-karena dia toy izao:

Manaiky hetsika 10 izahay ao amin'ny Yandex.Cloud. Fizarana 000

Afaka mamorona rahona maromaro ho an'ny kaonty iray ianao. Ary ao anatin'ny rahona, manaova lahatahiry samihafa ho an'ny tetikasa orinasa samihafa. Azonao atao ny mamaky bebe kokoa momba izany ao amin'ny antontan-taratasy - https://cloud.yandex.ru/docs/resource-manager/concepts/resources-hierarchy. Raha ny marina, matetika aho no miresaka momba azy io eto ambany ao amin'ny lahatsoratra. Rehefa nanangana ny fotodrafitrasa manontolo hatrany am-piandohana aho dia nanampy ahy mihoatra ny indray mandeha ny antontan-taratasy, ka manoro hevitra anao aho handalina izany.

Mba hitantana ny rahona dia azonao ampiasaina ny interface interface sy ny utility console - yc. Ny fametrahana dia atao amin'ny baiko iray (ho an'ny Linux sy Mac Os):

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

Raha tezitra amin'ny fampandehanana script avy amin'ny Internet ny manam-pahaizana manokana momba ny fiarovana anatiny, dia azonao atao ny manokatra ilay script ary mamaky azy, ary faharoa, ataonay eo ambanin'ny mpampiasa anay izany - tsy misy zon'ny faka.

Raha te-hametraka mpanjifa ho an'ny Windows ianao dia azonao ampiasaina ny torolàlana eto ary tanterahana avy eo yc inithanamboatra azy tanteraka:

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

Amin'ny ankapobeny dia tsotra ny dingana - mila mahazo mari-pamantarana oauth ianao hitantana ny rahona, safidio ny rahona sy ny lahatahiry hampiasainao.

Raha manana kaonty na lahatahiry maromaro ao anatin'ny rahona iray ihany ianao, dia azonao atao ny mamorona mombamomba fanampiny miaraka amin'ny filaharana misaraka amin'ny alàlan'ny yc config profil mamorona sy mifamadika eo anelanelan'izy ireo.

Ankoatra ireo fomba voalaza etsy ambony, ny ekipa Yandex.Cloud dia nanoratra tena tsara plugin ho an'ny terraform ho an'ny fitantanana ny loharanon-karena rahona. Ho an'ny ahy dia nanomana tahiry git aho, izay nilazako ny loharano rehetra hoforonina ho ampahany amin'ny lahatsoratra - https://github.com/rebrainme/yandex-cloud-events/. Liana amin'ny sampana master izahay, andao hatao klone eto an-toerana:


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/

Ny variables lehibe rehetra ampiasaina amin'ny terraform dia voasoratra ao amin'ny rakitra main.tf. Hanombohana dia mamorona rakitra private.auto.tfvars ao amin'ny lahatahiry terraform miaraka amin'ireto atiny manaraka ireto:

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

Ny variables rehetra dia azo alaina ao amin'ny lisitry ny yc config, satria efa nanamboatra ny fampitaovana console izahay. Manoro hevitra anao aho mba hampiditra avy hatrany ny private.auto.tfvars amin'ny .gitignore, mba tsy hamoaka data manokana tsy nahy.

Ao amin'ny private.auto.tfvars dia nanondro angona avy amin'ny Cloudflare ihany koa izahay - mba hamoronana firaketana DNS sy proxy ny sehatra lehibe events.kis.im amin'ny lohamilinay. Raha tsy te hampiasa cloudflare ianao, dia esory ny fanombohana ny mpamatsy cloudflare amin'ny main.tf sy ny rakitra dns.tf, izay tompon'andraikitra amin'ny famoronana ny rakitra dns ilaina.

Amin'ny asantsika dia hanambatra ny fomba telo rehetra - ny interface interface, ny fampitaovana console ary ny terraform.

Tambajotra virtoaly

Raha ny marina, azonao atao ny mitsambikina ity dingana ity, satria rehefa mamorona rahona vaovao ianao dia hanana tambajotra misaraka ho azy ary zana-tsipìka 3 noforonina - iray isaky ny faritra misy azy. Saingy mbola tianay ny hanao tambajotra mitokana ho an'ny tetikasanay miaraka amin'ny adiresiny manokana. Ny kisary ankapoben'ny fomba fiasan'ny tambajotra ao amin'ny Yandex.Cloud dia aseho amin'ny sary etsy ambany (nalaina marina avy amin'ny https://cloud.yandex.ru/docs/vpc/concepts/)

Manaiky hetsika 10 izahay ao amin'ny Yandex.Cloud. Fizarana 000

Noho izany, mamorona tambajotra iraisana ianao izay ahafahan'ny loharano mifampiresaka. Ho an'ny faritra misy azy tsirairay dia misy subnet iray noforonina miaraka amin'ny adiresiny manokana ary mifandray amin'ny tambajotra ankapobeny. Vokatr'izany dia afaka mifandray daholo ny loharanon-drahona ao anatiny, na dia any amin'ny faritra misy azy aza izy ireo. Ny loharano mifandray amin'ny tambajotra rahona samihafa dia tsy afaka mifankahita afa-tsy amin'ny alàlan'ny adiresy ivelany. Raha ny marina, ahoana no fiasan'ity ody ao anatiny ity, nofaritana tsara tao amin'ny Habré.

Ny famoronana tambajotra dia voalaza ao amin'ny rakitra network.tf avy amin'ny tahiry. Ao no mamorona tambajotra tsy miankina iraisana anatiny ary mampifandray subnets telo amin'izany amin'ny faritra misy azo ampiasaina - internal-a (172.16.1.0/24), internal-b (172.16.2.0/24), internal-c (172.16.3.0/24). ).

Atombohy ny terraform ary mamorona tambajotra:

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.

Mahafinaritra! Namorona ny tambajotranay izahay ary vonona ny hamorona serivisy anatiny.

Mamorona milina virtoaly

Mba hitsapana ny fampiharana dia mila mamorona milina virtoaly roa ihany isika - mila ny voalohany hananganana sy hampandehanana ny fampiharana, ny faharoa hampandeha ny kafka, izay hampiasainay hitahirizana hafatra ho avy. Ary hamorona milina hafa izay hamboarinay ny prometheus hanaraha-maso ny fampiharana.

Ny milina virtoaly dia hamboarina amin'ny alàlan'ny ansible, ka alohan'ny hanombohan'ny terraform dia ataovy azo antoka fa manana ny iray amin'ireo kinova farany ansible ianao. Ary apetraho ireo andraikitra ilaina amin'ny galaxy ansible:

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

Ao anatin'ny lahatahiry ansible misy ohatra .ansible.cfg fichier configuration izay ampiasaiko. Mety ho ilaina izany.

Alohan'ny hamoronana milina virtoaly dia ataovy izay hahazoana antoka fa manana ssh-agent mandeha ianao ary ampiana fanalahidy ssh, raha tsy izany dia tsy afaka mifandray amin'ireo milina noforonina ny terraform. Mazava ho azy fa nahita bibikely tao amin'ny os x aho: https://github.com/ansible/ansible/issues/32499#issuecomment-341578864. Mba hisorohana izany tsy hitranga indray, ampio faribolana kely amin'ny env alohan'ny hanombohana Terraform:

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

Ao amin'ny lahatahiry misy terraform dia mamorona loharano ilaina izahay:

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

Raha nifarana soa aman-tsara ny zava-drehetra (ary tokony ho izany), dia hanana milina virtoaly telo isika:

  1. manangana - milina fitiliana sy fananganana fampiharana. Docker dia napetraka ho azy avy amin'ny Ansible.
  2. fanaraha-maso - milina fanaraha-maso - prometheus & grafana napetraka eo aminy. Fenitry ny fidirana / tenimiafina: admin / admin
  3. kafka dia milina kely misy kafka napetraka, azo idirana amin'ny seranan-tsambo 9092.

Andao ho azo antoka fa eo amin'ny toerany izy rehetra:

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

Efa misy ny loharanon-karena, ary avy eto isika dia afaka mahazo ny adiresy IP-ny. Amin'izao manaraka izao dia hampiasa adiresy IP aho hifandraisana amin'ny ssh ary hizaha toetra ny fampiharana. Raha manana kaonty cloudflare mifandray amin'ny terraform ianao dia aza misalasala mampiasa anarana DNS vao noforonina.
Raha ny tokony ho izy, rehefa mamorona milina virtoaly dia omena IP anatiny sy anarana DNS anatiny, mba hahafahanao miditra amin'ireo mpizara ao anaty tambajotra amin'ny anarana:

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

Ity dia mahasoa antsika hanondro amin'ny fampiharana ny teboka farany amin'ny kafk.

Fanangonana ny fampiharana

Tsara, misy mpizara, misy fampiharana - ny hany sisa tavela dia ny fanangonana azy sy ny famoahana azy. Ho an'ny fananganana dia hampiasa ny fananganana docker mahazatra izahay, fa ho fitahirizana sary dia hampiasa serivisy avy amin'ny Yandex - rejisitry ny container. Fa ny zavatra voalohany aloha.

Mandika ny fampiharana amin'ny milina fananganana izahay, midira amin'ny ssh ary manangona ny sary:

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

Vita ny antsasaky ny ady - izao isika dia afaka manamarina ny fiasan'ny fampiharana amin'ny alàlan'ny fandefasana azy ary alefaso any amin'ny 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) $

Namaly tamim-pahombiazana ny fandraketana ny fampiharana ary nanondro ny id amin'ny fisarahana sy ny offset izay nampidirana ilay hafatra. Ny hany sisa atao dia ny mamorona rejisitra ao amin'ny Yandex.Cloud ary ampidiro ao ny sarinay (ny fomba hanaovana izany amin'ny alàlan'ny andalana telo dia voalaza ao amin'ny rakitra registry.tf). Mamorona fitahirizana:

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.

Misy fomba maromaro hanamarinana ao amin'ny rejisitra kaontenera - amin'ny fampiasana marika oauth, marika iam, na fanalahidin'ny kaonty serivisy. Ny antsipiriany bebe kokoa momba ireo fomba ireo dia azo jerena ao amin'ny antontan-taratasy. https://cloud.yandex.ru/docs/container-registry/operations/authentication. Hampiasa ny fanalahidin'ny kaonty serivisy izahay, ka mamorona kaonty:

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.

Ny hany sisa tavela dia ny manao fanalahidy ho azy:

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

Mahazo fampahalalana momba ny id amin'ny fitahirizanay izahay, mamindra ny lakile ary miditra:

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

Mba hampidirana ny sary ho any amin'ny rejisitra, dia mila ny kaontenera registry ID, maka izany avy amin'ny 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"

Aorian'izay, asio marika amin'ny anarana vaovao ny sarinay ary ampidiro:

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

Afaka manamarina isika fa nahomby ilay sary:

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

Raha ny marina, raha mametraka ny yc utility amin'ny milina Linux ianao dia afaka mampiasa ny baiko

yc container registry configure-docker

hanefa ny docker.

famaranana

Nahavita asa mafy be izahay ary vokatr'izany:

  1. Tonga tamin'ny maritrano ny serivisy ho avy izahay.
  2. Nanoratra fampiharana amin'ny golang izay mampihatra ny lojikan'ny orinasanay izahay.
  3. Nangoninay izany ary nararaka tao amin'ny rejisitry ny kaontenera manokana.

Amin'ny ampahany manaraka dia hiroso amin'ny zavatra mahaliana isika - hamoaka ny fampiharana ho amin'ny famokarana isika ary hanomboka ny enta-mavesatra eo aminy. Aza mifamadika!

Ity fitaovana ity dia ao amin'ny fandraketana horonan-tsary amin'ny atrikasa misokatra REBRAIN & Yandex.Cloud: Manaiky fangatahana 10 isan-tsegondra izahay amin'ny Yandex Cloud - https://youtu.be/cZLezUm0ekE

Raha liana amin'ny fanatrehana hetsika toy izany amin'ny Internet ianao ary mametraka fanontaniana amin'ny fotoana tena izy, mifandray amin'ny fantsona DevOps avy amin'i REBRAIN.

Te-hisaotra manokana ny Yandex.Cloud izahay noho ny fahafahana nampiantrano hetsika toy izany. Rohy amin'izy ireo - https://cloud.yandex.ru/prices

Raha mila mifindra any amin'ny rahona ianao na manana fanontaniana momba ny fotodrafitrasao, aza misalasala mametraka fangatahana.

PS Manana audit maimaim-poana 2 isam-bolana izahay, angamba ny tetikasanao dia iray amin'izy ireo.

Source: www.habr.com

Add a comment