Автоматизируйте извлечение и хранение файла Kubeconfig после создания кластера с помощью Terraform / GKE

#kubernetes #terraform #google-kubernetes-engine

#kubernetes #terraform #google-kubernetes-engine

Вопрос:

Когда я использую Terraform для создания кластера в GKE, все работает нормально и, как и ожидалось.

После создания кластера я хочу использовать Terraform для развертывания рабочей нагрузки.

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

Я хочу автоматизировать извлечение файла kubeconfig кластеров — файла, который обычно хранится в ~/.kube/config . Этот файл обновляется, когда пользователи запускают эту команду вручную для аутентификации в правильном кластере.

Я знаю, хранится ли этот файл на хост-компьютере (на котором у меня запущена Terraform), что можно указать на этот файл для аутентификации в кластере следующим образом:

 provider kubernetes {
  # leave blank to pickup config from kubectl config of local system
  config_path = "~/.kube/config"
}
  

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

Я уверен, что мне чего-то не хватает в том, как этого добиться.

Есть ли лучший способ получить файл kubeconfig через Terraform из кластера, созданного Terraform?

Ответ №1:

На самом деле, есть другой способ получить доступ к свежесозданному gke.

 data "google_client_config" "client" {}

provider "kubernetes" {
  load_config_file = false
  host = google_container_cluster.main.endpoint
  cluster_ca_certificate = base64decode(google_container_cluster.main.master_auth.0.cluster_ca_certificate)
  token = data.google_client_config.client.access_token
}
  

Ответ №2:

По сути, за один шаг создайте свой кластер. Экспортируйте файл конфигурации kube, например, в S3.

На другом шаге извлеките файл и переместите в папку по умолчанию. Terraform должен работать после выполнения этих шагов. Затем вы можете применить свои obejcts к кластеру, созданному ранее.

Я использую конвейер gitlabCi, у меня есть один код репозитория для кластера k8s (infra), а другой — с объектами k8s. Первый конвейер запускает второй.

Комментарии:

1. Здравствуйте, спасибо за ответ. Да, kubectl работает, но я пытаюсь развернуть рабочие нагрузки с файлами * .tf. Файлы работают нормально, когда я вручную настраиваю kubeconfig, но я подумал, что должен быть какой-то способ автоматизации процесса. Итак, вы копируете файл ~/.kube/config в корзину S3 с компьютера, на котором запущена Terraform?