问题描述
我正在将EFS用作k8s集群中的CSI驱动程序。
我想使用Terraform创建将使用efs存储类的PV。我确认可以“手动”创建PV。
我想使用kubernetes_persistent_volume资源通过Terraform自动创建PV。该资源提供了许多persistent volume sources选项,其中AWS EBS效果很好。 但是我找不到适合EFS的工具,有人知道吗?
解决方法
您可以使用terraform启用这样的EFS存储类。另请参阅EFS provider。
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
}
}
,
您可以使用kubernetes提供程序的较新版本并结合安装csi驱动程序来完成此操作(如Shashank的回答)
示例
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提供程序(具有较旧的版本),所以我需要显式地为提供程序提供足够新的版本。 (对不起,无法跟踪添加的确切版本)