10 eventus accipimus in Yandex.Cloud. Pars I

Salvete omnes, amici!

* Articulus hic in officina REBRAIN & Yandex.Cloud aperta officina nititur, si mavis videre video, reperire potes in hac pagina - https://youtu.be/cZLezUm0ekE

Nuper apud nos occasionem Yandex.Cloud habito experiendi habuimus. Cum longum ac durum explorare vellemus, statim idea demittendae blogi simplicis Wordpress cum base nube - taediosa fuit. Post nonnullam cogitationem, placuit nobis aliquid simile explicandi ad operandi architecturae operae recipiendi et solvendi eventus in proximo modo temporis reali.

Pro certo certius sum plurimas partes online (non solum) negotiorum quodam modo montem informationum colligere de usoribus eorumque actionibus. Ut minimum, hoc necessarium est ad quasdam decisiones faciendas, exempli gratia, si lusum online procuras, statisticas inspicere potes in quibus usores plerumque haerent et ludibrium tuum delebunt. Aut cur utentes locum tuum relinquunt sine ullo acquisitione (Salve, Yandex.Metrica).

Narratio nostra sic: quomodo applicationem in golang scripsimus, probata kafka vs lepmq vs yqs, notitias in glomerulas clickhouse fluentes scripsimus et data yandex datalens subjicitur. Naturaliter haec omnia infrastructura condiuntur in forma dokali, terraformi, gitlab ci et, scilicet, prometheo. Abeamus!

Velimus statim reservationem facere, quod omnia in uno sedente configurare non poterimus, hoc enim pluribus articulis in serie indigebimus. Paululum de structura;

Pars I (legis eam). De solutionis specificatione et architectura statuemus, ac etiam applicationem in golang scribemus.
Pars II. Applicationem nostram ad productionem relaxamus, scalam facimus et onus probamus.
Pars III. Experiamur ad instar sicco cur necesse est nuntios in quiddam et non in lima reponere, et etiam kafka, lepormq et yandex queue servitium comparare.
Part 4 Pandemus botrum Clickhouse, scribentes profusum officium transferendi notitia ex quiddam ibi, et visualizationem in datalens constituemus.
Part 5 Totam infrastructuram in figuram propriam inducamus - ci/cd gitlab ci/cd utens, iungo vigilantiam et inventionem servitii utens prometheo et consule.

TK

Primum, formulas relationis proponamus - quam rem consequenter obtinere volumus.

  1. Terminum habere volumus sicut eventus.kis.im (kis.im est domain experimentalis quo per omnes articulos utemur), qui eventus uti HTTPS recipere debent.
  2. Eventus simplex json similis est: {"eventus": "visum", "os": "linux", "pasco": "chrome"}. In ultimo gradu paulo plus agros adiciamus, sed hoc munus magnum non agemus. Si vis, protobuf vertas potes.
  3. Ministerium debet 10 eventus secundo procedere.
  4. Possibile est scandere horizontaliter per simpliciter addendo novas instantias ad solutionem nostram. Et bene erit si primam partem ad diversas geolocationes movere possumus ad petitiones clientium latency reducere.
  5. Culpa tolerantia. Solutio satis stabilis debet esse et cuiuslibet partium casus superesse (usque ad certum numerum scilicet).

Architecture

In universum ad hoc genus operis architecturae classicae iamdudum inventae sunt quae scalas efficientes admittunt. Figura exemplum solutionis nostrae ostendit.

10 eventus accipimus in Yandex.Cloud. Pars I

Quid igitur habemus;

1. In sinistra sunt cogitationes nostrae quae varios eventus generant, fiat lusores complentes campum in ludibrio in felis vel ordinem creandi in an online store per navigatrum regularem. Eventus, prout in specificatione specificatur, simplex est json qui ad nostrum finem - events.kis.im mittitur.

2. Primi duo servientes simplices libratores sunt, praecipuum munus eorum sunt;

  • Constanter praesto. Ad hoc uti potes, exempli gratia, conservativa, quae virtualem IP inter nodos in casu quaestionum mutabit.
  • TERMINANT TLS. TLS terminabimus super eis. Uno modo, ut solutio nostra cum technicis specificationibus obtemperet, secundo, ut onus sublevet connexionem encryptam constituendi a servientibus nostris backend.
  • Libra advenientis petitiones praesto est servientibus backend. Clavis verbi hic facilis est. Ex hoc venimus ad intellegendum quod libratores onerare debebunt ut servitores nostros cum applicationibus monitores praebeant et negotiatio ad nodos defecisse desinat.

3. Post libratores habemus applicationes administros satis simplicis applicationis currentes. Petitiones advenientes accipere possit per HTTP, json missum convalidare et in quiddam notitias imponere.

4. Ex icone kafka quiddam quasi quiddam ostendit, cum tamen alia similia officia in hoc gradu adhiberi possunt. Comparabimus Kafka, lepormq et yqs in tertio articulo.

5. Punctum paenultimum architecturae nostrae est Clickhouse - database columnaris quae te permittit ingentem copiam notitiarum condere ac processus. In hoc gradu, notitias transferre debemus ab quiddam ad ipsam systema reponendi (plus de hoc in articulo IV).

Hoc consilium nobis permittit ut singulae tabulae separatim scanderent. Ministri backend tolerare non possunt - unum plus addamus - cum omnes applicationes stateless sunt, et ideo hoc etiam ipso facto fieri potest. Kafka-style quiddam non operatur—addere plures servientes et aliquas partitiones argumenti nostri ad eos transferre. Clickhouse illud tractare non potest - impossibilis est :) Revera, ministris quoque coniungemus et notitia testa.

Obiter, si vis ad libitum efficiendum partem specificationum technicarum ac scalarum in diversis geolocations, nihil est simplicius;

10 eventus accipimus in Yandex.Cloud. Pars I

In unaquaque geolocatione explicamus libratorem cum applicatione et kafka onus. In genere, 2 applicationis ministratores, 3 kafka nodi et nubes librarius, exempli gratia, nubes sunt satis, quae promptitudinem nodis applicationis et petitiones staterae in geolocation fundata in fonte IP inscriptionis clientis sustinebit. Ita, notitia clientis Americanae missa in servientibus Americanis terram faciet. Et ex Africa in Africa.

Tunc omnia simplicia sunt - speculi instrumenti ex Kafka posita et omnia notitias ex omnibus locis ad nostram centrum data media in Russia sita imitamur. Interne, datam parteme ac notare in Clickhouse pro visualizationis subsequente.

Ita architecturae digessi sumus - Yandex.Cloud excutientes committitur!

Applicationem scribo

Ante Cloudem, adhuc modicum patientem esse et scribere satis simplex servitium ad processum rerum advenientium. Utemur golang quia optime se probavit sicut linguam ad applicationes retis scribendas.

Post horam consumptis (fortasse duobus horis), aliquid simile accipimus: https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/main.go.

Quae praecipua sunt hic notare velim;

1. Cum applicatione incipias, duo vexilla exprimere potes. Una est portus in quo audiemus petitiones advenientes (-addr). Secundum est oratio pro kafka servo ubi eventus nostros memorabimus (-kafka);

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

2. Usus bibliothecam samma applicatione ([] github.com/Shopify/sarama) mittere nuntios ad kafka botrum. Nos statim occasus maximus processus celeritatem intendebat:

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

3. Applicatio quoque nostra in clientelam structili, qui varias res metricas colligit, ut:

  • multis petitionibus nostris adhibitis;
  • numerus errorum cum exsequens petitionem (impossibile est legere post petitionem, fractum json, impossibile est Kafka scribere);
  • tempus expediendi postulatio unius clientis, inter tempus epistulae ad Kafka scribendae.

4. Tres terminos applicationis nostros processus;

  • /status - simpliciter referre ok ut ostenderet nos vivere. Licet aliquas compescmenta addere potes, ut promptitudo Kafka botri.
  • /metrics - according to this url, the prometheus client will return the metrics which has collected.
  • /post est principale terminus ubi POST petitiones cum json intus mittentur. Applicatio nostra json ad validitatem coercet et, si omnia bene sunt, datam scribit ad botrum Kafka.

Reservationem faciam ut in codice perfecto non sit — potest (et debet!) absolvi. Exempli gratia, prohibere potes utere constructo in rete/http et ad velociores fasthttp. Vel ad tempus processui acquirere potes et facultates CPU movendo validitatem json ad posteriorem reprimendam - cum notitia a quiddam ad botrum strepitatorium transfertur.

Praeter evolutionem autem litis, statim de futura infrastructura nostra cogitavimus et decrevimus applicationem per docker explicandam. Extremum Dockerfile ad aedificationem application is https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/Dockerfile. In universum plane simplex est, unum punctum quod vellem attendere ad multitudinem multitudinum, quae sinit nos reducere ultimam imaginem continentis nostri.

Primum gradus in nube

Imprimis, subcriptio on cloud.yandex.ru. Postquam agros necessarios implevit, rationem creabimus et donationem certa pecuniae datae, quae nubes experiri solebat, officia. Si omnes gradus a nostro articulo repetere vis, haec concessio tibi satis sit.

Post adnotationem, nubes separata et defalta pro te creabuntur, in quibus nubes creandi facultates inire potes. Fere, in Yandex.Cloud, relatio facultatum hoc spectat:

10 eventus accipimus in Yandex.Cloud. Pars I

Plures nubes propter unam rationem creare potes. Et intra nubem faciunt diversa directoria pro diversis societatibus inceptis. Plura de hoc legere potes in documentis. https://cloud.yandex.ru/docs/resource-manager/concepts/resources-hierarchy. Obiter eam saepe infra in textu refero. Cum totam infrastructuram a scabere constituo, documenta me non semel adiuverunt, ideo te admoneo ut eam studeas.

Ad nubem administrandam, vel interfacie interretiali vel utilitate consolae - yc - uti potes. Installatio uno mandato perficitur (exempli gratia...). Linux et Mac OS):

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

Si artifex securitatis internae tuae saevit de scriptis e Interreti currit, tum primum potes scriptionem aperire et legere, deinde sub usore nostro - sine iuribus radicibus currimus.

Si clientem pro Fenestra installare vis, instructionibus uti potes hic et faciatis yc initut plene mos est:

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

In principio, processus simplex est - primo debes accipere signum oauth ad nubem administrandi, elige nubem et folder uteris.

Si plures rationes vel folder in eadem nube habes, additional profiles cum uncinis separatis per yc config profile creare et inter eas commutare potes.

Praeter supra modos, Yandex.Cloud turma scripsit valde bona plugin for terraform ad nubes administrandi facultates. Ego vero armarium paravi, ubi omnes facultates quae in parte articuli creabuntur descripsi. https://github.com/rebrainme/yandex-cloud-events/. Nos interest in ramo domini, clone eam localiter petamus;


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/

Omnes differentiae principales quae in terraform adhibentur in tabula principali scripta sunt. Incipias, crea privatum.auto.tfvars fasciculum in folder terraformi cum sequenti contento:

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

Omnes variabiles ex elencho config sumi possunt, cum iam configurati sumus utilitatis consolatorium. Moneo te statim adiciendi private.auto.tfvars to .gitignore, ne forte notitias privatas edas.

In private.auto.tfvars etiam certa notitia ex Cloudflare - creare DNS monumenta et procuratorem principalium rerum eventus.kis.im servientibus nostris. Si nubes uti non vis, initializationem provisoris nubeculae remove in principali.tf et fasciculi dns.tf, quod responsabile est ad conficiendas monumenta necessaria.

In opere nostro omnes tres modos componemus, interretialem, consolationis utilitatem, et terraformem.

Lorem ipsum retiacula

Ut sis honestus, hunc gradum transilire potes, quia cum novam nubem creas, automatice retis singulas et 3 subnets creatas habebis - unum pro qualibet zona disponibilitate. Nolumus autem adhuc facere retia separatim ad propositum nostrum cum sua inscriptione. Commune schematis de operatione network in Yandex.Cloud ostenditur in figura infra (honeste sumpta ex .) https://cloud.yandex.ru/docs/vpc/concepts/)

10 eventus accipimus in Yandex.Cloud. Pars I

Sic, retis communis creas intra quas facultates inter se communicare possunt. Ad zonam disponibilitatem quamlibet, subnet creatum est cum sua inscriptione et connexione ad network generale. Quam ob rem omnes opes nubes in ea communicare possunt, etiam si zonae disponibilitate diversa sunt. Facultates coniunctae diversis reticulis nubeculae se mutuo videre possunt nisi per inscriptiones externas. Viam quomodo hoc opus magicum intus agit? bene descriptus est in Habre.

Retis creatio in retiaculis.tf fasciculi e conditorio describitur. Ibi unum commune retis privatis internam creamus et ei tres subnetes in diversis disponibilitate cingulis - internis-a (172.16.1.0/24), internus-b efficimus (172.16.2.0/24), internus-c (172.16.3.0/24. ).

Initialize terraform et retiacula crea:

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.

Magna! Reticulum nostrum creavimus et nunc parati sumus ad officia interna creare.

Creando virtualis machinis

Ad applicationem probandam, tantum opus est duas machinas virtuales creare - prima applicatione ad aedificandum et currendum opus erit, secunda ad kafka currendum, quibus nuntiis advenientis condere utemur. Aliam quoque machinam creabimus ubi prometheum applicationis monitori figemus.

Machinae virtuales figurabuntur utentes ansibilis, antequam terraformes incipiant, fac te habere unam ex ultimis versionibus anibilis. Ac functiones necessarias cum galaxia ansible institue:

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

Intra folder ansible est exemplum .ansible.cfg fasciculi configurationis quo utor. Sit veniam prompta ut.

Antequam virtualis machinis creandis, fac te habere curriculum ssh-agentem et clavis ssh addita, aliter terraform machinis creatis coniungere non poterit. Ego sane in os x cimex incidi; https://github.com/ansible/ansible/issues/32499#issuecomment-341578864. Hoc ut ne iterum fiat, parvam variabilem env adde antequam Terraform deducas:

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

In folder cum terraformi necessarias facultates creamus:

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

Si omnia feliciter consummata sunt (et debet) tres machinas virtuales habebimus;

  1. aedificare - machina probandi et aedificandi applicationem. Docker automatice ab Ansible est constitutus.
  2. magna - machina magna - prometheus & grafana inauguratus est. Login / password vexillum: admin / admin
  3. kafka parva machina est cum kafka inauguratus, accessibilis in portu 9092.

Omnia in loco faciamus;

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

Facultates in loco sunt, et hinc IP inscriptiones suas obtinere possumus. In sequentibus utar IP inscriptionibus ad coniungere per ssh et applicationem probabo. Si rationem nubis cum terraformi coniunctam habes, libenter uti nominibus DNS recenter creatis.
Obiter, cum virtualem machinam creando, nomen internum IP et DNS internum dantur, ergo ministris intra retiaculum accedere potes nomine:

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

Hoc nobis utile erit in applicatione ad terminum cum kafk indicare.

Applicationem assembling

Magni, adsunt ministri, applicatio additur - omnia quae supersunt congreganda sunt et divulganda. Ad struendum utemur solito navale aedificato, sed ad imaginem repositionis utemur servitio ex Yandex - vase registro. Prima autem.

Applicationem ad machinam fabricandam imitamur, aperi in via ssh et imaginem congregamus:

vozerov@mba:~/events/terraform (master) $ cd ..
vozerov@mba:~/events (master) $ rsync -av app/ ubuntu@84.201.132.3: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

Dimidium facti proelium est - nunc inspicimus functionem applicationis nostrae, deducendo et mittendo ad 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) $

Applicatio respondit feliciter in actis et indicatis id partitionis et nonummy in quibus nuntius inclusus est. Omne quod relictum est facere subcriptio est creare in Yandex.Cloud et imaginem nostram ibi upload (quomodo hoc facere utens tribus lineis in registro.tf lima describitur). Facere repono:

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.

Plures modi sunt signo authenticitatis in continente subcriptio utens signum oauth, iam signum, vel ratio muneris clavis. Plura de his methodis in documentis reperiri possunt. https://cloud.yandex.ru/docs/container-registry/operations/authentication. Utemur ministerio rationis clavem, sic rationem creamus;

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.

Nunc omne reliquum est clavem facere ei;

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

Nos informationes recipimus de repositionis nostrae id, clavem et aperi in:

vozerov@mba:~/events/terraform (master) $ scp key.json ubuntu@84.201.132.3:
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:~$

Ut imaginem in registro inseramus, id opus est registro continente, id ex utilitate yc sumimus;

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

Post hoc, imaginem nostram cum novo nomine et imposuisti;

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

Imaginem onustam feliciter cognoscere possumus:

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

Obiter, si utilitatem in machina Linux instituas, imperio uti potes

yc container registry configure-docker

configurare docker.

conclusio,

Multum laboris fecimus et per consequens;

  1. Architectura futurae servitutis nostrae ad nos accessit.
  2. Applicationem in golang scripsimus quae logicae negotium conficit.
  3. Hanc collegimus et in registro privato effudimus.

In altera parte movebimus ad materias interesting - applicationes nostras in productione dimittemus ac denique onus in eo deducemus. Noli commutare!

Materia haec est in tabulario operis aperti REBRAIN & Yandex.Cloud: 10 petitiones accipimus per secundam in Yandex Cloud - https://youtu.be/cZLezUm0ekE

Si interest in talibus eventibus online interesse et interrogationes in tempore reali quaerere, coniungere ad channel DevOps ab REBRAIN.

Peculiares gratias agere velimus dicere Yandex.Cloud pro opportunitate hospitii talem eventum. Ad eos - https://cloud.yandex.ru/prices

Si opus est movere ad nubem vel habere quaestiones de infrastructura tua, libenter excedere petitionem.

PS 2. Auditores gratis per mensem habemus, fortasse consilium vestrum unum ex illis erit.

Source: www.habr.com

Emptum certos hospites pro locis cum praesidio DDoS, VPS VDS servers 🔥 Eme hospitium interretiale fidum cum praesidio DDoS, servitores VPS VDS | ProHoster