Как настроить кластер Google Cloud Kubernetes с автоматическим восстановлением и автоматическим масштабированием с помощью Terraform и отключенного stackdriver

Я читал этот блог по настройке доступного кластера Kubernetes для личных проектов и настройке моего кластера.

Проблема в том, что со временем я часто забываю о ручной настройке, поэтому решил сохранить ее в декларативном коде с помощью Terraform.

Мне удалось построить следующую конфигурацию и применить ее:

provider "google" {
  credentials = "${file("secret-account.json")}"
  project     = "worklark-218609"
  zone      = "us-central1-a"
}

# configuration
resource "google_container_cluster" "primary" {
  name               = "worklark-cluster"
  initial_node_count = 3

  node_config {
    machine_type = "f1-micro"
    disk_size_gb = 10 # Set the initial disk size
    preemptible = true
  }

  addons_config {
    kubernetes_dashboard {
      disabled = false # Configure the Kubernetes dashboard
    }

    http_load_balancing {
      disabled = false # Configure the Kubernetes dashboard
    }

  }
}

Проблема в том, что два кластера настроены немного по-разному, вот что мне нужно добавить в конфигурацию:

  • Stackdriver Logging: в настоящее время включено, должно быть отключено.
  • Stackdriver Monitoring: в настоящее время включен, должен быть отключен.
  • Автоматическое обновление узлов: в настоящее время отключено, должно быть включено.
  • Автоматическое восстановление узла: в настоящее время отключено, должно быть включено.

Я не могу найти параметры конфигурации в документации для google_container_cluster < / a> ресурс. Что мне делать, чтобы установить эти параметры?


person Amin Shah Gilani    schedule 08.10.2018    source источник


Ответы (1)


Нашел варианты:

  • Stackdriver Logging: называется logging_service в google_container_cluster
  • Stackdriver Monitoring: называется monitoring_service в google_container_cluster
  • Автоматическое обновление узлов: называется management.auto_upgrade в container_node_pool
  • Автоматическое восстановление узла: называется management.auto_repair в container_node_pool `

К сожалению, параметры container_node_pool не применимы к пулу по умолчанию, созданному с помощью кластера, поэтому я нашел обходной путь: удалить пул по умолчанию, а затем добавить в кластер полностью настроенный пул узлов.

Вот финальный конфиг:

/* This configuration sets up a Kubernetes Cluster following
   https://www.doxsey.net/blog/kubernetes--the-surprisingly-affordable-platform-for-personal-projects

   Confession: there's a minor difference between the article and my config, the
   former created a Cluster and configured the default node pool, however the options
   for doing this via the API are limited, so my configuration creates an empty
   default node pool for the cluster, and the creates and adds a fully configured
   one on top
    */

provider "google" {
  credentials = "${file("secret-account.json")}"
  project     = "worklark-218609"
  zone        = "us-central1-a"
}

# Node pool configuration
resource "google_container_node_pool" "primary_pool" {
  name       = "worklark-node-pool"
  cluster    = "${google_container_cluster.primary.name}"
  node_count = 3

  node_config {
    machine_type = "f1-micro"
    disk_size_gb = 10         # Set the initial disk size
    preemptible  = true
  }

  management {
    auto_repair  = true
    auto_upgrade = true
  }
}

# configuration
resource "google_container_cluster" "primary" {
  name               = "worklark-cluster"
  logging_service    = "none"
  monitoring_service = "none"

  addons_config {
    kubernetes_dashboard {
      disabled = false # Configure the Kubernetes dashboard
    }

    http_load_balancing {
      disabled = false # Configure the Kubernetes dashboard
    }
  }

  remove_default_node_pool = "true"

  node_pool {
    name = "default-pool"
  }
}

resource "google_compute_firewall" "default" {
  name        = "http-https"
  network     = "${google_container_cluster.primary.network}"
  description = "Enable HTTP and HTTPS access"

  direction = "INGRESS"

  allow {
    protocol = "tcp"
    ports    = ["80", "443"]
  }
}
person Amin Shah Gilani    schedule 08.10.2018