首页
/ Terraform AWS EKS 模块中调整节点磁盘大小的最佳实践

Terraform AWS EKS 模块中调整节点磁盘大小的最佳实践

2025-06-12 15:47:25作者:薛曦旖Francesca

前言

在使用 Terraform AWS EKS 模块管理 Kubernetes 集群时,节点磁盘大小的配置是一个常见需求。许多用户在初始部署后发现默认的 20GB 磁盘空间不足,需要扩容。本文将深入探讨在 EKS 托管节点组中调整磁盘大小的几种方法及其技术细节。

问题背景

AWS EKS 托管节点组默认使用 20GB 的根卷大小,这对于生产环境中的许多工作负载来说往往不够。当需要增加磁盘空间时,用户通常会尝试直接设置 disk_size 参数,但发现这并不总是有效。

解决方案比较

方法一:使用 disk_size 参数(不推荐)

最简单的尝试是直接设置 disk_size 参数:

eks_managed_node_groups = {
  default_node_group = {
    disk_size = 100
    # 其他配置...
  }
}

然而,这种方法存在以下问题:

  1. 需要同时设置 use_custom_launch_template = false 才会生效
  2. 禁用自定义启动模板会导致许多功能丢失,如:
    • 无法自定义安全组
    • IMDS 相关配置恢复默认值
    • 可能导致 AWS Load Balancer Controller 等组件无法正常工作

方法二:使用 block_device_mappings(推荐)

更可靠的方法是显式定义块设备映射:

eks_managed_node_groups = {
  default_node_group = {
    block_device_mappings = {
      xvda = {
        device_name = "/dev/xvda"
        ebs = {
          volume_size           = 100
          volume_type           = "gp3"
          iops                  = 3000
          throughput            = 125
          encrypted             = true
          delete_on_termination = true
        }
      }
    }
    # 其他配置...
  }
}

关键点:

  1. 必须正确指定设备名称(Amazon Linux 通常为 /dev/xvda
  2. 可以完整定义 EBS 卷的所有属性
  3. 不需要禁用自定义启动模板

技术细节解析

设备名称的重要性

不同操作系统和 AMI 类型使用不同的默认设备名称:

  • Amazon Linux 2/2023:/dev/xvda
  • Bottlerocket:/dev/xvda(系统卷)和 /dev/xvdb(数据卷)

可以通过 AWS CLI 查询 AMI 的设备映射:

aws ec2 describe-images --image-id $(aws ssm get-parameter --name /aws/service/eks/optimized-ami/1.31/amazon-linux-2023/x86_64/standard/recommended/image_id --region us-west-2 --query "Parameter.Value" --output text) --region us-west-2

IMDS 配置问题

当使用 use_custom_launch_template = false 时,IMDSv2 的跳数限制会恢复默认值 1,这可能导致:

  1. AWS Load Balancer Controller 无法获取 VPC ID
  2. 其他依赖实例元数据的服务可能失败

解决方法:

  1. 避免禁用自定义启动模板
  2. 如果必须禁用,可以在 Load Balancer Controller 中显式设置 VPC ID:
aws_load_balancer_controller = {
  set = [{
    name  = "vpcId"
    value = var.vpc_id
  }]
}

最佳实践建议

  1. 始终使用 block_device_mappings 方法调整磁盘大小
  2. 在生产环境中避免使用 use_custom_launch_template = false
  3. 对于关键组件如 Load Balancer Controller,显式配置必要参数
  4. 定期检查 AMI 的设备映射,确保配置正确
  5. 在变更前充分测试,特别是涉及启动模板的修改

总结

在 Terraform AWS EKS 模块中调整节点磁盘大小看似简单,但实际上涉及多个技术细节。通过正确使用块设备映射配置,可以在保留所有自定义功能的同时,安全地扩展节点存储空间。理解底层机制有助于避免生产环境中的潜在问题,确保 Kubernetes 集群的稳定运行。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
24
7
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
9
1
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.03 K
479
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
375
3.24 K
pytorchpytorch
Ascend Extension for PyTorch
Python
169
190
flutter_flutterflutter_flutter
暂无简介
Dart
615
140
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
62
19
cangjie_compilercangjie_compiler
仓颉编译器源码及 cjdb 调试工具。
C++
126
855
cangjie_testcangjie_test
仓颉编程语言测试用例。
Cangjie
36
852
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
647
258