Как использовать Amazon EFS с EKS в Terraform - PullRequest
0 голосов
/ 10 марта 2020

Пока у меня есть 2 каталога:

aws/ k8s/

Внутри aws/ находятся .tf файлы, описывающие VP C, сети, группы безопасности, IAM роли, кластер EKS, группа узлов EKS и несколько монтируемых EFS. Все они используют провайдера AWS, состояние которого хранится в S3.

Затем в k8s/ Затем я использую провайдера Kubernetes и создаю ресурсы Kubernetes внутри созданного мной кластера EKS. Это состояние хранится в том же контейнере S3 в другом файле состояния.

У меня проблемы с выяснением того, как монтировать EFS-монтирования в виде постоянных томов на мои модули.

У меня есть нашел документы, описывающие использование модуля efs-provisioner для этого. См. Как использовать EFS с EKS? .

В более поздних документах EKS теперь говорят, что они используют Amazon EFS CSI Driver . Первый шаг - сделать kubectl apply из следующего файла.

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
images:
- name: amazon/aws-efs-csi-driver
  newName: 602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/aws-efs-csi-driver
  newTag: v0.2.0
- name: quay.io/k8scsi/livenessprobe
  newName: 602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/csi-liveness-probe
  newTag: v1.1.0
- name: quay.io/k8scsi/csi-node-driver-registrar
  newName: 602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/csi-node-driver-registrar
  newTag: v1.1.0

Кто-нибудь знает, как мне это сделать в Terraform? Или как вообще смонтировать файловые ресурсы EFS как PV в кластер EKS?

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

@ У BMW все было в порядке, я смог передать все это в Terraform.

В каталоге aws/ я создал все свои ресурсы AWS, VP C, EKS, working, et c. и EFS монтирует.

resource "aws_efs_file_system" "example" {
  creation_token = "${var.cluster-name}-example"

  tags = {
    Name = "${var.cluster-name}-example"
  }
}

resource "aws_efs_mount_target" "example" {
  count = 2
  file_system_id = aws_efs_file_system.example.id
  subnet_id = aws_subnet.this.*.id[count.index]
  security_groups = [aws_security_group.eks-cluster.id]
}

Я также экспортирую идентификаторы файловой системы EFS из плана AWS поставщика.

output "efs_example_fsid" {
  value = aws_efs_file_system.example.id
}

После создания кластера EKS мне пришлось прежде чем продолжить, вручную установите драйвер CSI EFS в кластер.

Затем в каталоге k8s/ я ссылаюсь на файл состояния aws/, чтобы при создании PV использовать идентификаторы файловой системы EFS.

data "terraform_remote_state" "remote" {
  backend = "s3"
  config = {
    bucket = "example-s3-terraform"
    key    = "aws-provider.tfstate"
    region = "us-east-1"
  }
}

Затем создали постоянные тома с помощью поставщика Kubernetes.

resource "kubernetes_persistent_volume" "example" {
  metadata {
    name = "example-efs-pv"
  }
  spec {
    storage_class_name = "efs-sc"
    persistent_volume_reclaim_policy = "Retain"
    capacity = {
      storage = "2Gi"
    }
    access_modes = ["ReadWriteMany"]
    persistent_volume_source {
      nfs {
        path = "/"
        server = data.terraform_remote_state.remote.outputs.efs_example_fsid
      }
    }
  }
}
0 голосов
/ 11 марта 2020

Вот мое понимание вашего вопроса.

Сначала вам нужно использовать terraform для создания EFS

resource "aws_efs_file_system" "foo" {
  creation_token = "my-product"

  tags = {
    Name = "MyProduct"
  }
}

resource "aws_efs_mount_target" "alpha" {
  file_system_id = "${aws_efs_file_system.foo.id}"
  subnet_id      = "${aws_subnet.alpha.id}" # depend on how you set the vpc with terraform
}

После этого вам нужно записать идентификатор efs, например, fs-582a03f3

Затем добавьте новый драйвер csi для EFS и установки постоянного тома это делается в kubernetes с помощью kubectl напрямую, диаграмм управления, настройки или вы можете сделать это с помощью поставщика terraform kubernetes с помощью aws_efs_file_system.foo.id (https://www.terraform.io/docs/providers/kubernetes/index.html)

---
apiVersion: storage.k8s.io/v1beta1
kind: CSIDriver
metadata:
  name: efs.csi.aws.com
spec:
  attachRequired: false

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: efs-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: efs-sc
  csi:
    driver: efs.csi.aws.com
    volumeHandle: fs-582a03f3
...