

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

# 自定义 AMI 支持
<a name="custom-ami-support"></a>

## 设置节点 AMI ID
<a name="_setting_the_node_ami_id"></a>

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

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


| Keyword | 说明 | 
| --- | --- | 
|  自动  |  表示应通过查询 AWS EC2 来找到用于节点的 AMI。这与 auto 解析器有关。  | 
|  auto-ssm  |  表示应通过查询 AWS SSM Parameter Store 来找到用于节点的 AMI。  | 

**注意**  
目前，EKS 托管节点组在使用自定义节点组时仅支持以下 AMI 系列 AMIs：`AmazonLinux2023`、、`AmazonLinux2`、`Bottlerocket``Ubuntu2004`、和 `UbuntuPro2004` `Ubuntu2204` `Ubuntu2404` 

设置`--node-ami`为 ID 字符串时，`eksctl`将假设已请求自定义 AMI。对于 AmazonLinux 2 和 Ubuntu 节点（包括 EKS 托管和自我管理），这意味着`overrideBootstrapCommand`这是必需的。 AmazonLinux2023 年，由于它停止使用`/etc/eks/bootstrap.sh`脚本进行节点引导，因此不支持使用 nodeadm 初始化过程（欲了解更多信息，请参阅[节点引导文档](https://github.com/eksctl-io/eksctl/blob/main/pkg/nodebootstrap/README.md)）。`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 系列
<a name="_setting_the_node_ami_family"></a>

`--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 nodegroup`。 `eksctl`每当使用自定义 AMI 时，都需要通过配置文件或 `--node-ami-family` CLI 标志明确设置 AMI 系列。

**注意**  
目前，EKS 托管节点组在使用自定义节点组时仅支持以下 AMI 系列 AMIs：`AmazonLinux2023`、、`AmazonLinux2`、`Bottlerocket``Ubuntu2004`、和 `UbuntuPro2004` `Ubuntu2204` `Ubuntu2404` 

## Windows 自定义 AMI 支持
<a name="_windows_custom_ami_support"></a>

只有自我管理的 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 支持
<a name="_bottlerocket_custom_ami_support"></a>

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

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