Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
如何为 Amazon EKS 创建自定义 Amazon Linux AMI?
我想创建一个自定义 Amazon Linux 亚马逊机器镜像(AMI),用 Amazon Elastic Kubernetes Service(Amazon EKS)集群进行部署。
解决方案
先决条件
- 在本地计算机上或 Amazon Linux Amazon Elastic Compute Cloud(EC2)实例上安装 Packer。有关说明,请参阅 Hashicorp 网站上的 Install Packer。
- 然后,安装 Amazon 插件以便与 Hashicorp Packer 一起使用在 AWS 上创建自定义映像。有关说明,请参阅 Hashicorp 网站上的 Installation。
- 确保安装了 make 和 git:
sudo yum install make -y sudo yum install git -y
为 Amazon EKS 创建自定义 Amazon Linux AMI
完成下面的步骤:
-
要克隆 amazon-eks-ami AWS Labs 存储库,请运行下面的命令:
sudo git clone https://github.com/awslabs/amazon-eks-ami && cd amazon-eks-ami
有关更多信息,请参阅 GitHub 网站上的 amazon-eks-ami。
-
要在 amazon-eks-ami 目录中创建名为 variables-custom.json 的新文件,请运行下面的命令:
sudo vi variables-custom.json
**注意:**variables-custom.json 覆盖的默认变量文件位于 GitHub 网站上的 variables-default.json 文件中。如果使用 Amazon Linux 2(AL2),则 variables-default.json 的文件路径是 /amazon-eks-ami/templates/al2/variables-default.json。如果使用 Amazon Linux 2023(AL2023),则文件路径为 /amazon-eks-ami/templates/al2023/variables-default.json。
-
在 variables-custom.json 文件中,添加您的值:
{ "aws_region": "AWS_Region", "source_ami_filter_name": "AMI_Name", "source_ami_id": "Source_AMI_ID", "source_ami_owners": "AMI_Owner_Account_ID", "temporary_security_group_source_cidrs": "Source_Machine_IP", #example: local_machine_IP /32 or NAT_GW_IP /32 or EC2_PublicIP /32 "launch_block_device_mappings_volume_size": "Integer", #Root volume size of the instance to be launched by packer "iam_instance_profile": "IAM_Instance_Profile_Name" #Optional }
当使用现有 AMI 作为源为 EKS 创建自定义 AMI 时,请设置 launch_block_device_mappings_volume_size 值。该值必须等于或大于 AMI 快照卷大小。variables-default.json 文件中的默认值为“4”。
如果在 Packer 中使用 iam_instance_profile 选项,则必须提供要附加的 IAM 角色的实例配置文件名称。不要提供 IAM 角色 ARN 或实例配置文件 ARN。
如果未提供 temporary_security_group_source_cidrs 参数,则 Packer 会向所有 IP 地址(0.0.0.0/0)开放 SSH 端口。为了防止安全风险,最佳做法是在 temporary_security_group_source_cidrs 参数中指定源计算机的 IP 地址。 -
要启动自定义 AMI 创建过程,请运行下面的命令:
sudo make PACKER_OPTIONAL_K8S_VARIABLE_FILE=variables-custom.json k8s=1.29 os_distro=al2 arch=x86_64 -d
或者,要启用 packer 日志记录,请运行下面的命令:
sudo PACKER_LOG_PATH=packer_logs.txt`TZ=":Asia/Kolkata" date +%Y-%m-%d_%H%M` PACKER_LOG=1 make PACKER_OPTIONAL_K8S_VARIABLE_FILE=variables-custom.json k8s=1.29 os_distro=al2 arch=x86_64 -d
**注意:**要设置系统的时区,请将 ":Asia/Kolkata" 替换为您的时区。生成的 Packer 日志文件位于运行 Packer 命令的同一目录中。
-
检查用于运行 make 命令的 IAM 用户凭证或 IAM 角色是否具有所需的 IAM 权限。有关详细信息,请参阅 Hashicorp 网站上的 IAM task or instance role 和 Attaching IAM policies to roles。此外,权限必须允许访问默认 Amazon Simple Storage Service(Amazon S3)存储桶。您必须附加 AmazonS3ReadOnlyAccess 策略。如果没有访问 S3 存储桶的权限,则可能会收到以下错误:
“required variable not set: kubernetes_build_date
required variable not set: kubernetes_version”**注意:**这些权限允许 Packer 对 AWS 进行 API 调用。或者,您可以配置静态凭证,例如密钥和秘密访问密钥、环境变量或共享凭证文件。
-
验证您的自定义 AMI 是否存在于源 AMI 的 AWS 区域中。
当 Packer 预置实例时,将从 us-west-2 中的 Amazon EKS 公共 S3 存储桶 amazon-eks 下载默认二进制文件。有关更多信息,请参阅 GitHub 网站上的 install-worker.sh 文件。
提供自己的 Kubernetes 二进制文件(可选)
完成下面的步骤:
- 要检查默认存储桶中提供的可用二进制文件,请运行下面的命令:
**注意:**将 amazon-eks、kubernetes_version、kubernetes_build_date 和 arch 替换为您的值。aws s3 ls s3://amazon-eks aws s3 ls s3://amazon-eks/kubernetes_version/kubernetes_build_date/bin/linux/arch/
- 要将自己的二进制文件按预置方式下载到 Worker 节点,请镜像 install-worker.sh 脚本中使用的 amazon-eks 存储桶文件夹结构。
- 准备好二进制文件后,使用 AWS CLI 将二进制文件复制您的 Amazon S3 存储桶。以下示例使用自定义 kubelet 二进制文件:
**注意:**将 my-custom-bucket、amazon-eks、kubernetes_version、kubernetes_build_date 和 arch 替换为您的值。您必须提供默认 amazon-eks 存储桶中列出的所有二进制文件。aws s3 cp kubelet s3://my-custom-bucket/kubernetes_version/kubernetes_build_date/bin/linux/arch/kubelet
- 要开始构建过程,请使用在目录 al2 的 variables-default.json 中配置的源 AMI,路径为 /amazon-eks-ami/templates/al2/variables-default.json。要使用参数调用 make,请运行类似于以下内容的命令:
**注意:**确认 binary_bucket_name、binary_bucket_region、kubernetes_version 和 kubernetes_build_date 参数与 Amazon S3 中二进制文件的路径匹配。make k8s binary_bucket_name=Custom_Bucket_Name binary_bucket_region=Region kubernetes_version=Version kubernetes_build_date=Build_Date -d

相关内容
- AWS 官方已更新 15 天前
- AWS 官方已更新 1 个月前
- AWS 官方已更新 9 个月前
- AWS 官方已更新 1 年前