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

Create EKS node group of instance type Fargate with Terraform

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

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

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

      instance_type = "Fargate"
    }
  }

谢谢!

你试过先定义一个Fargate profile吗?

您必须至少定义一个 Fargate 配置文件,指定哪个 pods 在启动时应使用 Fargate。您还需要以这种方式创建 pod execution role 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
  }
}

确保您正在使用 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 profile and eks-node-group,看来是你此时需要部署的解决方案。

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

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