ogregor
@ogregor
арендатор vpn сервера debian

Как с помощью terraform создать кластер kubernetes а заполнить его сущностными?

Приветствую, начал использовать терраформ при разворачивании кластера, и сразу столкнулся с несколькими проблемами. А именно порядок исполнения. В моем случае сперва должен создаваться класстер kubernetes ,а после пользователи и права. Но терраформ сейчас порядок не соблюдает. Согласно предложенному плану, сперва создаются сущьности kubernetes а затем создается кластер

provider "some provider" {
  access_key = "svssddsdffsd"
  secret_key = "fsdfsdds"
  organization_id = "fsdfsds"
  zone = "dfsdf"
  region = "sdf"
}

resource "scaleway_k8s_cluster_beta" "emcorp" {
  name = "emcorp"
  description = "test cluster"
  version = "1.16.10"
  cni = "cilium"
  enable_dashboard = true
  ingress = "none"
  tags = [
    "emcorp",
    "thisroot",
    "test"]
}

resource "scaleway_k8s_pool_beta" "emcorp_pool" {
  cluster_id = scaleway_k8s_cluster_beta.emcorp.id
  name = "emcorp_pool"
  node_type = "DEV1-M"
  size = 1
  autoscaling = true
  autohealing = true
  min_size = 1
  max_size = 2
  wait_for_pool_ready = true
}

output "kubeconfig" {
  value = "${scaleway_k8s_cluster_beta.emcorp.kubeconfig}"
}

output "kube-connections" {
  value = {
    load_config_file = "false"
    host = scaleway_k8s_cluster_beta.emcorp.kubeconfig[0].host
    token = scaleway_k8s_cluster_beta.emcorp.kubeconfig[0].token
    cluster_ca_certificate = base64decode(
    scaleway_k8s_cluster_beta.emcorp.kubeconfig[0].cluster_ca_certificate
    )
  }
}

provider "kubernetes" {
  load_config_file = "false"
  host = scaleway_k8s_cluster_beta.emcorp.kubeconfig[0].host
  token = scaleway_k8s_cluster_beta.emcorp.kubeconfig[0].token
  cluster_ca_certificate = base64decode(
  scaleway_k8s_cluster_beta.emcorp.kubeconfig[0].cluster_ca_certificate
  )
}

resource "kubernetes_service_account" "gitlab-admin" {
  metadata {
    name = "gitlab-admin"
    namespace = "kube-system"
  }
  secret {
    name = "${kubernetes_secret.gitlab-admin-secret.metadata.0.name}"
  }

  depends_on = [
    scaleway_k8s_pool_beta.emcorp_pool
  ]
}

resource "kubernetes_secret" "gitlab-admin-secret" {
  metadata {
    name = "gitlab-admin-secret"
  }
}

resource "kubernetes_cluster_role_binding" "gitlab-admin" {
  metadata {
    name = "gitlab-admin"
  }
  role_ref {
    api_group = "rbac.authorization.k8s.io"
    kind = "ClusterRole"
    name = "cluster-admin"
  }
  subject {
    kind = "ServiceAccount"
    name = "gitlab-admin"
    namespace = "kube-system"
  }
}

//provider "helm" {
//  version = "~> 0.9"
//  install_tiller = true
//}
  • Вопрос задан
  • 123 просмотра
Решения вопроса 3
@Macbet
Linux программист
вам нужно воспользоваться depends_on она позволяет поставить какой-то ресурс в завимость от другого ресурса и так получится все создавать цепочкой
Ответ написан
Viji
@Viji
Junior DevOps Engineer
Может быть вам чем-то помогу, но видел как в облаке под Kubernetes cluster выделяли специальную роль с большим количеством permissions... чтобы мастер мог сам управлять сущностями.

Также используйте null resource для ожидания изменений!
https://www.terraform.io/docs/providers/null/resou...
Ответ написан
ogregor
@ogregor Автор вопроса
арендатор vpn сервера debian
Я сделал иначе прокинул в лейблы метку создания пула, после того как он был готов, и после этого после создания кластера начали в правильном порядке создаваться его сущьности. Проблема в том, что такую метку надо прокидывать во все сущности

//kuber module
output "pool_created" {
  value = scaleway_k8s_pool_beta.emcorp_pool.created_at
}
//other module
resource "kubernetes_namespace" "gitlab-ns" {
  metadata {
    name = "gitlab-managed-apps"
    labels = {
      created: var.created_at
    }
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы