启动模板支持
托管节点组始终部署用于 Amazon EC2 Auto Scaling 组的启动模板。Amazon EKS API 可以通过复制您提供的启动模板,或用账户中的默认值自动创建启动模板,创建此启动模板。要获得最高级别的自定义,您可以使用自己的启动模板和自定义 AMI 部署托管节点。我们建议不要修改自动生成的启动模板。因此,如果想要更加灵活,请务必在首次创建托管节点组时指定自定义节点组。
使用自己的启动模板部署托管节点组后,请使用同一启动模板的不同版本对其进行更新。将节点组更新为启动模板的其他版本时,将回收组中的所有节点,以匹配指定启动模板版本的新配置。无法直接更新不使用自定义启动模板的现有节点组。相反,您必须使用自定义启动模板创建新节点组才能执行此操作。
启动模板配置基础知识
您可以使用 Amazon Web Services Management Console、Amazon CLI 或Amazon开发工具包创建 Amazon EC2 Auto Scaling 启动模板。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的为 Auto Scaling 组创建启动模板。启动模板中的某些设置类似于用于托管节点配置的设置。使用启动模板部署或更新节点组时,必须在节点组配置或启动模板中指定某些设置。不要同时指定两个位置。如果某个设置出现在错误的位置,则创建或更新节点组之类的操作将失败。
下表列出启动模板中禁止的设置,还列出托管节点组配置中所需的类似设置(如果有)。列出的设置是显示在控制台中的设置。它们在 Amazon CLI 和开发工具包中可能具有相似但不同的名称。
启动模板 - 已禁止 | Amazon EKS 节点组配置 |
---|---|
Advanced details(高级详细信息)下的 IAM instance profile(IAM 实例配置文件) | Configure Node Group(配置节点组)页面 Node Group configuration(节点组配置)下的 Node IAM Role(节点 IAM 角色) |
Network interfaces(网络接口)(Add network interface(添加网络接口))下的Subnet(子网) | Specify networking(指定联网)页面 Node Group network configuration(节点组联网配置)下的 Subnets(子网) |
Advanced details(高级详细信息)下的 Shutdown behavior(关机行为)和 Stop - Hibernate behavior(停止 - 休眠行为)。在启动模板中,对于两个设置都保留默认的不包含在启动模板设置中。 | 无等效项 Amazon EKS 必须控制实例生命周期,而不是 Auto Scaling 组。 |
下表列出托管节点组配置中禁止的设置,还列出启动模板中所需的类似设置(如果有)。列出的设置是显示在控制台中的设置。它们在 Amazon CLI 和开发工具包中可能有类似的名称。
Amazon EKS 节点组配置 – 已禁止 | 启动模板 |
---|---|
(仅当您在启动模板中指定了自定义 AMI 时)Set compute and scaling configuration(设置计算和扩缩配置)页面上 Node Group compute configuration(节点组计算配置)下的 AMI type(AMI 类型)– 控制台显示 Specified in launch template(已在启动模板中指定)和指定的 AMI ID。 如果启动模板中没有指定 AMI 类型,则可以在节点组配置中选择 AMI。 |
Launch template contents(启动模板内容)下的 AMI – 如果您有以下任一要求,则必须指定 ID:
|
Set compute and scaling configuration(设置计算和扩展配置)页面上Node Group compute configuration(节点组计算配置)下的Disk size(磁盘大小) – 控制台显示Specified in launch template(已在启动模板中指定)。 | Storage (Volumes)(存储(卷))(Add new volume(添加新卷))下的 Size(大小)。您必须在启动模板中指定此项。 |
Specify Networking(指定网络)页面上 Node Group configuration(节点组配置)下的 SSH key pair(SSH 密钥对)– 控制台显示在启动模板中指定的密钥或显示 Not specified in launch template(未在启动模板中指定)。 | Key pair (login)(密钥对(登录))下的 Key pair name(密钥对名称。 |
在使用启动模板时,您无法指定允许远程访问的源安全组。 | 实例的 Network settings(网络设置)下的 Security groups(安全组),或者 Network interfaces(网络接口)(Add network interface(添加网络接口))下的 Security groups(安全组),但不能同时兼具。有关更多信息,请参阅 使用自定义安全组。 |
-
如果使用启动模板部署节点组,请在启动模板的 Launch template contents(启动模板内容)下指定 0 或 1 个 Instance type(实例类型)。您也可以为控制台 Set compute and scaling configuration(设置计算和扩缩配置)页面的 Instance types(实例类型)指定 0-20 个实例类型。或者,您可以使用其他使用 Amazon EKS API 的工具来执行此操作。如果您在启动模板中指定实例类型,并使用该启动模板部署节点组,则无法在控制台中或通过使用 Amazon EKS API 的其他工具指定任何实例类型。如果没有在启动模板、控制台中或通过使用 Amazon EKS API 的其他工具指定实例类型,则使用
t3.medium
实例类型。如果您的节点组使用 Spot 容量类型,我们建议您使用控制台指定多个实例类型。有关更多信息,请参阅 托管节点组容量类型。 -
如果部署到节点组的任何容器使用实例元数据服务版本 2,请确保在启动模板中将Metadata response hop limit(元数据响应跃点限制)设置为
2
。有关更多信息,请参阅适用于 Linux 的 Amazon EC2 用户指南 中的实例元数据和用户数据。如果在不使用自定义启动模板的情况下部署托管节点组,则会在默认启动模板中为节点组自动设置此值。
为 Amazon EC2 实例添加标签
您可以使用启动模板的 TagSpecification
参数来指定将哪些标签应用于节点组中的 Amazon EC2 实例。调用 CreateNodegroup
或 UpdateNodegroupVersion
API 的 IAM 实体必须具有 ec2:RunInstances
和 ec2:CreateTags
的权限,并且必须将标签添加到启动模板中。
使用自定义安全组
您可以使用启动模板指定自定义 Amazon EC2 安全组以应用到节点组中的实例。这可以在实例级安全组参数中,也可以作为网络接口配置参数的一部分。但是,您无法创建同时指定实例级安全组和网络接口安全组的启动模板。请考虑以下适用于为托管节点组使用自定义安全组的条件:
-
Amazon EKS 仅允许使用包含单个网络接口规范的启动模板。
-
预设情况下,Amazon EKS 将集群安全组应用于节点组中的实例,以便于节点和控制层面之间的通信。如果您使用前面提到的任一选项在启动模板中指定自定义安全组,则 Amazon EKS 不会添加集群安全组。因此,您必须确保安全组的入站和出站规则启用了与集群端点的通信。如果您的安全组规则不正确,则 worker 节点无法加入集群。有关安全组规则的更多信息,请参阅 Amazon EKS 安全组注意事项。
-
如果需要对节点组中的实例进行 SSH 访问,请确保包含允许该访问的安全组。
Amazon EC2 用户数据
启动模板包括自定义用户数据的部分。您可以在此部分为节点组指定配置设置,而无需手动创建单个自定义 AMI。有关 Botterocket 可用设置的更多信息,请参阅 GitHub 上的使用用户数据
在启动实例时,您可以使用 cloud-init
在启动模板中提供 Amazon EC2 用户数据。有关更多信息,请参阅 cloud-init 文档
启动模板中用于托管节点组的 Amazon EC2 用户数据必须采用 MIME 分段归档kubelet
的命令。这是作为 Amazon EKS 合并的用户数据的一部分执行的。某些 kubelet
参数(例如节点上的设置标签)可以直接通过托管节点组 API 进行配置。
如果需要高级 kubelet
自定义,包括手动启动或传入自定义配置参数,请参阅 指定 AMI。如果在启动模板中指定自定义 AMI ID,Amazon EKS 不会合并用户数据。
以下详细信息提供有关 Amazon Linux 或 Botlerocket 的用户数据部分的更多信息。
指定 AMI
如果您具有以下任一要求,请在启动模板的 imageId
字段中指定一个 AMI ID。选择您对其他信息的要求。
可以使用 eksctl
将参数传递给 bootstrap.sh
,无需指定启动模板。或者,您可以在启动模板的用户数据部分中指定信息来实现此目标。
有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的 Amazon Machine Images (AMI)。Amazon EKS AMI 构建规范包含用于构建基于 Amazon Linux 2 的自定义 Amazon EKS AMI 的资源和配置脚本。有关更多信息,请参阅 GitHub 上的 Amazon EKS AMI 构建规范
指定 AMI 时,Amazon EKS 不会合并任何用户数据。实际上,您要负责提供节点加入集群所需的 bootstrap
命令。如果您的节点无法加入集群,那么 Amazon EKS CreateNodegroup
和 UpdateNodegroupVersion
操作也会失败。
使用托管节点组指定 AMI ID 所涉及的限制和条件如下:
-
您必须创建一个新的节点组,以便在在启动模板中指定 AMI ID 和不指定 AMI ID 之间进行切换。
-
当有较新的 AMI 版本可用时,控制台中不会通知您。要将节点组更新为更新的 AMI 版本,需要使用更新的 AMI ID 创建新版本的启动模板。然后需要使用新的启动模板版本更新节点组。
-
如果您指定 AMI ID,则无法在 API 中设置以下字段:
-
amiType
-
releaseVersion
-
version
-
-
您无法指定 Windows AMI ID,因为 Windows 不可用在托管节点组中。