#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?