使用Terraform创建实例类型Fargate的EKS节点组

使用Terraform创建实例类型Fargate的EKS节点组,terraform,terraform-provider-aws,amazon-eks,Terraform,Terraform Provider Aws,Amazon Eks,使用eksctl cli,可以创建Fargate类型的EKS集群,该集群创建实例类型为“Fargate”的节点 如何在地形上实现同样的效果?可以使用节点组创建集群,但实例类型Fargate似乎不存在(尽管eksctl这样创建) 谢谢 您是否尝试定义第一个 您必须定义至少一个Fargate配置文件,指定启动时哪些POD应使用Fargate。您还需要以这种方式创建一个应用程序,Fargate基础设施上运行的组件需要代表您调用AWS API,以执行从Amazon ECR提取容器映像或将日志路由到其他A

使用eksctl cli,可以创建Fargate类型的EKS集群,该集群创建实例类型为“Fargate”的节点

如何在地形上实现同样的效果?可以使用节点组创建集群,但实例类型Fargate似乎不存在(尽管eksctl这样创建)


谢谢

您是否尝试定义第一个

您必须定义至少一个Fargate配置文件,指定启动时哪些POD应使用Fargate。您还需要以这种方式创建一个应用程序,Fargate基础设施上运行的组件需要代表您调用AWS API,以执行从Amazon ECR提取容器映像或将日志路由到其他AWS服务等操作

aws eks fargage的地形代码如下所示:

resource "aws_eks_fargate_profile" "default" {
  cluster_name           = var.cluster_name
  fargate_profile_name   = var.fargate_profile_name
  pod_execution_role_arn = join("", aws_iam_role.default.arn)
  subnet_ids             = var.subnet_ids
  tags                   = var.tags

  selector {
    namespace = var.kubernetes_namespace
    labels    = var.kubernetes_labels
  }
}
data "aws_iam_policy_document" "assume_role" {

  statement {
    effect  = "Allow"
    actions = ["sts:AssumeRole"]

    principals {
      type        = "Service"
      identifiers = ["eks-fargate-pods.amazonaws.com"]
    }
  }
}

resource "aws_iam_role" "default" {
  name               = var.role_name
  assume_role_policy = join("", data.aws_iam_policy_document.assume_role.json)
  tags               = var.tags
}

resource "aws_iam_role_policy_attachment" "amazon_eks_fargate_pod_execution_role_policy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy"
  role       = join("", aws_iam_role.default.name)
}
确保您正在使用aws_eks_fargate_配置文件资源创建eks fargate配置文件

fargate吊舱执行角色的地形代码如下所示:

resource "aws_eks_fargate_profile" "default" {
  cluster_name           = var.cluster_name
  fargate_profile_name   = var.fargate_profile_name
  pod_execution_role_arn = join("", aws_iam_role.default.arn)
  subnet_ids             = var.subnet_ids
  tags                   = var.tags

  selector {
    namespace = var.kubernetes_namespace
    labels    = var.kubernetes_labels
  }
}
data "aws_iam_policy_document" "assume_role" {

  statement {
    effect  = "Allow"
    actions = ["sts:AssumeRole"]

    principals {
      type        = "Service"
      identifiers = ["eks-fargate-pods.amazonaws.com"]
    }
  }
}

resource "aws_iam_role" "default" {
  name               = var.role_name
  assume_role_policy = join("", data.aws_iam_policy_document.assume_role.json)
  tags               = var.tags
}

resource "aws_iam_role_policy_attachment" "amazon_eks_fargate_pod_execution_role_policy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy"
  role       = join("", aws_iam_role.default.name)
}
我建议你去看看一些很棒的社区的例子,比如

我将给您一个完整的示例,它似乎是您现在需要部署的解决方案

Pd:试着看看他们是如何制作模块的,我想你会很快达到目标的


我希望它对您和其他用户有用。

我确实创建了fargate配置文件。但是,我似乎无法创建实例类型为“Fargate”的节点,但是,当我使用eksctl创建一个具有--Fargate的集群时,它确实创建了一个具有此实例类型的节点。但有了TF,我似乎只能创建实例类型,如t2.micro等。感谢您的示例-但eks节点组示例也会创建具有特定EC2实例类型的节点…您好@thomas您是否尝试过克隆fargate profile repo并在/example/complete文件夹中运行terraform init和terraform apply?