View a markdown version of this page

亚马逊 EKS 优化了 Windows AMI 管理 - Amazon EKS

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

亚马逊 EKS 优化了 Windows AMI 管理

Windows Amazon EKS 优化版 AMI 基于 Windows Server 2019 和 Windows Server 2022 构建。它们被配置作为 Amazon EKS 节点的基本映像。默认情况下,AMI 包括以下组件:

您可以通过查询 AWS Systems Manager Parameter Store API,以编程方式检索亚马逊 EKS 优化的 AMI 的亚马逊系统映像 (AMI) ID。此参数使您无需手动查找 Amazon EKS 优化版 AMI ID。有关 Systems Manager 参数存储 API 的更多信息,请参阅GetParameter。您的用户账户必须具有 ssm: GetParameter IAM 权限才能检索 Amazon EKS 优化的 AMI 元数据。

以下示例检索适用于 Windows Server 2019 LTSC Core 的最新亚马逊 EKS 优化版 AMI 的 AMI 的 AMI ID。AMI 名称中列出的版本号与其准备的相应的 Kubernetes 版本有关。

aws ssm get-parameter --name /aws/service/ami-windows-latest/Windows_Server-2019-English-Core-EKS_Optimized-1.21/image_id --region us-east-1 --query "Parameter.Value" --output text

输出示例:

ami-09770b3eec4552d4e

管理你自己的亚马逊 EKS 优化的 Windows AMI

迈向生产环境的重要步骤是在整个亚马逊 EKS 集群中保持相同的亚马逊 EKS 优化版 Windows AMI 和 kubelet 版本。

在 Amazon EKS 集群中使用相同的版本可以缩短故障排除时间,并提高集群的一致性。Amazon EC2 Image Builder 可帮助创建和维护定制的亚马逊 EKS 优化 Windows AMI,以便在亚马逊 EKS 集群中使用。

使用 Amazon EC2 Image Builder 在 Windows 服务器版本、AWS Windows Server AMI 发布日期、 and/or 操作系统版本之间进行选择。构建组件步骤允许你在现有的 EKS 优化的 Windows Artifacts 和 kubelet 版本之间进行选择。欲了解更多信息:https://docs.aws.amazon.com/eks/latest/userguide/eks-custom-ami-windows.html

构建组件

注意:在选择基础映像之前,请查阅 Windows Server 版本和许可证部分,了解有关发布渠道更新的重要详细信息。

为自定义 EKS 优化的 AMI 配置更快的启动

使用经过优化 Windows Amazon EKS 的自定义 AMI 时,启用快速启动功能可以将 Windows 工作节点的启动速度提高多达 65%。此功能保留了一组预先配置的快照,这些快照具有 Sysprep 专用、Windows 开箱即用体验 (OOBE) 步骤和已完成所需的重启。然后,这些快照用于后续启动,从而缩短了向外扩展或替换节点的时间。只能通过 EC2 控制台或 AWS CLI 为您拥有的 AMI 启用快速启动,并且可以配置所维护的快照数量。

注意:Fast Launch 与 Amazon-provided EKS 优化的默认 AMI 不兼容,请在尝试启用之前按上述方式创建自定义 AMI。

欲了解更多信息:AWS Windows AMI-配置您的 AMI 以加快启动速度

在自定义 AMI 上缓存 Windows 基础图层

Windows 容器镜像比 Linux 容器镜像大。如果您正在运行任何容器化的.NET Framework-based 应用程序,则平均图像大小约为 8.24GB。在 Pod 调度期间,必须在 Pod 处于 Running 状态之前将容器镜像完全拉取并提取到磁盘中。

在此过程中,容器运行时 (containerd) 将整个容器镜像提取并提取到磁盘中。拉取操作是一个并行进程,这意味着容器运行时会并行拉取容器镜像层。相比之下,提取操作是按顺序进行的,而且是 I/O 密集型的。因此,容器镜像可能需要 8 分钟以上的时间才能完全提取并可供容器运行时 (containerd) 使用,因此,pod 的启动时间可能需要几分钟。

修补 Windows 服务器和容器主题中所述,可以选择使用 EKS 构建自定义 AMI。在 AMI 准备过程中,您可以添加额外的 EC2 映像生成器组件,以便在本地提取所有必要的 Windows 容器映像,然后生成 AMI。这种策略将大大缩短 pod 变为 “正在运行” 状态的时间。

在 Amazon EC2 Image Builder 上,创建一个组件来下载必要的图像并将其附加到图像配方中。以下示例从 ECR 存储库中提取特定映像。

name: ContainerdPull
description: This component pulls the necessary containers images for a cache strategy.
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: containerdpull
        action: ExecutePowerShell
        inputs:
          commands:
            - Set-ExecutionPolicy Unrestricted -Force
            - (Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin 111000111000.dkr.ecr.us-east-1.amazonaws.com
            - ctr image pull mcr.microsoft.com/dotnet/framework/aspnet:latest
            - ctr image pull 111000111000.dkr.ecr.us-east-1.amazonaws.com/myappcontainerimage:latest

为确保以下组件按预期运行,请检查 EC2 Image builder (EC2InstanceProfileForImageBuilder) 使用的 IAM 角色是否附加了策略:

权限策略

博客文章

在以下博客文章中,您将逐步了解如何为自定义 Amazon EKS Windows AMI 实施缓存策略:

使用 EC2 映像生成器和映像缓存策略加快 Windows 容器的启动时间