如何创建用于 Amazon EKS 的自定义 Amazon Linux AMI?

2 分钟阅读
0

我想创建一个自定义 Amazon Linux Amazon 机器映像(AMI),以与 Amazon Elastic Kubernetes Service(Amazon EKS)集群一起部署。

简短描述

要创建用于 Amazon EKS 的自定义 Amazon Linux AMI,您必须使用以下内容:

**注意:**Packer 在工作时需要利用 AWS CloudFormation 堆栈。该堆栈运行一个 m4.large 或 a1.large Amazon Elastic Compute Cloud (Amazon EC2) 实例(具体取决于目标 AMI 架构)。该实例由 Packer 预置。在使用程序包和二进制文件对实例进行预置后,Packer 会从正在运行的实例中创建 AMI。

分辨率

注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI

安装和配置 Packer

1.    从 HashiCorp 网站安装 Packer

2.    配置您的 AWS 账户凭证,以便 Packer 代表您调用 AWS API 操作。您可以使用静态凭证(密钥和秘密访问密钥)、环境变量,共享凭证文件或 Amazon EC2 角色。

**注意:**有关为 Packer 配置 AWS 凭证的更多信息,请参阅 HashiCorp 网站上的身份验证IAM 任务或实例角色

克隆 Amazon EKS AMI 存储库

要将 Amazon EKS AMI 存储库克隆到您的工作站,请运行以下命令:

$ git clone https://github.com/awslabs/amazon-eks-ami && cd amazon-eks-ami

**注意:**Packer 是通过一系列带有 eks-worker-al2.json 作为构建规范的生成文件目标执行的。构建流程会使用 amazon-ebs Packer 生成器(源自 HashiCorp 网站)并启动一个实例。Packer shell provisioner(源自 HashiCorp 网站)在实例上运行 install-worker.sh 脚本,以安装软件并执行其他配置任务。然后,Packer 从实例中创建一个 AMI,并在创建 AMI 后终止该实例。

提供自定义源 AMI

要配置自定义源 AMI,请在 Packer 配置文件 eks-worker-al2.json 中设置变量 source_ami_idsource_ami_ownersaws_region。例如:

"source_ami_id": "SOURCE_AMI_ID",      # Enter the ID of your source image
"source_ami_owners": "AWS_ACCOUNT_ID", # Enter the account where this image is stored
"aws_region": "AWS_DEFAULT_REGION",    # Enter the AWS Region of the source AMI

要提供自定义工作线程二进制文件,请完成**(可选)提供您自己的 Kubernetes 二进制文件**部分中的步骤。

要使用 AWS 中的默认 Kubernetes 二进制文件构建镜像,请完成使用默认二进制文件构建 Amazon EKS 工作线程 AMI 部分中的步骤。

(可选)提供您自己的 Kubernetes 二进制文件

当 Packer 预置实例时,默认情况下,会从 us-west-2 中的 Amazon EKS 公有 Amazon Simple Storage Service(Amazon S3)存储桶 amazon-eks 下载二进制文件。有关更多信息,请参阅 install-worker.sh 文件

1.    要检查默认存储桶中提供的可用二进制文件,请运行以下 AWS CLI 命令

$ aws s3 ls s3://amazon-eks 
$ aws s3 ls s3://amazon-eks/kubernetes_version/kubernetes_build_date/bin/linux/arch/

**注意:**将 amazon-ekskubernetes_versionkubernetes_build_datearch 替换为您自己的值。

**重要提示:**要在预置期间将您自己的二进制文件下载到工作线程节点,您必须复制 install-worker.sh 脚本中使用的 amazon-eks 存储桶文件夹结构。

2.    在通过您自己的构建流程准备好二进制文件之后,使用 AWS CLI 将二进制文件复制到您自己的 S3 存储桶中。

下面是一个使用自定义 kubelet 二进制文件的示例:

$ aws s3 cp kubelet s3://my-custom-bucket/kubernetes_version/kubernetes_build_date/bin/linux/arch/kubelet

**注意:**将 my-custom-bucketamazon-ekskubernetes_versionkubernetes_build_datearch 替换为您自己的值。

重要提示:您必须提供默认 amazon-eks 存储桶中列出的所有二进制文件,以用于特定的 kubernetes_versionkubernetes_build_datearch 组合。这些二进制文件必须能够通过在安装和配置 HashiCorp Packer部分中配置的 AWS Identity and Access Management(IAM)凭证进行访问。

使用自定义二进制文件构建 Amazon EKS 工作线程 AMI

要开始构建流程,请使用在 eks-worker-al2.json 中配置的源 AMI 调用带有参数的 make 命令。例如:

$ make k8s \
    binary_bucket_name=my-custom-bucket \
    binary_bucket_region=eu-west-1 \
    kubernetes_version=1.14.9 \
    kubernetes_build_date=2020-01-22

**注意:**请确认 binary_bucket_namebinary_bucket_regionkubernetes_versionkubernetes_build_date 参数与您在 Amazon S3 中的二进制文件的路径匹配。

使用默认二进制文件构建 Amazon EKS 工作线程 AMI

1.    要使用自定义基础 AMI 和默认(最新)的 Kubernetes 二进制文件构建 Amazon EKS 工作线程 AMI,请确认 eks-worker-al2.json 文件已使用正确的基础 AMI 进行更新。

2.    要通过提供 Kubernetes 版本作为参数来触发构建流程,请运行以下命令:

$ make 1.14  # Build a Amazon EKS Worker AMI for k8s 1.14

**注意:**对于更高级的配置,您必须在触发构建流程之前修改 amazon-eks-ami AWS GitHub 存储库中的配置文件。

**提示:**请查看 AWS GitHub,了解使用 Packer 配置构建自定义 AMI 的常见问题


AWS 官方
AWS 官方已更新 2 年前