From f9f5ee87debeb5abb6249cd0b7d6c3f8f075b217 Mon Sep 17 00:00:00 2001 From: EvgeniTiti Date: Thu, 24 Apr 2025 17:06:22 +0300 Subject: [PATCH] Added Instace with Prometheus and Grafana (As a docker), Configured DNS record, And adding Cluster endpoint to Push metrics to Promethues --- instance.tf | 47 ++++++++++++++++++++++++++++- k8s.tf | 49 ------------------------------- main.tf | 11 +++++++ scripts/monitor.sh | 73 ++++++++++++++++++++++++++++++++++++++++++++++ variable.tf | 4 +++ 5 files changed, 134 insertions(+), 50 deletions(-) delete mode 100644 k8s.tf create mode 100644 scripts/monitor.sh diff --git a/instance.tf b/instance.tf index f2df1f6..0bc061d 100644 --- a/instance.tf +++ b/instance.tf @@ -2,7 +2,7 @@ resource "google_compute_instance" "app" { count = var.app_enabled ? 1 : 0 name = "${var.yourname}-${var.env}-app" - machine_type = "n2-highcpu-16" // for memtier/TLS we need a highcpu machine + machine_type = "n2-highcpu-32" // for memtier/TLS we need a highcpu machine //machine_type = var.machine_type zone = "${var.region_name}-${var.region_zones[0]}" tags = ["ssh", "http"] @@ -31,6 +31,39 @@ resource "google_compute_instance" "app" { } } +resource "google_compute_instance" "monitor" { + count = var.monitor_enabled ? 1 : 0 + + name = "${var.yourname}-${var.env}-monitor" + machine_type = "e2-standard-4" // for memtier/TLS we need a highcpu machine + //machine_type = var.machine_type + zone = "${var.region_name}-${var.region_zones[0]}" + tags = ["ssh", "http"] + boot_disk { + initialize_params { + image = "ubuntu-minimal-2204-jammy-v20250311" //"ubuntu-minimal-2004-lts" + size = 30 //GB + } + } + labels = { + owner = var.yourname + skip_deletion = "yes" + } + metadata = { + ssh-keys = "ubuntu:${file("~/.ssh/google_compute_engine.pub")}" + startup-script = templatefile("${path.module}/scripts/monitor.sh", { + cluster_dns_suffix = "${var.yourname}-${var.env}.${var.dns_zone_dns_name}", + RS_CLUSTER_DNS = "cluster.${var.yourname}-${var.env}.${var.dns_zone_dns_name}" + }) + } + network_interface { + subnetwork = google_compute_subnetwork.public_subnet.name + access_config { + // Ephemeral IP + } + } +} + resource "google_compute_instance" "node1" { name = "${var.yourname}-${var.env}-1" machine_type = var.machine_type @@ -134,6 +167,18 @@ resource "google_dns_record_set" "app" { rrdatas = [google_compute_instance.app.0.network_interface.0.access_config.0.nat_ip] } + +resource "google_dns_record_set" "monitor" { + count = var.monitor_enabled ? 1 : 0 + + name = "monitor.${var.yourname}-${var.env}.${var.dns_zone_dns_name}." + type = "A" + ttl = 300 + managed_zone = var.dns_managed_zone + + rrdatas = [google_compute_instance.monitor.0.network_interface.0.access_config.0.nat_ip] +} + resource "google_dns_record_set" "node1" { name = "node1.${var.yourname}-${var.env}.${var.dns_zone_dns_name}." type = "A" diff --git a/k8s.tf b/k8s.tf deleted file mode 100644 index 7a8bcec..0000000 --- a/k8s.tf +++ /dev/null @@ -1,49 +0,0 @@ -# The GKE cluster will only be created if gke_enabled = true (default: false) -# -# Using the core Terraform construct for simple GKE -# and not the Google provided alternative at https://registry.terraform.io/modules/terraform-google-modules/kubernetes-engine/google/latest -# -# terraform init -upgrade -# might be required if you start using this file for first time from an existing install - -data "google_client_config" "default" {} - -resource "google_container_cluster" "gke-cluster" { - count = var.gke_enabled ? 1 : 0 - - name = "${var.yourname}-${var.env}-gke" - location = "${var.region_name}-b" # single zone cluster - network = google_compute_network.vpc.name - subnetwork = google_compute_subnetwork.public_subnet.name - - # skip default node pool so keep it at minimum and remove (per docs) - remove_default_node_pool = true - initial_node_count = 1 - - maintenance_policy { - daily_maintenance_window { - start_time = "01:00" - } - } -} - - -resource "google_container_node_pool" "np" { - count = var.gke_enabled ? 1 : 0 - - name = "redis-node-pool" - cluster = google_container_cluster.gke-cluster.0.name - node_count = var.gke_clustersize - location = "${var.region_name}-b" # copied from google_container_cluster - node_config { - machine_type = var.gke_machine_type - labels = { - owner = var.yourname - skip_deletion = "yes" - } - } -} - -output "how_to_kubectl" { - value = var.gke_enabled ? "gcloud container clusters get-credentials ${google_container_cluster.gke-cluster.0.name}" : "" -} \ No newline at end of file diff --git a/main.tf b/main.tf index ff78a0f..6ca78ac 100644 --- a/main.tf +++ b/main.tf @@ -7,6 +7,17 @@ output "rs_ui_dns" { value = ["https://node1.${var.yourname}-${var.env}.${var.dns_zone_dns_name}:8443", "https://cluster.${var.yourname}-${var.env}.${var.dns_zone_dns_name}:8443"] } + +output "monitor_grafana" { + value = ["http://monitor.${var.yourname}-${var.env}.${var.dns_zone_dns_name}:3000", + "user = admin , password = secret", "monitor IP:${google_compute_instance.monitor.0.network_interface.0.access_config.0.nat_ip}"] +} + +output "monitor_prometheus" { + value = ["http://monitor.${var.yourname}-${var.env}.${var.dns_zone_dns_name}:9090", + "monitor IP:${google_compute_instance.monitor.0.network_interface.0.access_config.0.nat_ip}"] +} + output "rs_ui_ip" { value = "https://${google_compute_instance.node1.network_interface.0.access_config.0.nat_ip}:8443" } diff --git a/scripts/monitor.sh b/scripts/monitor.sh new file mode 100644 index 0000000..0d9eb7a --- /dev/null +++ b/scripts/monitor.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +set -e + +echo "Fetching Redis Enterprise DNS from Terraform outputs..." + +echo "Installing Docker and Docker Compose..." +sudo apt-get update +sudo apt-get install -y docker.io docker-compose +sudo systemctl start docker +sudo systemctl enable docker + +echo "Creating Prometheus configuration directory..." +mkdir prometheus + +echo "Creating prometheus.yml with cluster DNS: $RS_CLUSTER_DNS" + +cat > prometheus/prometheus.yml < docker-compose.yml <:9090" +echo "Grafana: http://:3000 (login: admin / admin)" +echo "Metrics are scraped from: https://${RS_CLUSTER_DNS}:8070" diff --git a/variable.tf b/variable.tf index ed56d88..13f88df 100644 --- a/variable.tf +++ b/variable.tf @@ -67,6 +67,10 @@ variable "app_enabled" { default = false } +variable "monitor_enabled" { + default = false +} + // other possible edits ************************************* Kubernetes KGE // GKE K8s is optional variable "gke_enabled" {