自定义 AMI 支持 - Eksctl 用户指南

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

自定义 AMI 支持

设置节点 AMI ID

--node-ami标志支持许多高级用例,例如使用自定义 AMI 或实时查询 AWS 以确定要使用哪个 AMI。该标志可用于非 GPU 和 GPU 映像。

该标志可以获取要明确使用的图像的 AMI 图像 ID。它也可以使用以下 “特殊” 关键字:

Keyword 描述

自动

表示应通过查询 AWS 来找到用于节点的 AMI EC2。这与 auto 解析器有关。

auto-ssm

表示应通过查询 AWS SSM Parameter Store 来找到用于节点的 AMI。

注意

设置--node-ami为 ID 字符串时,eksctl将假设已请求自定义 AMI。对于 AmazonLinux 2 和 Ubuntu 节点(包括 EKS 托管和自我管理),这意味着overrideBootstrapCommand这是必需的。 AmazonLinux2023 年,由于它停止使用/etc/eks/bootstrap.sh脚本进行节点引导,因此不支持使用 nodeadm 初始化过程(欲了解更多信息,请参阅节点引导文档)。overrideBootstrapCommand

CLI 标志示例:

eksctl create cluster --node-ami=auto # with a custom ami id eksctl create cluster --node-ami=ami-custom1234

Config 文件示例:

nodeGroups: - name: ng1 instanceType: p2.xlarge amiFamily: AmazonLinux2 ami: auto - name: ng2 instanceType: m5.large amiFamily: AmazonLinux2 ami: ami-custom1234 managedNodeGroups: - name: m-ng-2 amiFamily: AmazonLinux2 ami: ami-custom1234 instanceType: m5.large overrideBootstrapCommand: | #!/bin/bash /etc/eks/bootstrap.sh <cluster-name>

--node-ami标志也可以与一起使用eksctl create nodegroup

设置节点 AMI 系列

--node-ami-family可以采用以下关键字:

Keyword 描述

AmazonLinux2

表示应使用基于亚马逊 Linux 2 的 EKS AMI 镜像(默认)。

AmazonLinux2023

表示应使用基于亚马逊 Linux 2023 的 EKS AMI 镜像。

Ubuntu2004

表示应使用基于 Ubuntu 20.04 LTS(Focal)的 EKS AMI 镜像(EKS 1.29 支持)。

UbuntuPro2004

表示应使用基于 Ubuntu Pro 20.04 LTS(Focal)的 EKS AMI 图像(适用于 >= 1.27、1.29 的 EKS)。

Ubuntu2204

表示应使用基于 Ubuntu 22.04 LTS (Jammy) 的 EKS AMI 镜像(适用于 >= 1.29 的 EKS)。

UbuntuPro2204

表示应使用基于 Ubuntu Pro 22.04 LTS(Jammy)的 EKS AMI 镜像(适用于 >= 1.29 的 EKS)。

Ubuntu2404

表示应使用基于 Ubuntu 24.04 LTS(Noble)的 EKS AMI 镜像(适用于 >= 1.31 的 EKS)。

UbuntuPro2404

表示应使用基于 Ubuntu Pro 24.04 LTS(Noble)的 EKS AMI 镜像(适用于 >= 1.31 的 EKS)。

Bottlerocket

表示应使用基于 Bottlerocket 的 EKS AMI 镜像。

WindowsServer2019 FullContainer

表示应使用基于 Windows Server 2019 完整容器的 EKS AMI 镜像。

WindowsServer2019 CoreContainer

表示应使用基于 Windows Server 2019 核心容器的 EKS AMI 镜像。

WindowsServer2022 FullContainer

表示应使用基于 Windows Server 2022 完整容器的 EKS AMI 镜像。

WindowsServer2022 CoreContainer

表示应使用基于 Windows Server 2022 核心容器的 EKS AMI 镜像。

CLI 标志示例:

eksctl create cluster --node-ami-family=AmazonLinux2

Config 文件示例:

nodeGroups: - name: ng1 instanceType: m5.large amiFamily: AmazonLinux2 managedNodeGroups: - name: m-ng-2 instanceType: m5.large amiFamily: Ubuntu2204

--node-ami-family标志也可以与一起使用eksctl create nodegroupeksctl每当使用自定义 AMI 时,都需要通过配置文件或 --node-ami-family CLI 标志明确设置 AMI 系列。

注意

目前,EKS 托管节点组在使用自定义节点组时仅支持以下 AMI 系列 AMIs:AmazonLinux2023AmazonLinux2、和 Ubuntu1804 Ubuntu2004 Ubuntu2204

Windows 自定义 AMI 支持

只有自我管理的 Windows 节点组才能指定自定义 AMI。 amiFamily应设置为有效的 Windows AMI 系列。

以下 PowerShell 变量将可供引导脚本使用:

$EKSBootstrapScriptFile
$EKSClusterName
$APIServerEndpoint
$Base64ClusterCA
$ServiceCIDR
$KubeletExtraArgs
$KubeletExtraArgsMap: A hashtable containing arguments for the kubelet, e.g., @{ 'node-labels' = ''; 'register-with-taints' = ''; 'max-pods' = '10'}
$DNSClusterIP
$ContainerRuntime

Config 文件示例:

nodeGroups: - name: custom-windows amiFamily: WindowsServer2022FullContainer ami: ami-01579b74557facaf7 overrideBootstrapCommand: | & $EKSBootstrapScriptFile -EKSClusterName "$EKSClusterName" -APIServerEndpoint "$APIServerEndpoint" -Base64ClusterCA "$Base64ClusterCA" -ContainerRuntime "containerd" -KubeletExtraArgs "$KubeletExtraArgs" 3>&1 4>&1 5>&1 6>&1

Bottlerocket 自定义 AMI 支持

对于 Bottlerocket 节点,overrideBootstrapCommand不支持。相反,要指定自己的引导容器,应使用该bottlerocket字段作为配置文件的一部分。例如,

nodeGroups: - name: bottlerocket-ng ami: ami-custom1234 amiFamily: Bottlerocket bottlerocket: enableAdminContainer: true settings: bootstrap-containers: bootstrap: source: <MY-CONTAINER-URI>