конфигурация persistent_volume_source для Terraform kubernetes_persistent_volume при использовании EFS

#terraform #amazon-eks #amazon-efs #kubernetes-pvc #terraform-provider-kubernetes

#terraform #amazon-eks #amazon-efs #kubernetes-pvc #terraform-provider-kubernetes

Вопрос:

Я использую EFS в качестве драйвера CSI в кластере k8s.
Я хотел бы использовать Terraform для создания PV, который будет использовать класс хранения efs. Я подтвердил, что могу создать PV «вручную».

Я хотел бы автоматизировать создание PV с помощью Terraform, используя ресурс kubernetes_persistent_volume. Ресурс предлагает множество вариантов источников постоянных томов, среди которых AWS EBS, которая хорошо работает. Однако я не смог найти подходящую для EFS, у кого-нибудь есть идея?

Ответ №1:

Вы можете сделать это, используя более новую версию поставщика kubernetes в сочетании с установкой драйвера csi (как в ответе Шашанка)

пример

 resource "kubernetes_persistent_volume" "pv_example" {
  provider = "kubernetes.localkubernetes"
  metadata {
    name = local.efs_name
  }
  spec {
    access_modes = ["ReadWriteMany"]
    capacity = {
      storage = "50Gi"
    }
    persistent_volume_source {
        csi {
          driver = "efs.csi.aws.com"
          volume_handle = EXISTING_EFS_VOLUME
        }
    }
  }
}
  

здесь я определил

 provider "kubernetes" {
  alias = "localkubernetes"
  ...
  version                = "= 1.13.3"
}
  

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

Ответ №2:

Вы можете включить подобный класс хранилища EFS с помощью terraform. Также обратитесь к поставщику EFS.

 variable cluster_interpreter {
  type    = list(string)
  default = ["/bin/sh", "-c"]
}

variable class {
  type    = string
  default = "kubectl apply -k 'github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master'"
}

resource "null_resource" "storage" {

  provisioner "local-exec" {
    command     = var.class
    interpreter = var.cluster_interpreter
  }
}