Herkese selam! Ders çalışmam kapsamında yerli bir bulut platformunun yeteneklerini araştırdım.
Ne almak istiyorsun?
Bir web sunucusuyla sanal makineyi başlattıktan sonra, ana bilgisayarına gidebilir ve güzel bir kullanıcı arayüzü alabilir, daha fazla çalışma için veritabanlarını kaynak olarak belirleyebilir, kontrol panelleri ve grafikler oluşturabilirsiniz.
Temel versiyonun önemli bir dezavantajı var; hataya hiç dayanıklı değil. Yani uygulamanın tüm işlevselliği tek bir sanal makinenin yaşayabilirliğine bağlıdır. Reddederse veya kullanıcı arayüzünü aynı anda 10 kişi açarsa sorunlar ortaya çıkacaktır.
Bunlar basit bir şekilde çözülebilir: sadece birçok özdeş sanal makineyi bir web sunucusuyla dağıtmanız ve bunları bir L3 dengeleyicinin altına yerleştirmeniz yeterlidir. Ancak burada her şey o kadar net değil. Grafana, kullanıcı ayarlarını (veritabanlarına giden yollar, kontrol panelleri, grafikler vb.) doğrudan sanal makinesinin diskinde saklar. Dolayısıyla kullanıcı arayüzünde bazı ayarları değiştirdiğimizde bu değişiklikler yalnızca dengeleyicinin bize gönderdiği sanal makineye yansıyacaktır. Bu, uygulamamız için tutarsız ayarlara yol açarak başlatma ve kullanımda sorunlara yol açacaktır.
Burada başka bir veritabanı kurtarmaya gelecek, örneğin MySQL veya eşdeğeri. Grafana'ya kullanıcı ayarlarını bu "yedek" veritabanında saklaması gerektiğini söylüyoruz. Daha sonra her makinede bir kez bu veritabanına giden yolu belirtmeniz ve herhangi bir sanal makinedeki diğer tüm kullanıcı ayarlarını düzenlemeniz yeterli olacaktır; diğerlerine de yayılacaktır.
İşte nihai uygulama altyapısının bir diyagramı:
Ellerimizle kaldırmayı öğrenelim
MySQL ve ClickHouse
Böyle bir uygulamayı tek tuşla devreye almadan önce, her bir bileşeninin nasıl yönetileceğini ve birbirleriyle nasıl entegre edileceğini öğrenmek gerekiyordu.
Burada L3 dengeleyicileri, ClickHouse ve MySQL'i yönetilen hizmetler olarak sağlayan Yandex.Cloud bize yardımcı olacaktır. Kullanıcının yalnızca parametreleri belirtmesi ve platform her şeyi çalışır duruma getirene kadar beklemesi gerekir.
Kayıt oldum, bir bulut ve ödeme hesabı oluşturdum. Sonrasında buluta geçerek MySQL ve ClickHouse kümelerini minimal ayarlarla kurdum. Aktif hale gelene kadar bekledim.
Ayrıca her kümede bir veritabanı oluşturmayı ve bir kullanıcı adı ve parola kullanarak bu veritabanına erişimi yapılandırmayı da hatırlamanız gerekir. Burada ayrıntılara girmeyeceğim - arayüzde her şey oldukça açık.
Açıkça görülmeyen ayrıntı, bu veritabanlarının hata toleransını sağlayan çok sayıda ana bilgisayara sahip olmasıydı. Ancak Grafana, birlikte çalıştığı her veritabanı için tam olarak bir ana bilgisayar gerektirir. Uzun okuma c-<cluster_id>.rw.mdb.yandexcloud.net
karşılık gelen kimlikle kümenin geçerli etkin ana ana bilgisayarına eşlenir. Grafana'ya bunu vereceğiz.
Web sunucusu
Artık iş web sunucusuna kalmış. Linux ile normal bir sanal makine oluşturalım ve Grafana'yı manuel olarak yapılandıralım.
Ssh üzerinden bağlanıp gerekli paketleri kuralım.
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
Bundan sonra, Grafana'yı systemctl altında çalıştıralım ve ClickHouse ile çalışmak için eklentiyi yükleyelim (evet, temel pakette bulunmuyor).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource
İşte bu kadar, bundan sonra basit bir komutla
sudo service grafana-server start
web sunucusunu başlatacağız. Artık sanal makinenin harici IP adresini tarayıcıya girebilir, bağlantı noktası 3000'i belirleyebilir ve güzel Grafana kullanıcı arayüzünü görebilirsiniz.
Ancak acele etmeyin, Grafana'yı kurmadan önce, ayarları orada saklamak için ona MySQL'in yolunu söylemeyi unutmamalısınız.
Grafana web sunucusunun tüm konfigürasyonu dosyadadır /etc/grafana/grafana.ini
. Gerekli satır şöyle görünür:
;url =
Host'u MySQL kümesine ayarladık. Aynı dosya, yukarıdaki resimde Grafana'ya erişim için gerekli kullanıcı adını ve şifreyi içerir; varsayılan olarak her ikisi de eşittir admin
.
Sed komutlarını kullanabilirsiniz:
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
Web sunucusunu yeniden başlatmanın zamanı geldi!
sudo service grafana-server restart
Şimdi Grafana kullanıcı arayüzünde ClickHouse'u DataSource olarak belirleyeceğiz.
Aşağıdaki ayarlarla çalışan bir konfigürasyon elde edebildim:
URL olarak belirttim https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
Tüm! CH ve MySQL'e bağlı bir web sunucusuna sahip çalışan bir sanal makinemiz var. Veri kümesini zaten ClickHouse'a yükleyebilir ve kontrol panelleri oluşturabilirsiniz. Ancak henüz hedefimize ulaşamadık ve tam teşekküllü bir altyapıyı devreye alamadık.
Paketleme
Yandex.Cloud, mevcut bir sanal makinenin ve buna dayalı olarak birbiriyle aynı sayıda makinenin disk görüntüsünü oluşturmanıza olanak tanır. Bu tam olarak kullanacağımız şey. Görüntüyü rahatça birleştirmek için aracı alın
Json dosyamız iki bloktan oluşacaktır: builders ve provizyonerlar. İlk blok, görüntünün kendisinin parametrelerini bir varlık olarak tanımlar ve ikinci blok, onu gerekli içerikle doldurma talimatlarını açıklar.
İnşaatçılar
{
"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"
}
],
...
}
Bu şablonda, görüntüyü oluşturmak istediğiniz buluttaki bölümün tanımlayıcısını ve bu bölümde daha önce oluşturulan hizmet hesabındaki anahtarlarla dosyanın yolunu ayarlamanız gerekir. İlgili bölümde hizmet hesapları ve anahtarları dosya biçiminde oluşturma hakkında daha fazla bilgi edinebilirsiniz.
Bu yapılandırma, disk görüntüsünün platforma göre oluşturulacağını söylüyor ubuntu-1804-lts
, resim ailesindeki uygun kullanıcı bölümüne yerleştirilir GRAFANA
adı altında grafana-{{timestamp}}
.
Hazırlayıcılar
Şimdi konfigürasyonun daha ilginç kısmı geliyor. Durumu bir disk görüntüsüne dondurmadan önce sanal makinenin üzerinde gerçekleştirilmesi gereken eylemlerin sırasını açıklayacaktır.
{
...,
"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"
]
}
]
}
Burada tüm eylemler 3 aşamaya ayrılmıştır. İlk aşamada, yardımcı bir dizin oluşturan basit bir komut dosyası yürütülür.
hazır-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana
Bir sonraki aşamada, bu dizine sanal makineyi başlattıktan hemen sonra başlatılması gereken bir komut dosyası yerleştiriyoruz. Bu komut dosyası, Grafana yapılandırmasına kaydedilmesi gereken kullanıcı değişkenlerini yerleştirecek ve web sunucusunu yeniden başlatacaktır.
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
Bundan sonra yapılacak 3 şey kalıyor:
1) paketleri yükleyin
2) Grafana'yı systemctl altında çalıştırın ve ClickHouse eklentisini yükleyin
3) sanal makineyi açtıktan hemen sonra setup.sh betiğini başlatma kuyruğuna koyun.
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;
Artık geriye kalan tek şey Packer'ı çalıştırmak ve çıktı görüntüsünü belirtilen bölüme yerleştirmektir. Bir sanal makine oluştururken, onu önyükleme diski olarak seçebilirsiniz ve başlattıktan sonra hazır bir Grafana web sunucusu alacaksınız.
Örnek grubu ve dengeleyici
Birçok özdeş Grafana web sunucusu oluşturmamıza olanak tanıyan bir disk imajına sahip olduğumuzda, bir örnek grubu oluşturabiliriz. Yandex.Cloud platformunda bu terim aynı özelliklere sahip sanal makinelerin birleşimini ifade eder. Bir örnek grubu oluştururken, bu gruptaki tüm makinelerin prototipi yapılandırılır ve ardından grubun kendi özellikleri (örneğin, minimum ve maksimum etkin makine sayısı) yapılandırılır. Mevcut sayı bu kriterleri karşılamıyorsa örnek grubunun kendisi gereksiz makineleri kaldıracak veya kendi görüntüsünde yenilerini oluşturacaktır.
Görevimizin bir parçası olarak, önceden oluşturulan disk görüntüsünden oluşturulacak web sunucularından oluşan bir örnek grup oluşturacağız.
Gerçekten dikkat çekici olan, son örnek grubu kurulumudur. Load Balancer ile entegre olan hedef grup, birkaç butona tıklayarak bu gruptaki sanal makinelerin üzerinde bir L3 dengeleyici yapılandırmanıza yardımcı olacaktır.
Dengeleyiciyi kurarken iki önemli noktayı uyguladım:
- Dengeleyicinin 80 numaralı bağlantı noktasındaki kullanıcı trafiğini kabul etmesini ve bunu sanal makinelerin tam olarak Grafana'nın yaşadığı 3000 numaralı bağlantı noktasına yönlendirmesini sağladım.
- Makinelerin kullanılabilirliğini kontrol etmek için onları 3000 numaralı bağlantı noktasına ping atarak ayarladım.
Mini özet
Sonunda istenen uygulama altyapısını manuel olarak dağıtmayı başardık ve artık oldukça dayanıklı bir Grafana hizmetimiz var. Veri kümesini yüklemek için uygulamaya ve ClickHouse kümesinin ana bilgisayarına giriş noktası olarak dengeleyicinin IP adresini bilmeniz yeterlidir.
Bir zafer gibi mi görünüyor? Evet zafer. Ama bir şey hala kafamı karıştırıyor. Yukarıdaki sürecin tamamı çok sayıda manuel adım gerektirir ve hiçbir şekilde ölçeklenebilir değildir; mümkünse bunu otomatikleştirmek istiyorum. Bir sonraki bölüm buna ayrılacak.
Terraform entegrasyonu
Yine HashiCorp'un adlı aracını kullanacağız.
Terraform ile yapılan tüm çalışmalar bir yapılandırma dosyası yazmaya (*.tf
) ve buna dayalı altyapının oluşturulması.
Değişkenler
Dosyanın en başında gelecekteki altyapının nerede ve nasıl konuşlandırılacağını belirleyen değişkenlere yer vereceğiz.
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>"
}
Uygulama dağıtım sürecinin tamamı bir disk görüntüsü oluşturmaya ve bu değişkenleri ayarlamaya indirgenecektir. Nelerden sorumlu olduklarını açıklayayım:
oauth_token — buluta erişim için bir belirteç. Tarafından elde edilebilir
cloud_id — uygulamayı dağıtacağımız bulut tanımlayıcı
klasör_kimliği — uygulamayı dağıtacağımız bölüm tanımlayıcısı
service_account_id — bulutun ilgili bölümündeki hizmet hesabı tanımlayıcısı.
resim_kimliği - Packer kullanılarak elde edilen disk görüntüsünün tanımlayıcısı
kullanıcı adı и şifre — hem veritabanlarına hem de Grafana web sunucusuna erişim için kullanıcı adı ve şifre
veritabanı adı — CH ve MySQL kümelerinin içindeki veritabanı adı
genel_anahtar_yolu — adı altında bağlanmak için kullanabileceğiniz genel ssh anahtarınızın bulunduğu dosyanın yolu ubuntu
web sunucuları olan sanal makinelere
Sağlayıcı kurulumu
Artık Terraform sağlayıcısını yapılandırmanız gerekiyor - bizim durumumuzda Yandex:
provider "yandex" {
token = var.oauth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = "ru-central1-a"
}
Burada yukarıda tanımlanan değişkenleri kullandığımızı fark edeceksiniz.
Ağ ve kümeler
Şimdi altyapımızın unsurlarının iletişim kuracağı, üç alt ağın (her bölgede bir tane) ve CH ve MySQL kümelerini yükselteceği bir ağ oluşturacağız.
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
}
}
Gördüğünüz gibi iki kümenin her biri üç kullanılabilirlik bölgesinde konumlandırılarak hataya oldukça dayanıklı oluşturulmuştur.
Web sunucuları
Görünüşe göre aynı ruhla devam edebilirdik ama zorluklarla karşılaştım. Bundan önce, ilk önce bir MySQL kümesi oluşturdum ve ancak bundan sonra kimliğini bilerek, kümenin ana bilgisayarını belirttiğim gerekli yapılandırmaya sahip bir disk görüntüsü topladım. Ancak artık Terraform'u başlatmadan önce, görüntünün oluşturulduğu an da dahil olmak üzere küme kimliğini bilmiyoruz. Bu nedenle aşağıdaki yöntemlere başvurmak zorunda kaldım
Amazon'un meta veri hizmetini kullanarak sanal makineye kabul edeceği ve işleyeceği bazı parametreleri aktaracağız. Makinenin başladıktan sonra Terraform dosyasında kullanıcının belirttiği MySQL kümesi ana bilgisayarının arkasındaki meta verilere ve kullanıcı adı-şifreye gitmesine ihtiyacımız var. Dosyanın içeriğini biraz değiştirelim setup.sh
, sanal makine açıldığında çalışır.
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
Örnek grubu ve dengeleyici
Yeni bir disk imajını yeniden oluşturduktan sonra nihayet Terraform dosyamızı ekleyebiliriz.
Mevcut bir disk imajını kullanmak istediğimizi belirtelim:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}
Şimdi bir örnek grubu oluşturalım:
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"
}
}
Bunu meta verilere nasıl aktardığımıza dikkat etmeye değer cluster_uri
, username
и password
. Sanal makinenin başlangıçta çıkaracağı ve Grafana yapılandırmasına koyacağı şeyler bunlardır.
Dengeleyiciye kalmış.
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
}
}
}
}
Biraz şeker
Sadece biraz kaldı. Altyapı dağıtıldıktan sonra Grafana kullanıcı arayüzüne gitmeniz ve CH kümesini (kimliğinin hala alınması gereken) Veri Kaynağı olarak manuel olarak eklemeniz gerekecektir. Ancak Terraform küme kimliğini biliyor. Bu meseleyi sonuçlandırma görevini ona emanet edelim.
Yeni bir sağlayıcı ekleyelim - Grafana ve ona ana bilgisayar olarak dengeleyicinin IP adresini verelim. Terraform'un dengeleyicisinin belirlediği makinede yaptığı tüm değişiklikler MySQL'de ve dolayısıyla diğer tüm makinelerde büyüyecektir.
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"
}
Hadi saçlarımızı tarayalım
Dengeleyici IP adresini ve ClickHouse kümesinin ana bilgisayarını görüntüleyelim
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"
}
Koşabilir
Tüm! Yapılandırma dosyamız hazır ve değişkenleri ayarlayarak Terraform'a yukarıda tanımladığımız her şeyi yükseltmesini söyleyebiliriz. Tüm süreç yaklaşık 15 dakikamı aldı.
Sonunda güzel bir mesaj görebilirsiniz:
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
Bulutta ise yükseltilmiş altyapının unsurları görünür olacak:
Toparlamak
Artık Grafana'yı örnek alırsak, her biriniz Yandex.Cloud platformunda genişleyen bulut mimarisine sahip uygulamaları dağıtabilirsiniz. HashiCorp'un Packer ve Terraform gibi faydalı araçları bu konuda size yardımcı olabilir. Umarım birileri bu makaleyi faydalı bulur :)
PS Aşağıda, bu makalede parçalarını verdiğim Packer ve Terraform için hazır tarifler bulabileceğiniz deponun bağlantısını ekleyeceğim.
Kaynak: habr.com