咨询AWS EKS Terraform模块中两类托管节点组的差异
AWS EKS Terraform主模块配置项与子模块的差异
两者本质都是用来创建AWS EKS托管节点组,核心功能一致,但使用方式、灵活性和适用场景有明显区别:
1. 使用方式不同
- 主模块的
eks_managed_node_groups是嵌套配置块,直接在EKS主模块的变量中定义,和集群资源绑定创建。不需要单独调用模块,写在主模块的配置里即可同步创建节点组。 - 子模块
eks-managed-node-group是独立可调用模块,需要单独声明module块,并且要传入EKS集群的相关参数(比如集群名称、端点等),相当于把节点组作为单独的资源来管理。
2. 灵活性与独立性差异
- 子模块的独立性更强:可以单独对某个节点组执行创建、更新、销毁操作,不会影响EKS集群本身或者其他节点组。适合需要单独管理节点组生命周期的场景,比如临时扩容某个节点组后单独销毁。
- 主模块的配置块和集群耦合度更高:节点组是集群资源的一部分,调整节点组配置时需要修改主模块的参数,销毁节点组也需要从主模块的配置中移除对应条目,相对不够灵活。
3. 配置粒度不同
- 主模块的
eks_managed_node_groups做了更高程度的封装,只暴露常用的配置项(比如实例类型、节点数量、标签等),适合快速搭建标准的EKS集群和节点组,减少配置复杂度。 - 子模块暴露了更多底层Terraform资源的配置选项,比如自定义启动模板、更精细的IAM权限控制、节点组的升级策略等,适合需要对节点组进行精细化定制的场景。
示例对比
主模块配置块用法
module "eks" { source = "terraform-aws-modules/eks/aws" version = "~> 19.0" cluster_name = "my-eks-cluster" cluster_version = "1.28" # 直接在主模块内定义托管节点组 eks_managed_node_groups = { default = { instance_types = ["t3.medium"] min_size = 1 max_size = 3 subnet_ids = module.vpc.private_subnets } } }
子模块用法
# 先创建EKS集群 module "eks" { source = "terraform-aws-modules/eks/aws" version = "~> 19.0" cluster_name = "my-eks-cluster" cluster_version = "1.28" } # 单独调用子模块创建托管节点组 module "custom_node_group" { source = "terraform-aws-modules/eks/aws//modules/eks-managed-node-group" version = "~> 19.0" cluster_name = module.eks.cluster_name cluster_endpoint = module.eks.cluster_endpoint cluster_certificate_authority_data = module.eks.cluster_certificate_authority_data cluster_version = module.eks.cluster_version instance_types = ["t3.large"] min_size = 1 max_size = 3 subnet_ids = module.vpc.private_subnets # 可以添加更多精细配置 tags = { Environment = "production" Team = "devops" } }
总结
如果只是快速搭建标准EKS集群,用主模块的eks_managed_node_groups配置块足够高效;如果需要独立管理节点组、精细化定制节点组配置,或者要和其他非EKS主模块的资源组合使用,就选子模块。两者创建的EC2实例本质都是EKS托管节点,差异只在Terraform层面的管理方式。
内容的提问来源于stack exchange,提问作者rkelux
相关产品推荐
相关产品推荐

