gpt4 book ai didi

amazon-web-services - 如何在 Terraform 中将 Amazon EFS 与 EKS 结合使用

转载 作者:行者123 更新时间:2023-12-02 12:28:54 26 4
gpt4 key购买 nike

到目前为止,我有 2 个目录:

aws/ k8s/

aws/ 内部是描述 VPC、网络、安全组、IAM 角色、EKS 集群、EKS 节点组和一些 EFS 挂载的 .tf 文件。这些都是使用 AWS 提供者,状态存储在 S3 中。

然后在 k8s/ 中,我使用 Kubernetes 提供程序并在我创建的 EKS 集群中创建 Kubernetes 资源。此状态存储在不同状态文件的同一 S3 存储桶中。

我无法弄清楚如何将 EFS 挂载作为持久卷挂载到我的 pod。

我找到了描述使用 efs-provisioner pod 执行此操作的文档。见 How do I use EFS with 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 集群?

最佳答案

@BMW 说得对,我能够将这一切都导入 Terraform。

aws/ 目录中,我创建了所有 AWS 资源、VPC、EKS、worker 等以及 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]
}

我还从 AWS 提供商计划中导出 EFS 文件系统 ID。

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

创建 EKS 集群后,我必须手动将 EFS CSI 驱动程序安装到集群中,然后才能继续。

然后在 k8s/ 目录中,我引用 aws/ 状态文件,以便在创建 PV 时使用 EFS 文件系统 ID。

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
}
}
}
}

关于amazon-web-services - 如何在 Terraform 中将 Amazon EFS 与 EKS 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60609820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com