【问题标题】:Create EKS node group of instance type Fargate with Terraform使用 Terraform 创建实例类型 Fargate 的 EKS 节点组
【发布时间】:2021-04-18 20:05:20
【问题描述】:

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

如何使用 terraform 实现相同的目标?可以使用节点组创建集群,但实例类型 Fargate 似乎不存在(虽然 eksctl 是这样创建的)

  node_groups = {
    eks_nodes = {
      desired_capacity = 3
      max_capacity     = 3
      min_capaicty     = 3

      instance_type = "Fargate"
    }
  }

谢谢!

【问题讨论】:

    标签: terraform terraform-provider-aws amazon-eks


    【解决方案1】:

    您是否尝试过先定义Fargate profile

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

    aws eks fargage 的 terraform 代码如下所示:

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

    确保您使用 aws_eks_fargate_profile 资源来创建 eks fargate 配置文件。

    fargate pod 执行角色的 terraform 代码如下所示:

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

    我建议你查看一些来自很棒的社区的很棒的例子,比如Cloudposse

    我给你完整的例子fargate profileeks-node-group,看来你现在需要部署的解决方案。

    Pd:尝试阅读他们是如何制作模块的,我认为您会很快达到目标。

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

    【讨论】:

    • 我确实创建了 fargate 配置文件。但是我似乎无法获得由 instance_type“Fargate”创建的节点,但是当我使用带有 eksctl 的 --fargate 创建一个集群时,它确实创建了一个具有此 instance_type 的节点。但是使用 TF,我似乎只能创建 instance_type,例如 t2.micro 等。
    • 感谢您的示例 - 但 eks-node-group 示例还创建具有特定 EC2 实例类型的节点...
    • 你好@thomas 你试过克隆 fargate 配置文件 repo 并在 /example/complete 文件夹中运行 terraform init 和 terraform apply 吗?
    猜你喜欢
    • 2020-07-17
    • 2020-08-19
    • 1970-01-01
    • 2020-05-10
    • 2020-09-14
    • 2020-12-03
    • 2023-01-15
    • 2020-09-19
    • 2020-10-17
    相关资源
    最近更新 更多