Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

Tere kĂ”igile! Kursusetöö raames uurisin sellise kodumaise pilveplatvormi vĂ”imalusi nagu Yandex.Cloud. Platvorm pakub erinevaid teenuseid praktiliste probleemide lahendamiseks. MĂ”nikord tuleb aga nendel teenustel pĂ”hineva ĂŒsna ulatusliku infrastruktuuriga ĂŒles seada oma pilverakendus. Selles artiklis tahan jagada oma kogemusi sellise rakenduse juurutamisel.

Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

Mida soovite saada?

grafana — vĂ”imas tööriist analĂŒĂŒtiliste probleemide lahendamiseks vĂ”i mis tahes sĂŒsteemide probleemide jĂ€lgimiseks. PĂ”hikonfiguratsioonis on see virtuaalne masin Grafana veebiserveriga, samuti andmebaas (ClickHouse, InfluxDB jne) koos andmekogumiga, millel pĂ”hinevad analĂŒĂŒsid.

PÀrast veebiserveriga virtuaalmasina kÀivitamist saate minna selle hosti ja hankida ilus kasutajaliides, mÀÀrata edasiseks tööks allikateks andmebaasid, luua armatuurlaudu ja graafikuid.

Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

PĂ”hiversioonil on ĂŒks mĂ€rkimisvÀÀrne puudus – see ei ole ĂŒldse tĂ”rkekindel. See tĂ€hendab, et kogu rakenduse funktsionaalsus sĂ”ltub ĂŒhe virtuaalmasina elujĂ”ulisusest. Kui see keeldub vĂ”i 10 inimest avavad kasutajaliidese korraga, siis tekivad probleemid.

Neid saab lahendada lihtsalt: peate lihtsalt... juurutama veebiserveriga palju identseid virtuaalmasinaid ja asetama need L3 tasakaalustaja alla. Kuid siin pole kÔik nii selge. Grafana salvestab kasutaja seadistused (teed andmebaasidesse, armatuurlauad, graafikud jne) otse oma virtuaalmasina kettale. Seega, kui muudame kasutajaliideses mÔnda seadet, kajastuvad need muudatused ainult selles virtuaalmasinas, kuhu tasakaalustaja meid saatis. See toob kaasa meie rakenduse seaded vastuolus, pÔhjustades probleeme kÀivitamise ja kasutamisega.

Siin tuleb appi teine ​​andmebaas, nĂ€iteks MySQL vĂ”i selle ekvivalent. Me ĂŒtleme Grafanale, et ta peaks salvestama kasutaja seaded sellesse "varu" andmebaasi. SeejĂ€rel piisab, kui mÀÀrata igas masinas ĂŒks kord selle andmebaasi tee ja redigeerida kĂ”iki muid kasutajasĂ€tteid mis tahes virtuaalmasinas; need laienevad ka teistele.

Siin on lÔpliku rakenduse infrastruktuuri diagramm:

Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

Õpime kĂ€tega tĂ”stma

MySQL ja ClickHouse

Enne sellise rakenduse ĂŒhe nupuvajutusega juurutamist oli vaja Ă”ppida, kuidas iga selle komponenti kĂ€sitleda ja neid omavahel integreerida.

Siin aitab meid Yandex.Cloud, mis pakub hallatavate teenustena L3 tasakaalustajaid, ClickHouse'i ja MySQL-i. Kasutajal tuleb vaid tÀpsustada parameetrid ja oodata, kuni platvorm kÔik töökorda viib.

Registreerisin, tegin pilve ja maksekonto. PÀrast seda lÀksin pilve ja seadistasin MySQL ja ClickHouse klastrid minimaalsete sÀtetega. Ootasin, kuni nad aktiveeruvad.

Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena GrafanatHajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

Samuti peate meeles pidama, et igas klastris tuleb luua andmebaas ja konfigureerida sellele juurdepÀÀs sisselogimise ja parooli abil. Ma ei lasku siin ĂŒksikasjadesse - liideses on kĂ”ik ĂŒsna ilmne.

Mitteilmne detail oli see, et neil andmebaasidel on palju hoste, mis tagavad nende veataluvuse. Grafana nĂ”uab aga tĂ€pselt ĂŒhte hosti iga andmebaasi jaoks, millega ta töötab. Pikk lugemine dokumentatsioon Pilved viisid mind otsusele. Selgub, et liigi peremees c-<cluster_id>.rw.mdb.yandexcloud.net vastendatud vastava ID-ga klastri praeguse aktiivse peamise hostiga. Selle me anname Grafanale.

veebiserver

NĂŒĂŒd on aeg veebiserveri jaoks. Seadistame tavalise virtuaalmasina, millel on Linux ja me seame Grafana sellele oma kĂ€tega ĂŒles.

Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

Ühendame ssh kaudu ja installime vajalikud paketid.

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 

PÀrast seda kÀivitame Grafana systemctl all ja installime ClickHouse'iga töötamiseks mÔeldud plugina (jah, seda pole pÔhipaketis kaasas).

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

See on kÔik, pÀrast seda lihtsa kÀsuga

sudo service grafana-server start

kĂ€ivitame veebiserveri. NĂŒĂŒd saate brauserisse sisestada virtuaalmasina vĂ€lise IP-aadressi, mÀÀrata pordi 3000 ja nĂ€ha kaunist Grafana kasutajaliidest.
Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

Kuid Ă€rge kiirustage, enne Grafana seadistamist peate meeles pidama, et ĂŒtlete talle MySQL-i tee, et sĂ€tteid sinna salvestada.

Grafana veebiserveri kogu konfiguratsioon on failis /etc/grafana/grafana.ini. NÔutav rida nÀeb vÀlja selline:

;url =

Seadsime hostiks MySQL-i klastri. Sama fail sisaldab ĂŒlaloleval pildil Grafanale juurdepÀÀsuks vajalikku sisselogimist ja parooli, mis vaikimisi on mĂ”lemad vĂ”rdsed admin.

Saate kasutada sed-kÀske:

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

On aeg veebiserver taaskÀivitada!

sudo service grafana-server restart

NĂŒĂŒd mÀÀrame Grafana kasutajaliideses andmeallikaks ClickHouse.

Suutsin saavutada toimiva konfiguratsiooni jÀrgmiste seadistustega:

Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

MÀÀrasin URL-iks https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

KĂ”ik! Meil on ĂŒks töötav virtuaalmasin, mille veebiserver on ĂŒhendatud CH ja MySQL-iga. Saate juba andmestiku ClickHouse'i ĂŒles laadida ja armatuurlaudu luua. Kuid me pole veel oma eesmĂ€rki saavutanud ega ole kasutusele vĂ”tnud tĂ€isvÀÀrtuslikku infrastruktuuri.

Pakkija

Yandex.Cloud vĂ”imaldab teil luua olemasoleva virtuaalmasina kettapildi ja selle pĂ”hjal - mis tahes arvu ĂŒksteisega identseid masinaid. See on tĂ€pselt see, mida me kasutame. Pildi mugavaks kokkupanemiseks vĂ”tke tööriist Pakkija firmalt HashiCorp. See vĂ”tab sisendiks json-faili koos juhistega pildi kokkupanekuks.

Meie json-fail koosneb kahest plokist: koostajad ja pakkujad. Esimene plokk kirjeldab pildi enda kui olemi parameetreid ja teine ​​plokk kirjeldab juhiseid selle tĂ€itmiseks vajaliku sisuga.

Builders

{
"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"
    }
  ],
...
}

Selles mallis peate mÀÀrama pilves oleva jaotise identifikaatori, kuhu soovite pilti luua, samuti faili tee selles jaotises varem loodud teenusekonto vÔtmetega. Lisateavet teenusekontode ja vÔtmete loomise kohta faili kujul saate lugeda vastavast jaotisest dokumentatsioon.

See konfiguratsioon ĂŒtleb, et ketta kujutis ehitatakse platvormi alusel ubuntu-1804-lts, mis on paigutatud pildiperekonna vastavasse kasutajate sektsiooni GRAFANA nime all grafana-{{timestamp}}.

Varustajad

NĂŒĂŒd tuleb konfiguratsiooni huvitavam osa. See kirjeldab toimingute jada, mis tuleb virtuaalmasinas enne selle oleku kettakujutiseks kĂŒlmutamist teha.

{
...,
"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"
        ]
        }
  ]
}

Siin on kÔik toimingud jagatud 3 etappi. Esimeses etapis kÀivitatakse lihtne skript, mis loob abikataloogi.

ready-ctg.sh:

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

JÀrgmises etapis asetame sellesse kataloogi skripti, mis tuleb kohe pÀrast virtuaalmasina kÀivitamist kÀivitada. See skript paneb Grafana konfiguratsioonis registreeritavad kasutajamuutujad ja taaskÀivitab veebiserveri.

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

PÀrast seda on jÀÀnud teha 3 asja:
1) installige paketid
2) kÀivitage Grafana systemctl all ja installige plugin ClickHouse
3) pane setup.sh skript kohe peale virtuaalmasina sisselĂŒlitamist kĂ€ivitusjĂ€rjekorda.

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;

NĂŒĂŒd jÀÀb ĂŒle vaid kĂ€ivitada Packer ja panna vĂ€ljundpilt mÀÀratud jaotisesse. Virtuaalse masina loomisel saate selle valida alglaadimiskettaks ja peale kĂ€ivitamist saate valmis Grafana veebiserveri.

Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat
Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

Instantside rĂŒhm ja tasakaalustaja

Kui meil on ketta kujutis, mis vĂ”imaldab meil luua palju identseid Grafana veebiservereid, saame luua eksemplarirĂŒhma. Platvormil Yandex.Cloud tĂ€histab see termin samade omadustega virtuaalmasinate liitu. EksemplarirĂŒhma loomisel konfigureeritakse kĂ”igi selles rĂŒhmas olevate masinate prototĂŒĂŒp ja seejĂ€rel rĂŒhma enda omadused (nĂ€iteks aktiivsete masinate minimaalne ja maksimaalne arv). Kui praegune number nendele kriteeriumidele ei vasta, eemaldab eksemplarirĂŒhm ise mittevajalikud masinad vĂ”i loob uued oma pildi jĂ€rgi.

Oma ĂŒlesande raames loome veebiserverite eksemplarirĂŒhma, mis genereeritakse eelnevalt loodud kettapildist.

Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

TĂ”eliselt tĂ€helepanuvÀÀrne on viimase eksemplari rĂŒhma seadistamine. Load Balanceriga integreeritud sihtrĂŒhm aitab teil paari nupuga klĂ”psates seadistada L3 tasakaalustaja selle rĂŒhma virtuaalmasinate peale.

Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

Tasakaalustaja seadistamisel rakendasin kahte olulist punkti:

  1. Panin tasakaalustaja aktsepteerima kasutajaliiklust pordis 80 ja suunama selle virtuaalmasinate porti 3000, tÀpselt seal, kus Grafana elab.
  2. Seadistasin masinate elujÔulisuse kontrollimise, pingitades need porti 3000.

Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

Mini kokkuvÔte

LĂ”puks saime soovitud rakenduste infrastruktuuri kĂ€sitsi juurutada ja nĂŒĂŒd on meil vĂ€ga vastupidav Grafana teenus. Andmestiku sellesse laadimiseks peate teadma ainult tasakaalustaja IP-aadressi kui rakenduse sisenemispunkti ja ClickHouse klastri hosti.

Kas see tundub vĂ”iduna? Jah, vĂ”it. Aga miski ajab mind ikkagi segadusse. Kogu ĂŒlaltoodud protsess nĂ”uab palju kĂ€sitsi samme ja pole ĂŒldse skaleeritav; sooviksin seda vĂ”imaluse korral automatiseerida. Sellele on pĂŒhendatud jĂ€rgmine osa.

Terraformi integreerimine

Kasutame taas HashiCorpi tööriista nimega Terraform. See aitab teil ĂŒhe nupuvajutusega juurutada kogu rakenduse infrastruktuuri, mis pĂ”hineb mitmel kasutaja edastatud muutujal. Kirjutame retsepti, mida saab erinevate kasutajate erinevates osades mitu korda kĂ€ivitada.

Kogu töö Terraformiga taandub konfiguratsioonifaili kirjutamisele (*.tf) ja sellel pÔhineva infrastruktuuri loomine.

Muutujad

Faili alguses lisame muutujad, mis mÀÀravad, kus ja kuidas tulevane infrastruktuur juurutatakse.

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>"
}

Kogu rakenduse juurutamisprotsess taandub kettapildi loomisele ja nende muutujate seadistamisele. Lubage mul selgitada, mille eest nad vastutavad:

oauth_token — ĆŸetoon pilvele juurdepÀÀsuks. Saab kĂ€tte link.
cloud_id — pilveidentifikaator, kuhu rakenduse juurutame
kausta_id — jaotise identifikaator, kuhu rakenduse juurutame
teenuse_konto_id — teenusekonto identifikaator pilve vastavas jaotises.
pildi_id — Packeri abil saadud ketta kujutise identifikaator
kasutajanimi Đž parool — kasutajanimi ja parool juurdepÀÀsuks nii andmebaasidele kui ka Grafana veebiserverile
dbname — andmebaasi nimi CH ja MySQL klastrites
avalik_vĂ”tme_tee — tee failini oma avaliku ssh-vĂ”tmega, mida saate kasutada nime all ĂŒhenduse loomiseks ubuntu veebiserveritega virtuaalmasinatele

Pakkuja seadistamine

NĂŒĂŒd peate konfigureerima Terraformi pakkuja - meie puhul Yandex:

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

MĂ€rkate, et siin kasutame ĂŒlalpool mÀÀratletud muutujaid.

VÔrgustik ja klastrid

NĂŒĂŒd loome vĂ”rgu, milles meie infrastruktuuri elemendid suhtlevad, kolm alamvĂ”rku (ĂŒks igas piirkonnas) ja tĂ”stame CH ja MySQL klastreid.


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

Nagu nĂ€ete, on kĂ”ik kaks klastrit loodud ĂŒsna tĂ”rketaluvusega, kuna need asuvad kolmes saadavustsoonis.

Veebiserverid

NĂ€ib, et vĂ”iksime samas vaimus jĂ€tkata, aga sattusin raskustesse. Enne seda tĂ”stsin kĂ”igepealt ĂŒles MySQL klastri ja alles pĂ€rast seda, teades selle ID-d, kogusin vajaliku konfiguratsiooniga kettapildi, kus mÀÀrasin klastrile hosti. Kuid nĂŒĂŒd ei tea me klastri ID-d enne Terraformi kĂ€ivitamist, sealhulgas pildi loomise ajal. SeetĂ”ttu pidin kasutama jĂ€rgmist trikk.

Amazoni metaandmete teenust kasutades edastame mĂ”ned parameetrid virtuaalmasinale, mille see vastu vĂ”tab ja töötleb. Vajame, et masin lĂ€heks pĂ€rast kĂ€ivitamist MySQL-i klastri hosti ja kasutajanime-parooli taga olevate metaandmete juurde, mille kasutaja mÀÀras Terraformi failis. Muudame veidi faili sisu setup.sh, mis töötab siis, kui virtuaalmasin on sisse lĂŒlitatud.

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

Intance grupp ja tasakaalustaja

PĂ€rast uue kettapildi ĂŒmberehitamist saame lĂ”puks lisada oma faili Terraformi jaoks.

NĂ€itame, et tahame kasutada olemasolevat kettapilti:

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

NĂŒĂŒd loome eksemplarirĂŒhma:

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"
  }
}

Tasub pöörata tÀhelepanu sellele, kuidas me selle metaandmetesse edastasime cluster_uri, username О password. Just need vÔtab virtuaalmasin kÀivitamisel vÀlja ja sisestab Grafana konfiguratsiooni.

See on tasakaalustaja otsustada.

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

Natuke suhkrut

Ainult natuke on jÀÀnud. PÀrast infrastruktuuri juurutamist peate minema Grafana kasutajaliidese ja lisama kÀsitsi andmeallikana CH-klastri (mille ID tuleb veel hankida). Kuid Terraform teab klastri ID-d. Usaldagem temale asja ellu viimine.

Lisame uue pakkuja – Grafana ja anname talle hostina tasakaalustaja IP-aadressi. KĂ”ik muudatused, mida Terraform teeb masinas, mille tasakaalustaja mÀÀrab, kasvavad MySQL-is ja seega ka kĂ”igis teistes masinates.

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"
}

Kammime juukseid

Kuvame tasakaalustaja IP-aadressi ja ClickHouse'i klastri hosti

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"
}

Saab joosta

KĂ”ik! Meie konfiguratsioonifail on valmis ja muutujate mÀÀramisega saame öelda, et Terraform tĂ”staks kĂ”ik ĂŒlalkirjeldatud. Kogu protsess vĂ”ttis mul umbes 15 minutit.
LÔpus nÀete ilusat sÔnumit:

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

Ja pilves on nÀhtavad tÔstetud infrastruktuuri elemendid:

Hajutatud teenuste juurutamine Yandex.Cloudis, kasutades nÀitena Grafanat

KokkuvÔtteks

Grafana nĂ€itel saab igaĂŒks teist juurutada laialivalguva pilvarhitektuuriga rakendusi platvormil Yandex.Cloud. HashiCorpi kasulikud tööriistad, nagu Packer ja Terraform, vĂ”ivad teid selles aidata. Loodan, et kellelegi on see artikkel kasulik :)

PS Allpool lisan lingi hoidlale, kust leiate Packeri ja Terraformi valmisretseptid, mille fragmente ma selles artiklis esitasin.

hoidla

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster