Как преобразовать / перенести существующую инфраструктуру облачной платформы Google в Terraform или другой IaC - PullRequest
0 голосов
/ 16 января 2019

В настоящее время у нас есть мастер кластера kubernetes, установленный на зональный, и требует, чтобы он был региональным. Моя идея состоит в том, чтобы преобразовать существующий кластер и все рабочие нагрузки / узлы / ресурсы в некоторую инфраструктуру в виде кода - предпочтительно terraform (но это может быть просто набор команд gcloud).

Я знаю, что с помощью GCP я могу генерировать необработанные командные строки для команд, которые я собираюсь выполнить, но я не знаю, как (или даже могу ли я) преобразовать существующую инфраструктуру в ту же.

Судя по моим исследованиям, похоже, что невозможно сделать то, что я пытаюсь сделать [прямым способом]. Поэтому я ищу любой совет, даже если это просто для того, чтобы прочитать другую документацию (для инструмента, с которым я, возможно, не знаком).

TL; DR: я собираюсь взять свой существующий кластер Google Cloud Platform Kubernetes и перестроить его, чтобы изменить тип местоположения с зонального на главный - на самом деле мне все равно, как это сделать. Каков в настоящее время приемлемый способ сделать это? Если такого нет, то какой быстрый и грязный способ сделать это?

Если вы потребуете от меня более подробных указаний, я ... я намеренно исключил ссылки на конкретные исследования, которые я провел.

1 Ответ

0 голосов
/ 16 января 2019

Создать кластер Kubernetes с помощью terraform очень просто, потому что в конечном итоге сделать кластер Kubernetes в GKE просто, вы просто используете ресурсы google_container_cluster и google_container_node_pool, например:

resource "google_container_cluster" "primary" {
  name               = "${var.name}"
  region             = "${var.region}"
  project            = "${var.project_id}"
  min_master_version = "${var.version}"

  addons_config {
    kubernetes_dashboard {
      disabled = true
    }
  }

  maintenance_policy {
    daily_maintenance_window {
      start_time = "03:00"
    }
  }

  lifecycle {
    ignore_changes = ["node_pool"]
  }

  node_pool {
    name = "default-pool"
  }
}

resource "google_container_node_pool" "default" {
  name    = "default"
  project = "${var.project_id}"
  region  = "${var.region}"
  cluster = "${google_container_cluster.primary.name}"

  autoscaling {
    min_node_count = "${var.node_pool_min_size}"
    max_node_count = "${var.node_pool_max_size}"
  }

  management {
    auto_repair  = "${var.node_auto_repair}"
    auto_upgrade = "${var.node_auto_upgrade}"
  }

  lifecycle {
    ignore_changes = ["initial_node_count"]
  }

  node_config {
    machine_type = "${var.node_machine_type}"

    oauth_scopes = [
      "https://www.googleapis.com/auth/cloud-platform",
    ]
  }

  depends_on = ["google_container_cluster.primary"]
}

Для более полнофункционального использования доступны модули terraform, такие как этот

Преобразование существующего кластера значительно сложнее. Если вы хотите использовать terraform import

terraform import google_container_cluster.mycluster us-east1-a/my-cluster

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

Вы решаете, является ли ваш кластер зональным или региональным при создании Это. Вы не можете преобразовать существующий зональный кластер в региональный или наоборот наоборот.

На мой взгляд, лучшая ставка для вас:

  • Создать региональный кластер с помощью terraform, дав кластеру новое имя
  • Сделайте резервную копию существующего зонального кластера, используя резервную копию etcd, или более сложную резервную копию, используя heptio-ark
  • Восстановление этой резервной копии в ваш региональный кластер
...