首页
/ Terraform AWS EKS 模块中自定义节点初始化脚本的正确使用方式

Terraform AWS EKS 模块中自定义节点初始化脚本的正确使用方式

2025-06-12 07:57:47作者:毕习沙Eudora

在使用 Terraform AWS EKS 模块管理 Amazon EKS 集群时,许多开发者会遇到需要自定义节点初始化过程的需求。本文将详细介绍如何在 EKS 托管节点组中正确配置初始化脚本,避免常见误区。

理解 EKS 托管节点组的初始化机制

Amazon EKS 托管节点组提供了两种不同的方式来执行自定义初始化脚本:

  1. pre_bootstrap_user_data:在节点加入集群之前执行的脚本
  2. post_bootstrap_user_data:在节点加入集群之后执行的脚本

需要注意的是,cloudinit_post_nodeadm 参数仅在使用自定义 AMI 时才有效,这是许多开发者容易混淆的地方。对于标准的 EKS 托管节点组,应该使用上述两种方式之一。

正确配置初始化脚本的示例

以下是一个完整的配置示例,展示了如何在 EKS 托管节点组中正确添加初始化脚本:

module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "~> 20.0"

  cluster_name    = "example-cluster"
  cluster_version = "1.30"

  vpc_id     = module.vpc.vpc_id
  subnet_ids = module.vpc.private_subnets
  
  eks_managed_node_groups = {
    example_nodegroup = {
      instance_types = ["t3.micro"]
      min_size       = 1
      max_size       = 3
      desired_size   = 1
      
      # 在节点加入集群前执行的脚本
      pre_bootstrap_user_data = file("${path.module}/pre_bootstrap.sh")
      
      # 必须启用用户数据引导
      enable_bootstrap_user_data = true
    }
  }
}

初始化脚本文件示例

pre_bootstrap.sh 文件内容应该遵循 MIME 多部分格式:

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==BOUNDARY=="

--==BOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
echo "正在执行系统更新..."
yum update -y
echo "系统更新完成"

--==BOUNDARY==--

关键注意事项

  1. 格式要求:用户数据脚本必须使用正确的 MIME 多部分格式,否则可能无法正确执行。

  2. 执行时机

    • pre_bootstrap_user_data:在节点加入集群前执行,适合做系统级配置
    • post_bootstrap_user_data:在节点加入集群后执行,适合做与Kubernetes相关的配置
  3. 权限控制:确保脚本文件有可执行权限,并且在 Terraform 配置中正确引用文件路径。

  4. 日志查看:执行结果可以在节点的 /var/log/cloud-init-output.log 中查看。

常见问题排查

如果初始化脚本没有按预期执行,可以检查以下几点:

  1. 确认 enable_bootstrap_user_data 已设置为 true
  2. 检查脚本文件的格式是否正确
  3. 验证脚本文件路径是否正确
  4. 查看云初始化日志确认是否有错误信息

通过正确理解和使用这些配置选项,开发者可以灵活地定制 EKS 节点的初始化过程,满足各种业务需求。

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