启动模板支持 - Amazon EKS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

启动模板支持

托管节点组始终使用 Amazon EC2 Auto Scaling 组启动模板进行部署。如果您未指定要在创建托管节点组时使用的自己的启动模板,则 Amazon EKS API 会在您的账户中使用默认值创建启动模板。通过从该模板创建您自己的启动模板和托管节点组,可以实现在部署托管节点时比默认启动模板更大的灵活性和自定义性级别。对于最高级别的自定义,您可以使用自己的启动模板和自定义 AMI 部署托管节点。

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

启动模板配置基础知识

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

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

禁用启动模板– Amazon EKS 节点组配置
IAM 实例配置文件高级详细信息下 配置节点组页面上的节点组配置下的 节点 IAM 角色
Network interfaces (网络接口) 下的 Subnet (子网)Add network interface (添加网络接口) Specify networking (指定联网) 页面上 Node Group network configuration (节点组网络配置) 下的 Subnets (子网)
Shutdown behavior ( 关闭行为)Stop - Hibernate behavior (停止 - 休眠行为) (位于 Advanced details (高级详细信息) 下)。将两个设置的启动模板保留为默认 Don't include in launch template setting (未包括在启动模板设置中) 没有等效函数。Amazon EKS 必须控制实例生命周期,而不是 Auto Scaling 组。

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

Amazon EKS 节点组配置 – 禁止 启动模板

(仅当您在启动模板中指定了自定义 AMI 时)Set compute and scaling configuration (设置计算和扩展配置) 页上的 Node Group compute configuration (节点组计算配置) 下的 AMI type (AMI 类型) 下显示 –Specified in launch template (在启动模板中指定) 和指定的 AMI ID。

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

AMI 中的 Launch template contents (启动模板内容) 则必须指定您是否使用自定义 AMI。–如果您指定的 AMI 不满足使用自定义 AMI中列出的要求,节点组部署将失败。
Set compute and scaling configuration (设置计算和扩展配置) 页面的 Node Group compute configuration (节点组计算配置) 下的 Disk size (磁盘大小) 下,– 控制台显示 Specified in launch template (在启动模板中指定) Size (大小) 下的 Storage (Volumes) (存储(卷))Add new volume (添加新卷))。您必须在启动模板中指定此项。
SSH key pair (位于 Specify Networking (指定联网) 页面的 Node Group configuration (节点组配置) 下)。控制台将显示在启动模板中指定的密钥或显示 –Not specified in launch template (未在启动模板中指定)。 Key pair (login) (密钥对(登录)) 下的 Key pair name (密钥对名称)
在使用启动模板时,您无法指定允许远程访问的源安全组。 安全组 (在 Network settings (网络设置) 下) 实例或 Network interfaces (网络接口)Add network interface (添加网络接口))下的 Security groups (安全组) (安全组),但不能同时用于二者。有关更多信息,请参阅 使用自定义安全组.
注意
  • 如果您使用启动模板部署节点组,则可以在启动模板的 Launch template contents (启动模板内容) 下指定零个或一个 Instance type (实例类型),或者,您可以在 控制台的 Set compute and scaling configuration (设置计算和扩展配置) 页面上为 Instance types (实例类型) 指定 0-20 实例类型,或者使用 API Amazon EKS API 的其他工具。如果您在启动模板中指定实例类型,然后使用该启动模板部署节点组,则无法在控制台中或使用 Amazon EKS API 的其他工具指定任何实例类型。如果未在启动模板、控制台或使用 Amazon EKS API 的其他工具中指定实例类型,则默认情况下使用 t3.medium 实例类型。如果您的节点组使用 Spot 容量类型,我们建议使用控制台指定多个实例类型。有关更多信息,请参阅 托管节点组容量类型.

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

标记 Amazon EC2 实例

您可以使用启动模板的 TagSpecification 参数指定要应用于节点组中的 Amazon EC2 实例的标签。调用 CreateNodegroupUpdateNodegroupVersion API 的 IAM 实体必须具有对 ec2:RunInstancesec2:CreateTags 的权限,并且标签必须添加到启动模板中。

使用自定义安全组

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

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

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

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

Amazon EC2 用户数据

在启动实例时,您可以使用 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)Amazon EC2 用户指南(适用于 Linux 实例)。AMI 构建规范包含用于基于 Amazon EKS 构建自定义 Amazon EKS AMI 的资源和配置脚本。Amazon Linux 2有关更多信息,请参阅 GitHub 上的 Amazon EKS AMI 生成规范。要构建与其他操作系统一起安装的自定义 AMI,请参阅 GitHub 上的 Amazon EKS 示例自定义 AMI

注意

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

要将自定义 AMI 与托管节点组结合使用,请在启动模板的 imageId 字段中指定 AMI ID。要将节点组更新为自定义 AMI 的较新版本,请使用更新的 AMI ID 创建启动模板的新版本,并使用新的启动模板版本更新节点组。

将自定义 AMI 用于托管节点组的限制

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

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

    • amiType

    • releaseVersion

    • version

  • 自定义 AMI 不能是 Windows,因为 Windows 不能用于托管节点组。