如何使用Terraform创建Fargate类型的EKS节点组?
核心逻辑认知纠正
Fargate本质不属于EC2实例类型,它是AWS提供的Serverless容器运行时服务,和传统EKS托管节点组(基于EC2实例搭建的节点池)底层架构完全独立,根本不存在可选的instance_type = "Fargate"配置项——这也是之前尝试在普通节点组中填入该实例类型报错的根本原因。
eksctl创建带Fargate能力的EKS集群时,并不是真的生成名为Fargate的EC2实例节点,而是自动在集群内创建关联的Fargate Profile资源,通过匹配规则把符合条件的K8s Pod调度到Serverless运行时上,这套逻辑和EC2节点组的配置体系完全平行。
Terraform实现等效Fargate EKS集群的方案
因为架构逻辑的差异,不能复用传统EC2节点组的配置块实现Fargate能力,需要按以下步骤搭建:
- 先部署EKS基础控制面,提前配置好对应的IAM角色、VPC网络、子网资源,这部分和普通EKS集群的基础配置没有区别,注意不需要提前创建依赖EC2实例的托管节点组。
- 单独创建
aws_eks_fargate_profile资源,这是实现Fargate调度能力的核心配置,用来定义Fargate运行时的匹配规则、关联权限、网络参数。 - 根据业务需求定义Pod调度匹配规则,指定需要被调度到Fargate上的K8s命名空间、资源标签,确保对应工作负载可以被正常调度。
核心参考代码片段如下:
# 基础EKS控制面配置(省略VPC、IAM角色创建等前置依赖) resource "aws_eks_cluster" "fargate_cluster" { name = "serverless-eks-demo" role_arn = aws_iam_role.eks_control_plane.arn vpc_config { subnet_ids = var.private_subnet_id_list } } # Fargate Profile核心配置,替代错误的EC2节点组实例配置 resource "aws_eks_fargate_profile" "default_rule" { cluster_name = aws_eks_cluster.fargate_cluster.name fargate_profile_name = "general-workload-profile" pod_execution_role_arn = aws_iam_role.fargate_runtime.arn subnet_ids = var.private_subnet_id_list # 定义Pod调度匹配规则 selector { namespace = "kube-system" } selector { namespace = "app-namespace" labels = { env = "production" } } }
注意事项:
- Fargate是Serverless架构,不需要像EC2节点组那样手动配置
desired_capacity/max_capacity/min_capacity这类节点容量参数,运行资源会由AWS根据实际调度的Pod数量自动动态调整。- 之前尝试的配置代码里还有一处参数拼写错误:
min_capaicty遗漏了字母t,正确的参数名是min_capacity,不过这类容量参数只在EC2类型的节点组中生效,Fargate场景下完全不需要配置。
内容的提问来源于stack exchange,提问作者thomas
相关产品推荐
相关产品推荐

