Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π—Π΄Ρ€Π°Π²ΠΎ Π½Π° ситС! Како Π΄Π΅Π» ΠΎΠ΄ ΠΌΠΎΡ˜Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° курсот, Π³ΠΈ истраТував моТноститС Π½Π° Ρ‚Π°ΠΊΠ²Π° домашна ΠΎΠ±Π»Π°ΠΊ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠ°ΠΊΠΎ Yandex.Cloud. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½ΡƒΠ΄ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ услуги Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. Π‘Π΅ΠΏΠ°ΠΊ, понСкогаш Ρ‚Ρ€Π΅Π±Π° Π΄Π° поставитС своја сопствСна Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π·Π° ΠΎΠ±Π»Π°ΠΊ со ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ ΠΎΠ±Π΅ΠΌΠ½Π° инфраструктура Π±Π°Π·ΠΈΡ€Π°Π½Π° Π½Π° ΠΎΠ²ΠΈΠ΅ услуги. Π’ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° сакам Π΄Π° Π³ΠΎ сподСлам ΠΌΠΎΠ΅Ρ‚ΠΎ искуство Π²ΠΎ Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π°ΠΊΠ²Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°.

Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π¨Ρ‚ΠΎ сакатС Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅?

Π“Ρ€Π°Ρ„Π°Π½Π° β€” моќна Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Π½Π° Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡ΠΊΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π·Π° слСдСњС Π½Π° кој Π±ΠΈΠ»ΠΎ систСм. Π’ΠΎ ΡΠ²ΠΎΡ˜Π°Ρ‚Π° основна ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°, ΠΎΠ²Π° Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина со Grafana Π²Π΅Π±-сСрвСр, ΠΊΠ°ΠΊΠΎ ΠΈ Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ (ClickHouse, InfluxDB ΠΈΡ‚Π½.) со Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° која ќС сС Π±Π°Π·ΠΈΡ€Π° Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°.

ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС стартуватС Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина со Π²Π΅Π±-сСрвСр, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ кај Π½Π΅Ρ˜Π·ΠΈΠ½ΠΈΠΎΡ‚ домаќин ΠΈ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ прСкрасСн ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ, Π΄Π° Π½Π°Π²Π΅Π΄Π΅Ρ‚Π΅ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π²ΠΎΡ€ΠΈ Π·Π° ΠΏΠΎΠ½Π°Ρ‚Π°ΠΌΠΎΡˆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°, Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈ Ρ‚Π°Π±Π»ΠΈ ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ½ΠΈ.

Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° ΠΈΠΌΠ° Π΅Π΄Π΅Π½ Π·Π½Π°Ρ‡Π°Π΅Π½ нСдостаток - Π²ΠΎΠΎΠΏΡˆΡ‚ΠΎ Π½Π΅ Π΅ Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ‚Π½Π° Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ. Односно, Ρ†Π΅Π»Π°Ρ‚Π° функционалност Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° зависи ΠΎΠ΄ одрТливоста Π½Π° Π΅Π΄Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина. Ако ΠΎΠ΄Π±ΠΈΠ΅ ΠΈΠ»ΠΈ 10 Π»ΡƒΡ“Π΅ Π³ΠΎ ΠΎΡ‚Π²ΠΎΡ€Π°Ρ‚ корисничкиот ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ Π²ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅, Ρ‚ΠΎΠ³Π°Ρˆ ќС сС ΠΏΠΎΡ˜Π°Π²Π°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

Π’ΠΈΠ΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° сС Ρ€Π΅ΡˆΠ°Ρ‚ Сдноставно: само Ρ‚Ρ€Π΅Π±Π° Π΄Π°... распорСдитС ΠΌΠ½ΠΎΠ³Ρƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΈ машини со Π²Π΅Π±-сСрвСр ΠΈ Π΄Π° Π³ΠΈ ставитС ΠΏΠΎΠ΄ балансСрот L3. Но, Ρ‚ΡƒΠΊΠ° Π½Π΅ Π΅ сè Ρ‚ΠΎΠ»ΠΊΡƒ јасно. Grafana Π³ΠΈ складира корисничкитС поставки (ΠΏΠ°Ρ‚Π΅ΠΊΠΈ Π΄ΠΎ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈ Ρ‚Π°Π±Π»ΠΈ, Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ½ΠΈ ΠΈΡ‚Π½.) Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π½Π° дискот Π½Π° ΡΠ²ΠΎΡ˜Π°Ρ‚Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина. Π’Π°ΠΊΠ°, Π°ΠΊΠΎ смСнимС Π½Π΅ΠΊΠΎΠΈ поставки Π²ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠΎΡ‚, ΠΎΠ²ΠΈΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ќС сС ΠΎΠ΄Ρ€Π°Π·Π°Ρ‚ само Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π°Ρ‚Π° машина ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ Π½ΠΈ испрати балансСрот. Ова ќС Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ нСконзистСнтни поставки Π·Π° Π½Π°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΡƒΠ²Π°Ρ˜ΡœΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅Ρ‚ΠΎ.

ОвдС Π΄Ρ€ΡƒΠ³Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ќС дојдС Π½Π° помош, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, MySQL ΠΈΠ»ΠΈ Π½Π΅Ρ˜Π·ΠΈΠ½ΠΈΠΎΡ‚ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚. На Π“Ρ€Π°Ρ„Π°Π½Π° ΠΈ ΠΊΠ°ΠΆΡƒΠ²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ Π·Π°Ρ‡ΡƒΠ²Π° корисничкитС поставки Π²ΠΎ ΠΎΠ²Π°Π° β€žΡ€Π΅Π·Π΅Ρ€Π²Π½Π°β€œ Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. ПослС Ρ‚ΠΎΠ°, ќС Π±ΠΈΠ΄Π΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Сднаш Π½Π° сСкоја машина Π΄Π° ја ΠΎΠ΄Ρ€Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ°Ρ‚Π΅ΠΊΠ°Ρ‚Π° Π΄ΠΎ ΠΎΠ²Π°Π° Π±Π°Π·Π° ΠΈ Π΄Π° Π³ΠΈ ΡƒΡ€Π΅Π΄ΠΈΡ‚Π΅ ситС Π΄Ρ€ΡƒΠ³ΠΈ кориснички поставки Π½Π° која Π±ΠΈΠ»ΠΎ ΠΎΠ΄ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΈΡ‚Π΅ машини; Ρ‚ΠΈΠ΅ ќС сС ΠΏΡ€ΠΎΡˆΠΈΡ€Π°Ρ‚ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅.

Π•Π²Π΅ Π΄ΠΈΡ˜Π°Π³Ρ€Π°ΠΌ Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Π°Ρ‚Π° инфраструктура Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°:

Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π”Π° Π½Π°ΡƒΡ‡ΠΈΠΌΠ΅ Π΄Π° ΠΊΡ€Π΅Π²Π°ΠΌΠ΅ со Ρ€Π°Ρ†Π΅

MySQL ΠΈ ClickHouse

ΠŸΡ€Π΅Π΄ Π΄Π° сС распорСди Ρ‚Π°ΠΊΠ²Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° со ΠΊΠ»ΠΈΠΊΠ½ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠΏΡ‡Π΅, Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ бСшС Π΄Π° сС Π½Π°ΡƒΡ‡ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° сС Ρ€Π°ΠΊΡƒΠ²Π° со сСкоја нСјзина ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ Π΄Π° сС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π°Ρ‚ Π΅Π΄Π½ΠΈ со Π΄Ρ€ΡƒΠ³ΠΈ.

ОвдС Yandex.Cloud ќС Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅, кој ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° L3 balancers, ClickHouse ΠΈ MySQL ΠΊΠ°ΠΊΠΎ ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°Π½ΠΈ услуги. ΠšΠΎΡ€ΠΈΡΠ½ΠΈΠΊΠΎΡ‚ Ρ‚Ρ€Π΅Π±Π° само Π΄Π° Π³ΠΈ Π½Π°Π²Π΅Π΄Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΈ Π΄Π° ΠΏΠΎΡ‡Π΅ΠΊΠ° Π΄ΠΎΠ΄Π΅ΠΊΠ° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π΅ донСсС сè Π²ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π°.

Π‘Π΅ рСгистрирав, создадов ΠΎΠ±Π»Π°ΠΊ ΠΈ смСтка Π·Π° плаќањС. ПослС Ρ‚ΠΎΠ°, ΠΎΡ‚ΠΈΠ΄ΠΎΠ² Π²ΠΎ ΠΎΠ±Π»Π°ΠΊΠΎΡ‚ ΠΈ Π³ΠΈ поставив кластСритС MySQL ΠΈ ClickHouse со ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ поставки. Π§Π΅ΠΊΠ°Π² Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅ сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π°Ρ‚.

Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ сСкој кластСр ΠΈ Π΄Π° Π³ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ пристапот Π΄ΠΎ Π½Π΅Π³ΠΎ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ најава ΠΈ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°. ОвдС Π½Π΅ΠΌΠ° Π΄Π° Π½Π°Π²Π»Π΅Π³ΡƒΠ²Π°ΠΌ Π²ΠΎ Π΄Π΅Ρ‚Π°Π»ΠΈ - сè Π΅ сосСма ΠΎΡ‡ΠΈΠ³Π»Π΅Π΄Π½ΠΎ Π²ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠΎΡ‚.

НСочиглСдниот Π΄Π΅Ρ‚Π°Π» бСшС Π΄Π΅ΠΊΠ° ΠΎΠ²ΠΈΠ΅ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈΠΌΠ°Π°Ρ‚ ΠΌΠ½ΠΎΠ³Ρƒ хостови, ΠΊΠΎΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°Π°Ρ‚ Π½ΠΈΠ²Π½Π° Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ†ΠΈΡ˜Π° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ. Π‘Π΅ΠΏΠ°ΠΊ, Grafana Π±Π°Ρ€Π° Ρ‚ΠΎΡ‡Π½ΠΎ Π΅Π΄Π΅Π½ хост Π·Π° сСкоја Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ со која Ρ€Π°Π±ΠΎΡ‚ΠΈ. Π”ΠΎΠ»Π³ΠΎ Ρ‡ΠΈΡ‚Π°ΡšΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠžΠ±Π»Π°Ρ†ΠΈΡ‚Π΅ ΠΌΠ΅ Π΄ΠΎΠ²Π΅Π΄ΠΎΠ° Π΄ΠΎ ΠΎΠ΄Π»ΡƒΠΊΠ°. Π˜Π·Π»Π΅Π³ΡƒΠ²Π° Π΄Π΅ΠΊΠ° Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΎΡ‚ Π½Π° Π²ΠΈΠ΄ΠΎΡ‚ c-<cluster_id>.rw.mdb.yandexcloud.net ΠΌΠ°ΠΏΠΈΡ€Π°Π½ΠΎ Π½Π° Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Π³Π»Π°Π²Π΅Π½ домаќин Π½Π° кластСрот со соодвСтниот ID. Π•Π²Π΅ ΡˆΡ‚ΠΎ ќС ΠΈ ΠΏΠΎΠ΄Π°Ρ€ΠΈΠΌΠ΅ Π½Π° Π“Ρ€Π°Ρ„Π°Π½Π°.

Π’Π΅Π± сСрвСр

Π‘Π΅Π³Π° Π΅ Π΄ΠΎ Π²Π΅Π±-сСрвСрот. АјдС Π΄Π° ΠΏΠΎΠ΄ΠΈΠ³Π½Π΅ΠΌΠ΅ ΠΎΠ±ΠΈΡ‡Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина со Linux ΠΈ Ρ€Π°Ρ‡Π½ΠΎ Π΄Π° ја ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ Grafana Π½Π° Π½Π΅Π°.

Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

АјдС Π΄Π° сС ΠΏΠΎΠ²Ρ€Π·Π΅ΠΌΠ΅ ΠΏΡ€Π΅ΠΊΡƒ ssh ΠΈ Π΄Π° Π³ΠΈ инсталирамС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ.

sudo apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise 

ПослС Ρ‚ΠΎΠ°, ајдС Π΄Π° ја ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠ΅ Grafana ΠΏΠΎΠ΄ systemctl ΠΈ Π΄Π° Π³ΠΎ инсталирамС Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊΠΎΡ‚ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со ClickHouse (Π΄Π°, Π½Π΅ Π΅ испорачан Π²ΠΎ основниот ΠΏΠ°ΠΊΠ΅Ρ‚).

sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource

Π’ΠΎΠ° Π΅ Ρ‚ΠΎΠ°, послС Ρ‚ΠΎΠ° со Сдноставна ΠΊΠΎΠΌΠ°Π½Π΄Π°

sudo service grafana-server start

ќС Π³ΠΎ стартувамС Π²Π΅Π±-сСрвСрот. Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја внСсСтС Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ½Π°Ρ‚Π° IP адрСса Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π°Ρ‚Π° машина Π²ΠΎ прСлистувачот, Π΄Π° ја Π½Π°Π²Π΅Π΄Π΅Ρ‚Π΅ ΠΏΠΎΡ€Ρ‚Π°Ρ‚Π° 3000 ΠΈ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅ прСкрасниот Grafana UI.
Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Но, Π½Π΅ Π±Ρ€Π·Π°Ρ˜Ρ‚Π΅, ΠΏΡ€Π΅Π΄ Π΄Π° ја поставитС Grafana, ΠΌΠΎΡ€Π° Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ Π΄Π° ΠΌΡƒ ја ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ ΠΏΠ°Ρ‚Π΅ΠΊΠ°Ρ‚Π° Π΄ΠΎ MySQL Π·Π° Π΄Π° Π³ΠΈ Π·Π°Ρ‡ΡƒΠ²Π°Ρ‚Π΅ поставкитС Ρ‚Π°ΠΌΡƒ.

Π¦Π΅Π»Π°Ρ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π½Π° Π²Π΅Π±-сСрвСрот Grafana Π΅ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° /etc/grafana/grafana.ini. ΠŸΠΎΡ‚Ρ€Π΅Π±Π½Π°Ρ‚Π° линија ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:

;url =

Π“ΠΎ поставивмС Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΎΡ‚ Π²ΠΎ кластСрот MySQL. Π˜ΡΡ‚Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π³ΠΈ содрТи Π½Π°Ρ˜Π°Π²Π°Ρ‚Π° ΠΈ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°Ρ‚Π° Π·Π° пристап Π΄ΠΎ Π“Ρ€Π°Ρ„Π°Π½Π° Π½Π° сликата ΠΏΠΎΠ³ΠΎΡ€Π΅, ΠΊΠΎΠΈ стандардно ΠΈ Π΄Π²Π΅Ρ‚Π΅ сС Π΅Π΄Π½Π°ΠΊΠ²ΠΈ admin.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° користитС sed ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:

sudo sed -i "s#.*;url =.*#url = mysql://${MYSQL_USERNAME}:${MYSQL_PASSWORD}@${MYSQL_CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${GRAFANA_USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${GRAFANA_PASSWORD}#" /etc/grafana/grafana.ini

Π’Ρ€Π΅ΠΌΠ΅ Π΅ Π΄Π° Π³ΠΎ рСстартиратС Π²Π΅Π±-сСрвСрот!

sudo service grafana-server restart

Π‘Π΅Π³Π° Π²ΠΎ Grafana UI ќС Π³ΠΎ ΠΎΠ΄Ρ€Π΅Π΄ΠΈΠΌΠ΅ ClickHouse ΠΊΠ°ΠΊΠΎ DataSource.

УспСав Π΄Π° постигнам Ρ€Π°Π±ΠΎΡ‚Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° со слСднивС поставки:

Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Јас навСдов како URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

Π‘ΠΈΡ‚Π΅! ИмамС Π΅Π΄Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина со Π²Π΅Π±-сСрвСр ΠΏΠΎΠ²Ρ€Π·Π°Π½ Π½Π° CH ΠΈ MySQL. Π’Π΅ΡœΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја поставитС Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ ClickHouse ΠΈ Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈ Ρ‚Π°Π±Π»ΠΈ. Π‘Π΅ΠΏΠ°ΠΊ, сè ΡƒΡˆΡ‚Π΅ Π½Π΅ смС ја постигналС Π½Π°ΡˆΠ°Ρ‚Π° Ρ†Π΅Π» ΠΈ Π½Π΅ смС распорСдилС цСлосна инфраструктура.

ΠŸΠ°ΠΊΡƒΠ²Π°Ρ‡

Yandex.Cloud Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ слика Π½Π° дискот Π½Π° постоСчка Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина, ΠΈ Π²Ρ€Π· основа Π½Π° Ρ‚ΠΎΠ° - кој Π±ΠΈΠ»ΠΎ Π±Ρ€ΠΎΡ˜ Π½Π° машини ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ Π΅Π΄Π½ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ. Ова Π΅ Ρ‚ΠΎΠΊΠΌΡƒ ΠΎΠ½Π° ΡˆΡ‚ΠΎ ќС Π³ΠΎ користимС. Π—Π° ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° сликата, Π·Π΅ΠΌΠ΅Ρ‚Π΅ ја Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° ΠŸΠ°ΠΊΡƒΠ²Π°Ρ‡ ΠΎΠ΄ HashiCorp. Како Π²Π»Π΅Π· Π·Π΅ΠΌΠ° json Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° со инструкции Π·Π° ΡΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° сликата.

ΠΠ°ΡˆΠ°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° json ќС сС состои ΠΎΠ΄ Π΄Π²Π° Π±Π»ΠΎΠΊΠ°: Π³Ρ€Π°Π΄ΠΈΡ‚Π΅Π»ΠΈ ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°Ρ‡ΠΈ. ΠŸΡ€Π²ΠΈΠΎΡ‚ Π±Π»ΠΎΠΊ Π³ΠΈ ΠΎΠΏΠΈΡˆΡƒΠ²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° самата слика ΠΊΠ°ΠΊΠΎ Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚, Π° Π²Ρ‚ΠΎΡ€ΠΈΠΎΡ‚ Π±Π»ΠΎΠΊ ΠΎΠΏΠΈΡˆΡƒΠ²Π° инструкции Π·Π° нСјзино ΠΏΠΎΠΏΠΎΠ»Π½ΡƒΠ²Π°ΡšΠ΅ со ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π°Ρ‚Π° содрТина.

Π“Ρ€Π°Π΄Π΅ΠΆΠ½ΠΈ

{
"builders": [
    {
      "type": "yandex",
      "endpoint": "{{user `endpoint`}}",
      "folder_id": "<folder_id>",
      "subnet_id": "{{user `subnet_id`}}",
      "zone": "{{user `zone`}}",
      "labels": {},
      "use_ipv4_nat": true,
      "use_internal_ip": false,
      "service_account_key_file": "<service_account_key_file>",
      "image_name": "grafana-{{timestamp}}",
      "image_family": "grafana",
      "image_labels": {},
      "image_description": "GRAFANA",
      "source_image_family": "ubuntu-1804-lts",
      "disk_size_gb": 3,
      "disk_type": "network-hdd",
      "ssh_username": "ubuntu"
    }
  ],
...
}

Π’ΠΎ овој шаблон, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ поставитС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΡ‚ Π½Π° Π΄Π΅Π»ΠΎΡ‚ Π²ΠΎ ΠΎΠ±Π»Π°ΠΊΠΎΡ‚ ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ сакатС Π΄Π° ја ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ сликата, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΏΠ°Ρ‚Π΅ΠΊΠ°Ρ‚Π° Π΄ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° со ΠΊΠΎΠΏΡ‡ΠΈΡšΠ°Ρ‚Π° ΠΎΠ΄ смСтката Π½Π° услугата ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ ΠΊΡ€Π΅ΠΈΡ€Π°Π½Π° Π²ΠΎ овој Π΄Π΅Π». ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅ повСќС Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ сСрвисни смСтки ΠΈ ΠΊΠ»ΡƒΡ‡Π΅Π²ΠΈ Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π²ΠΎ соодвСтниот Π΄Π΅Π» Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°.

Оваа ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π²Π΅Π»ΠΈ Π΄Π΅ΠΊΠ° сликата Π½Π° дискот ќС Π±ΠΈΠ΄Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° Π²Ρ€Π· основа Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ubuntu-1804-lts, смСстСн Π²ΠΎ соодвСтниот кориснички Π΄Π΅Π» Π²ΠΎ ΡΠ΅ΠΌΠ΅Ρ˜ΡΡ‚Π²ΠΎΡ‚ΠΎ Π½Π° слики GRAFANA ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Ρ‚ΠΎ grafana-{{timestamp}}.

ΠžΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°Ρ‡ΠΈ

Π‘Π΅Π³Π° Π΄ΠΎΠ°Ρ“Π° поинтСрСсниот Π΄Π΅Π» ΠΎΠ΄ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°. ЌС ја опишС Π½ΠΈΠ·Π°Ρ‚Π° Π΄Π΅Ρ˜ΡΡ‚Π²Π° ΡˆΡ‚ΠΎ ќС Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠ°Ρ‚ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π°Ρ‚Π° машина ΠΏΡ€Π΅Π΄ Π΄Π° сС Π·Π°ΠΌΡ€Π·Π½Π΅ Π½Π΅Ρ˜Π·ΠΈΠ½Π°Ρ‚Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° Π²ΠΎ слика Π½Π° дискот.

{
...,
"provisioners": [
    {
            "type": "shell",
            "pause_before": "5s",
            "scripts": [
                "prepare-ctg.sh"
            ]
        },
    {
            "type": "file",
            "source": "setup.sh",
            "destination": "/opt/grafana/setup.sh"
        },
        {
            "type": "shell",
        "execute_command": "sudo {{ .Vars }} bash '{{ .Path }}'",
            "pause_before": "5s",
            "scripts": [
                "install-packages.sh",
                "grafana-setup.sh",
                "run-setup-at-reboot.sh"
        ]
        }
  ]
}

Π’ΡƒΠΊΠ° ситС Π΄Π΅Ρ˜ΡΡ‚Π²Π° сС ΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ Π²ΠΎ 3 Ρ„Π°Π·ΠΈ. Π’ΠΎ ΠΏΡ€Π²Π°Ρ‚Π° Ρ„Π°Π·Π°, сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° Сдноставна скрипта која создава помошСн Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ.

ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈ-ctg.sh:

#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana

Π’ΠΎ слСдната Ρ„Π°Π·Π°, поставувамС скрипта Π²ΠΎ овој Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ, која ќС Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС стартува вСднаш ΠΏΠΎ ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π°Ρ‚Π° машина. Оваа скрипта ќС Π³ΠΈ стави корисничкитС ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС рСгистрираат Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Grafana ΠΈ ќС Π³ΠΎ рСстартира Π²Π΅Π±-сСрвСрот.

setup.sh:

#!/bin/bash
CLUSTER_ID="<cluster_id>"
USERNAME="<username>"
PASSWORD="<password>"
sudo sed -i "s#.*;url =.*#url = mysql://${USERNAME}:${PASSWORD}@c-${CLUSTER_ID}.rw.mdb.yandexcloud.net#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${PASSWORD}#" /etc/grafana/grafana.ini
sudo service grafana-server restart

ПослС ΠΎΠ²Π°, остануваат ΡƒΡˆΡ‚Π΅ 3 Ρ€Π°Π±ΠΎΡ‚ΠΈ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅:
1) ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ
2) ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°Ρ˜Ρ‚Π΅ ја Grafana ΠΏΠΎΠ΄ systemctl ΠΈ ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΎ ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ ClickHouse
3) ставСтС ја скриптата setup.sh Π²ΠΎ Ρ€Π΅Π΄ΠΎΡ‚ Π·Π° ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅ вСднаш ΠΏΠΎ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π°Ρ‚Π° машина.

install-packages.sh:

#!/bin/bash
sudo systemd-run --property='After=apt-daily.service apt-daily-upgrade.service' --wait /bin/true
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise 

grafana-setup.sh:

#!/bin/bash
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource

run-setup-at-reboot.sh:

#!/bin/bash
chmod +x /opt/grafana/setup.sh
cat > /etc/cron.d/first-boot <<EOF
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
@reboot root /bin/bash /opt/grafana/setup.sh > /var/log/yc-setup.log 2>&1
EOF
chmod +x /etc/cron.d/first-boot;

Π‘Π΅Π³Π° останува само Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ Packer ΠΈ Π΄Π° сС Π΄ΠΎΠ±ΠΈΠ΅ ΠΈΠ·Π»Π΅Π·Π½Π°Ρ‚Π° слика поставСна Π²ΠΎ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΎΡ‚ Π΄Π΅Π». Кога ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠΎ диск Π·Π° подигањС ΠΈ ΠΏΠΎ ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ќС Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ² Π²Π΅Π±-сСрвСр Π“Ρ€Π°Ρ„Π°Π½Π°.

Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€
Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π“Ρ€ΡƒΠΏΠ° Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ балансСр

ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС ΠΈΠΌΠ°ΠΌΠ΅ слика Π½Π° дискот ΡˆΡ‚ΠΎ Π½ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° создадСмС ΠΌΠ½ΠΎΠ³Ρƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ Π²Π΅Π±-сСрвСри Π½Π° Grafana, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° создадСмС Π³Ρ€ΡƒΠΏΠ° Π·Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ†ΠΈ. На ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Yandex.Cloud, овој Ρ‚Π΅Ρ€ΠΌΠΈΠ½ сС однСсува Π½Π° ΡΠΎΡ˜ΡƒΠ·ΠΎΡ‚ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΈ машини ΠΊΠΎΠΈ Π³ΠΈ ΠΈΠΌΠ°Π°Ρ‚ иститС карактСристики. ΠŸΡ€ΠΈ ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π³Ρ€ΡƒΠΏΠ° Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ, сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΡ‚ Π½Π° ситС машини Π²ΠΎ ΠΎΠ²Π°Π° Π³Ρ€ΡƒΠΏΠ°, Π° ΠΏΠΎΡ‚ΠΎΠ° ΠΈ карактСристикитС Π½Π° самата Π³Ρ€ΡƒΠΏΠ° (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΠΎΡ‚ ΠΈ максималниот Π±Ρ€ΠΎΡ˜ Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ машини). Ако Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ‚ Π±Ρ€ΠΎΡ˜ Π½Π΅ Π³ΠΈ исполнува ΠΎΠ²ΠΈΠ΅ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡƒΠΌΠΈ, Ρ‚ΠΎΠ³Π°Ρˆ самата Π³Ρ€ΡƒΠΏΠ° Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ќС Π³ΠΈ отстрани Π½Π΅ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΡ‚Π΅ машини ΠΈΠ»ΠΈ ќС создадС Π½ΠΎΠ²ΠΈ спорСд сопствСната слика.

Како Π΄Π΅Π» ΠΎΠ΄ Π½Π°ΡˆΠ°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π°, ќС создадСмС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Π° Π³Ρ€ΡƒΠΏΠ° Π½Π° Π²Π΅Π±-сСрвСри ΠΊΠΎΠΈ ќС Π±ΠΈΠ΄Π°Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΎΠ΄ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ ΠΊΡ€Π΅ΠΈΡ€Π°Π½Π°Ρ‚Π° слика Π½Π° дискот.

Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Она ΡˆΡ‚ΠΎ Π΅ навистина ΠΈΠ·Π²ΠΎΠ½Ρ€Π΅Π΄Π½ΠΎ Π΅ послСдното ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°. Π¦Π΅Π»Π½Π°Ρ‚Π° Π³Ρ€ΡƒΠΏΠ° Π²ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π° со Load Balancer ќС Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ балансСр L3 Π½Π° Π²Ρ€Π²ΠΎΡ‚ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΈΡ‚Π΅ машини ΠΎΠ΄ ΠΎΠ²Π°Π° Π³Ρ€ΡƒΠΏΠ° со ΠΊΠ»ΠΈΠΊΠ½ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΊΠΎΠΏΡ‡ΠΈΡšΠ°.

Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

ΠŸΡ€ΠΈ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° балансСрот, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π² Π΄Π²Π΅ Π²Π°ΠΆΠ½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ:

  1. Π“ΠΎ Π½Π°Ρ‚Π΅Ρ€Π°Π² балансСрот Π΄Π° Π³ΠΎ ΠΏΡ€ΠΈΡ„Π°Ρ‚ΠΈ корисничкиот ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ Π½Π° ΠΏΠΎΡ€Ρ‚Π°Ρ‚Π° 80 ΠΈ Π΄Π° Π³ΠΎ прСнасочи ΠΊΠΎΠ½ ΠΏΠΎΡ€Ρ‚Π°Ρ‚Π° 3000 ΠΎΠ΄ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΈΡ‚Π΅ машини, Ρ‚ΠΎΠΊΠΌΡƒ Ρ‚Π°ΠΌΡƒ ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ΠΆΠΈΠ²Π΅Π΅ Π“Ρ€Π°Ρ„Π°Π½Π°.
  2. ΠŸΠΎΡΡ‚Π°Π²ΠΈΠ² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° одрТливоста Π½Π° ΠΌΠ°ΡˆΠΈΠ½ΠΈΡ‚Π΅ со Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Π³ΠΈ ΠΏΠΈΠ½Π³ΠΈΡ€Π°Π² Π΄ΠΎ ΠΏΠΎΡ€Ρ‚Π°Ρ‚Π° 3000.

Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Мини Ρ€Π΅Π·ΠΈΠΌΠ΅

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ΅Π²ΠΌΠ΅ Ρ€Π°Ρ‡Π½ΠΎ Π΄Π° ја распорСдимС саканата апликациска инфраструктура ΠΈ сСга ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³Ρƒ Сластична услуга Grafana. Π’Ρ€Π΅Π±Π° само Π΄Π° ја Π·Π½Π°Π΅Ρ‚Π΅ IP адрСсата Π½Π° балансСрот ΠΊΠ°ΠΊΠΎ Π²Π»Π΅Π·Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ домаќин Π½Π° кластСрот ClickHouse Π·Π° Π΄Π° ја Π²Ρ‡ΠΈΡ‚Π°Ρ‚Π΅ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ Π½Π΅Π°.

Π”Π°Π»ΠΈ ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠ±Π΅Π΄Π°? Π”Π°, ΠΏΠΎΠ±Π΅Π΄Π°. Но сСпак Π½Π΅ΡˆΡ‚ΠΎ ΠΌΠ΅ Π·Π±ΡƒΠ½ΡƒΠ²Π°. Π¦Π΅Π»ΠΈΠΎΡ‚ процСс ΠΏΠΎΠ³ΠΎΡ€Π΅ Π±Π°Ρ€Π° ΠΌΠ½ΠΎΠ³Ρƒ Ρ€Π°Ρ‡Π½ΠΈ Ρ‡Π΅ΠΊΠΎΡ€ΠΈ ΠΈ Π²ΠΎΠΎΠΏΡˆΡ‚ΠΎ Π½Π΅ Π΅ скалабилСн; Π±ΠΈ сакал Π΄Π° Π³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΠΌ Π°ΠΊΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ. Ова Π΅ ΠΎΠ½Π° Π½Π° ΡˆΡ‚ΠΎ ќС Π±ΠΈΠ΄Π΅ посвСтСн слСдниот Π΄Π΅Π».

Π’Π΅Ρ€Π°Ρ„ΠΎΡ€ΠΌΠ½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π°

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ќС користимС Π°Π»Π°Ρ‚ΠΊΠ° ΠΎΠ΄ HashiCorp Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π° Terraform. ЌС Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ја распорСдитС Ρ†Π΅Π»Π°Ρ‚Π° апликациска инфраструктура со ΠΊΠ»ΠΈΠΊΠ½ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠΏΡ‡Π΅, Π²Ρ€Π· основа Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ прСнСсСни ΠΎΠ΄ корисникот. АјдС Π΄Π° напишСмС Ρ€Π΅Ρ†Π΅ΠΏΡ‚ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π°Π±ΠΎΡ‚ΠΈ повСќС ΠΏΠ°Ρ‚ΠΈ Π²ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΄Π΅Π»ΠΎΠ²ΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ корисници.

Π¦Π΅Π»Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° со Terraform сС свСдува Π½Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ конфигурациска Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° (*.tf) ΠΈ Π²Ρ€Π· основа Π½Π° Ρ‚ΠΎΠ° создавањС инфраструктура.

ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ

На самиот ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°, ќС Π²ΠΊΠ»ΡƒΡ‡ΠΈΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΊΠΎΠΈ ΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π°Π°Ρ‚ ΠΊΠ°Π΄Π΅ ΠΈ ΠΊΠ°ΠΊΠΎ ќС Π±ΠΈΠ΄Π΅ распорСдСна ΠΈΠ΄Π½Π°Ρ‚Π° инфраструктура.

variable "oauth_token" {
    type = string
    default = "<oauth-token>"
}
variable "cloud_id" {
    type = string
    default = "<cloud-id>"
}
variable "folder_id" {
    type = string
    default = "<folder_id>"
}
variable "service_account_id" {
    type = string
    default = "<service_account_id>"
}
variable "image_id" {
    type = string
    default = "<image_id>"
}
variable "username" {
    type = string
    default = "<username>"
}
variable "password" {
    type = string
    default = "<password>"
}
variable "dbname" {
    type = string
    default = "<dbname>"
}
variable "public_key_path" {
    type = string
    default = "<path to ssh public key>"
}

Π¦Π΅Π»ΠΈΠΎΡ‚ процСс Π½Π° Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ќС сС свСдС Π½Π° создавањС слика Π½Π° дискот ΠΈ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΎΠ²ΠΈΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. Π”ΠΎΠ·Π²ΠΎΠ»Π΅Ρ‚Π΅ ΠΌΠΈ Π΄Π° објаснам Π·Π° ΡˆΡ‚ΠΎ сС ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π½ΠΈ:

oauth_token β€” Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° пристап Π΄ΠΎ ΠΎΠ±Π»Π°ΠΊΠΎΡ‚. МоТС Π΄Π° сС Π΄ΠΎΠ±ΠΈΠ΅ ΠΎΠ΄ Π»ΠΈΠ½ΠΊ.
cloud_id β€” ΠΎΠ±Π»Π°ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠ°Π΄Π΅ ќС ја распорСдимС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°
folder_id β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° ΡΠ΅ΠΊΡ†ΠΈΡ˜Π° ΠΊΠ°Π΄Π΅ ќС ја распорСдимС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°
service_account_id β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° услуТна смСтка Π²ΠΎ соодвСтниот Π΄Π΅Π» ΠΎΠ΄ ΠΎΠ±Π»Π°ΠΊΠΎΡ‚.
image_id β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° сликата Π½Π° дискот Π΄ΠΎΠ±ΠΈΠ΅Π½Π° со помош Π½Π° Packer
корисничко ΠΈΠΌΠ΅ ΠΈ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° β€” корисничко ΠΈΠΌΠ΅ ΠΈ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° Π·Π° пристап Π΄ΠΎ Π±Π°Π·ΠΈΡ‚Π΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ Π΄ΠΎ Π²Π΅Π±-сСрвСрот Grafana
dbname β€” ΠΈΠΌΠ΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ кластСритС CH ΠΈ MySQL
јавСн_ΠΊΠ»ΡƒΡ‡_ΠΏΠ°Ρ‚ β€” ΠΏΠ°Ρ‚Π΅ΠΊΠ° Π΄ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° со Π²Π°ΡˆΠΈΠΎΡ‚ јавСн ssh ΠΊΠ»ΡƒΡ‡, кој ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ користитС Π·Π° Π΄Π° сС ΠΏΠΎΠ²Ρ€Π·Π΅Ρ‚Π΅ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Ρ‚ΠΎ ubuntu Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΈ машини со Π²Π΅Π±-сСрвСри

ΠŸΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€

Π‘Π΅Π³Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€ΠΎΡ‚ Terraform - Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜, Yandex:

provider "yandex" {
  token     = var.oauth_token
  cloud_id  = var.cloud_id
  folder_id = var.folder_id
  zone      = "ru-central1-a"
}

ЌС Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅ Π΄Π΅ΠΊΠ° ΠΎΠ²Π΄Π΅ Π³ΠΈ користимС ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ ΠΏΠΎΠ³ΠΎΡ€Π΅.

ΠœΡ€Π΅ΠΆΠ° ΠΈ кластСри

Π‘Π΅Π³Π° ќС создадСмС ΠΌΡ€Π΅ΠΆΠ° Π²ΠΎ која Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° инфраструктура ќС ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚, Ρ‚Ρ€ΠΈ ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠΈ (ΠΏΠΎ Π΅Π΄Π½Π° Π²ΠΎ сСкој Ρ€Π΅Π³ΠΈΠΎΠ½) ΠΈ ќС Π³ΠΈ ΠΏΠΎΠ΄ΠΈΠ³Π½Π΅ CH ΠΈ MySQL кластСритС.


resource "yandex_vpc_network" "grafana_network" {}

resource "yandex_vpc_subnet" "subnet_a" {
  zone           = "ru-central1-a"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.1.0.0/24"]
}

resource "yandex_vpc_subnet" "subnet_b" {
  zone           = "ru-central1-b"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.2.0.0/24"]
}

resource "yandex_vpc_subnet" "subnet_c" {
  zone           = "ru-central1-c"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.3.0.0/24"]
}

resource "yandex_mdb_clickhouse_cluster" "ch_cluster" {
  name        = "grafana-clickhouse"
  environment = "PRODUCTION"
  network_id  = yandex_vpc_network.grafana_network.id

  clickhouse {
    resources {
      resource_preset_id = "s2.micro"
      disk_type_id       = "network-ssd"
      disk_size          = 16
    }
  }

  zookeeper {
    resources {
      resource_preset_id = "s2.micro"
      disk_type_id       = "network-ssd"
      disk_size          = 10
    }
  }

  database {
    name = var.dbname
  }

  user {
    name     = var.username
    password = var.password
    permission {
      database_name = var.dbname
    }
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }
}

resource "yandex_mdb_mysql_cluster" "mysql_cluster" {
  name        = "grafana_mysql"
  environment = "PRODUCTION"
  network_id  = yandex_vpc_network.grafana_network.id
  version     = "8.0"

  resources {
    resource_preset_id = "s2.micro"
    disk_type_id       = "network-ssd"
    disk_size          = 16
  }

  database {
    name = var.dbname
  }

  user {
    name     = var.username
    password = var.password
    permission {
      database_name = var.dbname
      roles         = ["ALL"]
    }
  }

  host {
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }
  host {
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }
  host {
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }
}

Како ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, сСкој ΠΎΠ΄ Π΄Π²Π°Ρ‚Π° кластСри Π΅ создадСн доста Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ‚Π΅Π½ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ бидСјќи сС Π½Π°ΠΎΡ“Π° Π²ΠΎ Ρ‚Ρ€ΠΈ Π·ΠΎΠ½ΠΈ Π½Π° достапност.

Π’Π΅Π± сСрвСри

Π‘Π΅ Ρ‡ΠΈΠ½Π΅ΡˆΠ΅ Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌΠ΅ Π²ΠΎ истиот Π΄ΡƒΡ…, Π½ΠΎ Π½Π°ΠΈΠ΄ΠΎΠ² Π½Π° Ρ‚Π΅ΡˆΠΊΠΎΡ‚ΠΈΠΈ. ΠŸΡ€Π΅Π΄ ΠΎΠ²Π°, ΠΏΡ€Π²ΠΎ ΠΏΠΎΠ΄ΠΈΠ³Π½Π°Π² MySQL кластСр ΠΈ Π΄ΡƒΡ€ΠΈ ΠΏΠΎΡ‚ΠΎΠ°, знаСјќи Π³ΠΎ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ‚ ID, собрав слика Π½Π° дискот со ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π°Ρ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ Π³ΠΎ Π½Π°Π²Π΅Π΄ΠΎΠ² Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΎΡ‚ Π½Π° кластСрот. Но, сСга Π½Π΅ Π³ΠΎ Π·Π½Π°Π΅ΠΌΠ΅ ID Π½Π° кластСрот ΠΏΡ€Π΅Π΄ Π΄Π° Π³ΠΎ лансирамС Terraform, Π²ΠΊΠ»ΡƒΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ Π½Π° сликата. Π—Π°Ρ‚ΠΎΠ°, ΠΌΠΎΡ€Π°Π² Π΄Π° ΠΏΡ€ΠΈΠ±Π΅Π³Π½Π°ΠΌ ΠΊΠΎΠ½ слСдново Ρ‚Ρ€ΠΈΠΊ.

ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја услугата Π·Π° ΠΌΠ΅Ρ‚Π°ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° Amazon, ќС прСнСсСмС Π½Π΅ΠΊΠΎΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π°Ρ‚Π° машина, ΠΊΠΎΠΈ Ρ‚Π°Π° ќС Π³ΠΈ ΠΏΡ€ΠΈΡ„Π°Ρ‚ΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈ. ΠŸΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π½ΠΈ Π΅ ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅ Π΄ΠΎ ΠΌΠ΅Ρ‚Π°ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π·Π°Π΄ кластСрот MySQL ΠΈ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°Ρ‚Π° Π·Π° корисничко ΠΈΠΌΠ΅, ΡˆΡ‚ΠΎ корисникот Π³ΠΈ Π½Π°Π²Π΅Π΄Π΅ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Terraform, ΠΏΠΎ ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ. АјдС ΠΌΠ°Π»ΠΊΡƒ Π΄Π° ја ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌΠ΅ содрТината Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° setup.sh, кој Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠΎΠ³Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π°Ρ‚Π° машина Π΅ Π²ΠΊΠ»ΡƒΡ‡Π΅Π½Π°.

setup.sh:

#!/bin/bash
CLUSTER_URI="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/mysql_cluster_uri)"
USERNAME="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/username)"
PASSWORD="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/password)"
sudo sed -i "s#.*;url =.*#url = mysql://${USERNAME}:${PASSWORD}@${CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${PASSWORD}#" /etc/grafana/grafana.ini
sudo service grafana-server restart

Π“Ρ€ΡƒΠΏΠ° Π½Π° инстанци ΠΈ балансСр

ΠžΡ‚ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠ²ΠΌΠ΅ Π½ΠΎΠ²Π° слика Π½Π° дискот, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ја Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ Π½Π°ΡˆΠ°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π·Π° Terraform.

АјдС Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° сакамС Π΄Π° користимС постоСчка слика Π½Π° дискот:

data "yandex_compute_image" "grafana_image" {
  image_id = var.image_id
}

Π‘Π΅Π³Π° ајдС Π΄Π° создадСмС Π³Ρ€ΡƒΠΏΠ° Π·Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ:

resource "yandex_compute_instance_group" "grafana_group" {
  name               = "grafana-group"
  folder_id          = var.folder_id
  service_account_id = var.service_account_id
  instance_template {
    platform_id = "standard-v1"
    resources {
      memory = 1
      cores  = 1
    }
    boot_disk {
      mode = "READ_WRITE"
      initialize_params {
        image_id = data.yandex_compute_image.grafana_image.id
        size     = 4
      }
    }
    network_interface {
      network_id = yandex_vpc_network.grafana_network.id
      subnet_ids = [yandex_vpc_subnet.subnet_a.id, yandex_vpc_subnet.subnet_b.id, yandex_vpc_subnet.subnet_c.id]
      nat = "true"
    }
    metadata = {
      mysql_cluster_uri = "c-${yandex_mdb_mysql_cluster.mysql_cluster.id}.rw.mdb.yandexcloud.net:3306/${var.dbname}"
      username = var.username
      password = var.password
      ssh-keys = "ubuntu:${file("${var.public_key_path}")}"
    }
    network_settings {
      type = "STANDARD"
    }
  }

  scale_policy {
    fixed_scale {
      size = 6
    }
  }

  allocation_policy {
    zones = ["ru-central1-a", "ru-central1-b", "ru-central1-c"]
  }

  deploy_policy {
    max_unavailable = 2
    max_creating    = 2
    max_expansion   = 2
    max_deleting    = 2
  }

  load_balancer {
    target_group_name = "grafana-target-group"
  }
}

Π’Ρ€Π΅Π΄ΠΈ Π΄Π° сС ΠΎΠ±Ρ€Π½Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Π³ΠΎ ΠΏΡ€Π΅Ρ„Ρ€Π»ΠΈΠ²ΠΌΠ΅ Π²ΠΎ ΠΌΠ΅Ρ‚Π°ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ cluster_uri, username ΠΈ password. Π’ΠΎΠΊΠΌΡƒ Ρ‚ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π°Ρ‚Π° машина ќС Π³ΠΈ ΠΈΠ·Π²Π°Π΄ΠΈ ΠΏΡ€ΠΈ ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅ ΠΈ ќС Π³ΠΈ стави Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Grafana.

Π’ΠΎΠ° Π΅ Π΄ΠΎ балансСрот.

resource "yandex_lb_network_load_balancer" "grafana_balancer" {
  name = "grafana-balancer"

  listener {
    name = "grafana-listener"
    port = 80
    target_port = 3000
    external_address_spec {
      ip_version = "ipv4"
    }
  }

  attached_target_group {
    target_group_id = yandex_compute_instance_group.grafana_group.load_balancer.0.target_group_id

    healthcheck {
      name = "healthcheck"
      tcp_options {
        port = 3000
      }
    }
  }
}

ΠœΠ°Π»ΠΊΡƒ ΡˆΠ΅ΡœΠ΅Ρ€

ΠžΡΡ‚Π°Π½Π° само ΠΌΠ°Π»ΠΊΡƒ. ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС сС распорСди инфраструктурата, ќС ΠΌΠΎΡ€Π° Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π²ΠΎ Grafana UI ΠΈ Ρ€Π°Ρ‡Π½ΠΎ Π΄Π° Π³ΠΎ Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ CH кластСрот (Ρ‡ΠΈΡ˜ ID сè ΡƒΡˆΡ‚Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Π΄ΠΎΠ±ΠΈΠ΅) ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π²ΠΎΡ€ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. Но, Terraform Π³ΠΎ Π·Π½Π°Π΅ ID Π½Π° кластСрот. Π”Π° ΠΌΡƒ Π΄ΠΎΠ²Π΅Ρ€ΠΈΠΌΠ΅ Π΄Π° ја Π΄ΠΎΠ²Π΅Π΄Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π΄ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°.

АјдС Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ Π½ΠΎΠ² ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€ - Π“Ρ€Π°Ρ„Π°Π½Π° ΠΈ Π΄Π° ΠΈ ја Π΄Π°Π΄Π΅ΠΌΠ΅ IP адрСсата Π½Π° балансСрот ΠΊΠ°ΠΊΠΎ домаќин. Π‘ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΡˆΡ‚ΠΎ Π³ΠΈ ΠΏΡ€Π°Π²ΠΈ Terraform Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ја ΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π° Π½Π΅Ρ˜Π·ΠΈΠ½ΠΈΠΎΡ‚ балансСр ќС растат Π²ΠΎ MySQL, Π° со Ρ‚ΠΎΠ° ΠΈ Π½Π° ситС Π΄Ρ€ΡƒΠ³ΠΈ машини.

provider "grafana" {
  url  = "http://${[for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0}"
  auth = "${var.username}:${var.password}"
}

resource "grafana_data_source" "ch_data_source" {
  type          = "vertamedia-clickhouse-datasource"
  name          = "grafana"
  url           = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
  basic_auth_enabled = "true"
  basic_auth_username = var.username
  basic_auth_password = var.password
  is_default = "true"
  access_mode = "proxy"
}

АјдС Π΄Π° ја ΠΈΡΡ‡Π΅ΡˆΠ»Π°ΠΌΠ΅ косата

АјдС Π΄Π° ја ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ΅ΠΌΠ΅ IP адрСсата Π½Π° балансСрот ΠΈ Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΎΡ‚ Π½Π° кластСрот ClickHouse

output "grafana_balancer_ip_address" {
  value = [for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0
}

output "clickhouse_cluster_host" {
  value = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
}

МоТС Π΄Π° Ρ‚Ρ€Ρ‡Π°

Π‘ΠΈΡ‚Π΅! ΠΠ°ΡˆΠ°Ρ‚Π° конфигурациска Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½Π° ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠ΅, со ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅, Π΄Π° ΠΌΡƒ ΠΊΠ°ΠΆΠ΅ΠΌΠ΅ Π½Π° Terraform Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄ΠΈΠ³Π½Π΅ сСто ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π³ΠΎ опишавмС ΠΏΠΎΠ³ΠΎΡ€Π΅. Π¦Π΅Π»ΠΈΠΎΡ‚ процСс ΠΌΠΈ Ρ‚Ρ€Π°Π΅ΡˆΠ΅ ΠΎΠΊΠΎΠ»Ρƒ 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ.
На ΠΊΡ€Π°Ρ˜ΠΎΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΡƒΠ±Π°Π²Π° ΠΏΠΎΡ€Π°ΠΊΠ°:

Apply complete! Resources: 9 added, 0 changed, 0 destroyed.
Outputs:

clickhouse_cluster_host = https://c-c9q14ipa2ngadqsbp2iq.rw.mdb.yandexcloud.net:8443
grafana_balancer_ip_address = 130.193.50.25

И Π²ΠΎ ΠΎΠ±Π»Π°ΠΊΠΎΡ‚ ќС Π±ΠΈΠ΄Π°Ρ‚ Π²ΠΈΠ΄Π»ΠΈΠ²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° ΠΏΠΎΠ΄ΠΈΠ³Π½Π°Ρ‚Π° инфраструктура:

Π Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° дистрибуирани услуги Π²ΠΎ Yandex.Cloud ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π‘ΡƒΠΌΠΈΡ€Π°

Π‘Π΅Π³Π°, ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја Grafana ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сСкој ΠΎΠ΄ вас ΠΌΠΎΠΆΠ΅ Π΄Π° распорСди Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ со ΡˆΠΈΡ€ΠΎΠΊΠ° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π½Π° ΠΎΠ±Π»Π°ΠΊ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Yandex.Cloud. ΠšΠΎΡ€ΠΈΡΠ½ΠΈΡ‚Π΅ Π°Π»Π°Ρ‚ΠΊΠΈ ΠΎΠ΄ HashiCorp ΠΊΠ°ΠΊΠΎ Packer ΠΈ Terraform ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ Π²ΠΎ ΠΎΠ²Π°. Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌ Π΄Π΅ΠΊΠ° нСкој ќС ја најдС ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° корисна :)

П.Π‘. ΠŸΠΎΠ΄ΠΎΠ»Ρƒ ќС ΠΏΡ€ΠΈΠΊΠ°Ρ‡Π°ΠΌ врска Π΄ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ Π·Π° Packer ΠΈ Terraform, Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΠ΄ ΠΊΠΎΠΈ Π΄Π°Π΄ΠΎΠ² Π²ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°.

ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€