启动模板支持 - Amazon EKS

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

启动模板支持

托管节点组始终使用 Amazon EC2 Auto Scaling Group 启动模板进行部署。如果您在创建托管节点组时未指定自己的启动模板,Amazon EKS API 会在您的账户中创建一个启动模板,其中包含默认值。根据该模板创建自己的启动模板和托管节点组的好处是,在部署托管节点时,您可以比默认启动模板提供的更高级别的灵活性和自定义。对于最高级别的自定义,您可以使用自己的启动模板和自定义 AMI 部署托管节点。

使用自己的启动模板部署托管节点组后,您可以使用不同版本的同一启动模板对其进行更新。将节点组更新为启动模板的其他版本时,将回收组中的所有节点,以匹配指定启动模板版本的新配置。不使用自定义启动模板的现有节点组无法直接更新。相反,您必须使用自定义启动模板创建新节点组才能执行此操作。

启动模板配置基本知识

您可以使用创建 Amazon EC2 Auto Scaling 启动模板,AWS Management Console、AWS CLI,或AWS开发工具包。有关更多信息,请参阅 。为 Auto Scaling 组创建启动模板Amazon EC2 用户指南中的。启动模板中的某些设置类似于用于托管节点配置的设置。使用启动模板部署或更新节点组时,必须在节点组配置或启动模板中指定某些设置,但不能同时指定两者。如果某个设置不应该存在,则创建或更新节点组之类的操作将失败。

下表列出了启动模板中禁止的设置以及托管节点组配置中需要哪些类似设置(如果有)。列出的设置是显示在控制台中的设置。它们可能具有相似但不同的名称AWS CLI和开发工具包。

启动模板 — 禁止 Amazon EKS 节点组配置
IAM 实例配置文件UNDER高级详细信息 节点 IAM 角色UNDER节点组配置配置节点组
子网UNDER网络接口(添加网络接口 SubnetsUNDER节点组网络配置指定网络
关机行为停止-休眠行为UNDER高级详细信息。保留默认值不要包含在启动模板设置中在启动模板中进行两种设置。 没有等效函数 Amazon EKS 必须控制实例生命周期,而不是 Auto Scaling 组。

下表列出了托管节点组配置中禁止的设置以及启动模板中需要哪些类似设置(如果有)。列出的设置是显示在控制台中的设置。它们可能在AWS CLI和开发工具包。

亚马逊 EKS 节点组配置 — 禁止 启动模板

(仅当您在启动模板中指定了自定义 AMI 时)AMI 类型UNDER节点组计算配置上的设置计算和扩展配置页面 — 控制台显示启动模板中指定和指定的 AMI ID。

如果启动模板中未指定 AMI 类型,则可以在节点组配置中选择 AMI。

AMIUNDER启动模板内容— 您必须指定是否使用自定义 AMI。如果您指定的 AMI 不满足使用自定义 AMI节点组部署将失败。
磁盘大小UNDER节点组计算配置上的设置计算和扩展配置页面 — 控制台显示启动模板中指定 SizeUNDER存储(卷)(Add New 卷)。您必须在启动模板中指定此项。
SSH key pairUNDER节点组配置指定网络页面 — 控制台显示在启动模板中指定的密钥或显示未在启动模板中指定 密钥对名称UNDER密钥对(登录)
您无法指定使用启动模板时允许远程访问的源安全组。 安全组UNDERNetwork settings (网络设置)对于实例或安全组UNDER网络接口(添加网络接口),但不能同时兼具。有关更多信息,请参阅 使用自定义安全组
注意
  • 如果使用启动模板部署节点组,则可以指定零或一个实例类型UNDER启动模板内容启动模板或者您可以指定 0-20 个实例类型实例类型设置计算和扩展配置页面,或使用其他使用 Amazon EKS API 的工具。如果您在启动模板中指定实例类型,并使用该启动模板部署节点组,则无法在控制台中或使用使用 Amazon EKS API 的其他工具指定任何实例类型。如果没有在启动模板中指定实例类型,或者没有使用 Amazon EKS API 使用其他工具指定实例类型,则t3.medium默认情况下会使用实例类型。如果您的节点组使用竞价型容量类型,我们建议您使用控制台指定多个实例类型。有关更多信息,请参阅 托管节点组容量类型

  • 如果部署到节点组的任何容器使用实例元数据服务版本 2,请确保将元数据响应跃点限制2在启动模板中。有关更多信息,请参阅 。实例元数据和用户数据Amazon EC2 用户指南中的。如果在不使用自定义启动模板的情况下部署托管节点组,则会在默认启动模板中为节点组自动设置此值。

标记 Amazon EC2 实例

您可以使用TagSpecification参数来指定哪些标签应用于节点组中的 Amazon EC2 实例。IAM 实体调用CreateNodegroup或者UpdateNodegroupVersionAPI 必须具有ec2:RunInstancesec2:CreateTags,并且必须将标签添加到启动模板中。

使用自定义安全组

您可以使用启动模板指定自定义 Amazon EC2安全组以应用于节点组中的实例。这可以在实例级安全组参数中,也可以作为网络接口配置参数的一部分。但是,您无法创建同时指定实例级和网络接口安全组的启动模板。请考虑以下适用于将自定义安全组与托管节点组一起使用的条件:

  • Amazon EKS 仅允许使用单个网络接口规范启动模板。

  • 默认情况下,亚马逊 EKS 应用集群安全组添加到节点组中的实例,以便于节点和控制平面之间的通信。如果您使用前面提到的任一选项在启动模板中指定自定义安全组,Amazon EKS 不会添加集群安全组。因此,您必须确保安全组的入站和出站规则启用与集群终端节点的通信。不正确的安全组规则会导致工作节点无法加入群集。要了解您应该应用的安全组规则,请参阅Amazon EKS 安全组注意事项

  • 如果您需要对节点组中的实例进行 SSH 访问,请确保包含允许该访问的安全组。

Amazon EC2 用户数据

您可以在启动模板中使用cloud-init启动您的实例时。有关更多信息,请参阅 cloud-init 文档。您的用户数据可用于执行常见配置操作。这包括以下操作:

启动模板中用于托管节点组的 Amazon EC2 用户数据必须位于MIME 分段归档格式的日期和时间。这是因为您的用户数据与节点加入集群所需的 Amazon EKS 用户数据合并。不要在用户数据中指定任何启动或修改的命令kubelet,因为这将作为 Amazon EKS 合并的用户数据的一部分执行。某些kubelet参数(例如在节点上设置标签)可以直接通过托管节点组 API 进行配置。

注意

如果您需要高级kubelet自定义,包括手动启动它或传入自定义配置参数,请参阅使用自定义 AMI了解更多信息。当在启动模板中指定自定义 AMI ID 时,Amazon EKS 不会合并用户数据。

您可以将多个用户数据块合并到一个 MIME 分段文件中。例如,您可以将配置 Docker 守护程序的云 boothook 与安装自定义软件包的用户数据 Shell 脚本合并。MIME 分段文件包含以下组成部分:

  • 内容类型和段边界声明 —Content-Type: multipart/mixed; boundary="==BOUNDARY=="

  • MIME 版本声明 —MIME-Version: 1.0

  • 一个或多个用户数据块,其包含以下组成部分:

    • 开口边界,表示用户数据块的开头 —--==BOUNDARY==

    • 数据块的内容类型声明:Content-Type: text/cloud-config; charset="us-ascii"。 有关内容类型的更多信息,请参阅cloud-init文档中)。

    • 用户数据的内容,例如,Shell 命令或cloud-init指令。

    • 封闭边界,表示 MIME 分段文件的结尾:--==BOUNDARY==--

    以下是 MIME 多部分文件的示例,您可以使用它们来创建您自己的文件。

    MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash echo "Running custom user data script" --==MYBOUNDARY==--

使用自定义 AMI

如果您的组织由于特定的安全性、合规性或内部策略要求而需要运行自定义 AMI,则可以使用启动模板将此类 AMI 部署到托管节点组。有关更多信息,请参阅 。Amazon 系统映像 (AMI)适用于 Linux 实例的 Amazon EC2 用户指南中的。Amazon EKS AMI 构建规范包含用于构建基于 Amazon Linux 2 的自定义亚马逊 EKS AMI 的资源和配置脚本。有关更多信息,请参阅 。亚马逊 EKS AMI 构建规范(位于 GitHub 上)。要生成与其他操作系统一起安装的自定义 AMI,请参阅。亚马逊 EKS 示例自定义 AMI(位于 GitHub 上)。

注意

使用自定义 AMI 时,Amazon EKS 不会合并任何用户数据。相反,您需要负责为节点加入群集提供所需的引导命令。如果您的节点无法加入集群,Amazon EKSCreateNodegroupUpdateNodegroupVersion操作也会失败。

要将自定义 AMI 与托管节点组一起使用,请在imageId启动模板的字段。要将节点组更新为自定义 AMI 的较新版本,请使用更新的 AMI ID 创建启动模板的新版本,然后使用新的启动模板版本更新节点组。

将自定义 AMI 与托管节点组一起使用的限制

  • 您必须创建一个新的节点组,以便在使用自定义 AMI 和 Amazon EKS 优化 AMI 之间切换。

  • 如果您使用的是自定义 AMI,则无法在 API 中设置以下字段

    • amiType

    • releaseVersion

    • version

  • 自定义 AMI 不能是 Windows,因为 Windows 无法在托管节点组中使用。