

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

# AWS.Compute。 EKSManaged节点
<a name="node-eks-managed-node"></a>

AWS TNB 支持 EKS 托管节点组，以自动为 Amazon EKs Kubernetes 集群配置节点（亚马逊 EC2 实例）和进行生命周期管理。要创建 EKS 节点组，请执行以下操作：
+ 通过提供 AMI 的 ID 或 AMI 类型，为您的集群工作节点选择亚马逊系统映像 (AMI)。
+ 提供用于 SSH 访问的 Amazon EC2 密钥对以及节点组的扩展属性。
+ 确保您的节点组与 Amazon EKS 集群相关联。
+ 为工作节点提供子网。
+ 或者，将安全组、节点标签和置放群组附加到您的节点组。

## 语法
<a name="node-eks-managed-node-syntax"></a>

```
tosca.nodes.AWS.Compute.EKSManagedNode:
  capabilities:
    compute:
      properties:
        ami\$1type: String
        ami\$1id: String
        instance\$1types: List
        key\$1pair: String
        root\$1volume\$1encryption: Boolean
        root\$1volume\$1encryption\$1key\$1arn: String
        root\$1volume\$1size: Integer 
    scaling:
      properties:
        desired\$1size: Integer
        min\$1size: Integer
        max\$1size: Integer       
  properties:
    node\$1role: String
    tags: List
    kubernetes\$1version: String        
  requirements:
    cluster: String
    subnets: List
    network\$1interfaces: List
    security\$1groups: List
    placement\$1group: String
    user\$1data: String
    labels: List
```

## 功能
<a name="node-eks-managed-node-capabilities"></a><a name="node_eks_managed_node_compute"></a>`compute`

定义 Amazon EKS 托管节点组计算参数的属性，例如亚马逊 EC2 实例类型和亚马逊 EC2 实例 AMIs。

 `ami_type`    
亚马逊 EKS 支持的 AMI 类型。  
必需：是  
类型：字符串  
可能的值：`AL2_x86_64`\$1 `AL2_x86_64_GPU` \$1 `AL2_ARM_64` \$1 `AL2023_x86_64` \$1 `AL2023_ARM_64` \$1 `AL2023_x86_64_NVIDIA` \$1 `AL2023_x86_64_NEURON` \$1 \$1 `CUSTOM` \$1 `BOTTLEROCKET_ARM_64` \$1 `BOTTLEROCKET_x86_64` \$1 `BOTTLEROCKET_ARM_64_NVIDIA` \$1 `BOTTLEROCKET_x86_64_NVIDIA`

 `ami_id`    
AMI 的 ID。  
必需：否  
类型：字符串  
如果模板中同时指定了`ami_type`和`ami_id`，则 AWS TNB 将仅使用该`ami_id`值来创建`EKSManagedNode`。

 `instance_types`    
实例大小。  
必需：是  
类型：列表

 `key_pair`    
启用 SSH 访问的密 EC2 钥对。  
必需：是  
类型：字符串

 `root_volume_encryption`    
为亚马逊 EBS 根卷启用亚马逊 EBS 加密。如果未提供此属性，则 AWS TNB 会默认加密 Amazon EBS 根卷。  
必需：否  
默认：True  
类型：布尔值

 `root_volume_encryption_key_arn`    
密钥的 ARN。 AWS KMS AWS TNB 支持常规密钥 ARN、多区域密钥 ARN 和别名 ARN。  
必需：否  
类型：字符串  
+ 如果`root_volume_encryption`为 false，则不包含`root_volume_encryption_key_arn`。
+ AWS TNB 支持对亚马逊 EBS 支持的 AMI 进行根卷加密。
+ 如果 AMI 的根卷已加密，则必须包括`root_volume_encryption_key_arn`以便 AWS TNB 重新加密根卷。
+  如果 AMI 的根卷未加密， AWS TNB `root_volume_encryption_key_arn` 将使用加密根卷。

  如果不包括`root_volume_encryption_key_arn`， AWS TNB 将使用提供的默认密钥 AWS Key Management Service 对根卷进行加密。
+ AWS TNB 不会解密加密的 AMI。

 `root_volume_size`    
Amazon Elastic Block Store 根卷的大小 GiBs。  
必需：否  
默认值：20  
类型：整数  
可能的值：1 到 16,384<a name="node_eks_managed_node_scaling"></a>`scaling`

定义 Amazon EKS 托管节点组扩展参数的属性，例如所需的亚马逊 EC2 实例数量以及节点组中亚马逊 EC2 实例的最小和最大数量。

 `desired_size`    
此中的实例数量 NodeGroup。  
必需：是  
类型：整数

 `min_size`    
此中的最小实例数 NodeGroup。  
必需：是  
类型：整数

 `max_size`    
此中的最大实例数 NodeGroup。  
必需：是  
类型：整数

## 属性
<a name="node_eks_managed_node-properties"></a>

 `node_role`    
附加到亚马逊 EC2 实例的 IAM 角色的 ARN。  
必需：是  
类型：字符串

 `tags`    
要附加到资源的标签。  
必需：否  
类型：列表

 `kubernetes_version`    
托管节点组的 Kubernetes 版本。 AWS TNB 支持 Kubernetes 版本 1.25 到 1.32。请考虑以下事项：  
+ 指定`kubernetes_version`或`ami_id`。请勿指定此两者。
+ `kubernetes_version`必须小于或等于 AWS.Compute。 EKSManaged节点版本。
+  AWS.Compute 之间可能有 3 个版本的差异。 EKSManaged节点版本和`kubernetes_version`。
+ 如果未指定`kubernetes_version`或`ami_id`， AWS TNB 将使用该`AWS.Compute.EKSManagedNode`版本的最新 AMI 来创建 `EKSManagedNode`
必需：否  
类型：字符串  
可能的值：1.25 \$1 1.26 \$1 1.27 \$1 1.28 \$1 1.29 \$1 1.30 \$1 1.31 \$1 1.32

## 要求
<a name="node-eks-managed-node-requirements"></a>

 `cluster`    
一个 [AWS.Compute.EKS](node-eks.md) 节点。  
必需：是  
类型：字符串

 `subnets`    
一个 [AWS.Networking.Subnet](node-subnet.md) 节点。  
必需：是  
类型：列表

 `network_interfaces`    
一个 [AWS.Networking.ENI](node-eni.md) 节点。确保将网络接口和子网设置为相同的可用区，否则实例化将失败。  
设置后`network_interfaces`，如果您在 a [w](https://docs.aws.amazon.com/tnb/latest/ug/node-eks.html) s.Compute.eks 节点中包含了该`multus_role`属性，则 AWS TNB 将 ENIs 从该`multus`属性获得与相关的权限。否则， AWS TNB 将 ENIs 从 n [od](#node_eks_managed_node_node_role) e\$1role 属性中获取与相关的权限。  
必需：否  
类型：列表

 `security_groups`    
一个 [AWS.Networking SecurityGroup](node-networking-security-group.md)节点。  
必需：否  
类型：列表

 `placement_group`    
一个 [tosca.nodes。AWS.Compute。 PlacementGroup](node-compute-placement-group.md)节点。  
必需：否  
类型：字符串

 `user_data`    
一个 [tosca.nodes。AWS.Compute。 UserData](node-compute-user-data.md)节点引用。用户数据脚本将传递给托管节点组启动的 Amazon EC2 实例。将运行自定义用户数据所需的权限添加到传递给节点组的 node\$1role。  
必需：否  
类型：字符串

 `labels`    
节点标签列表。节点标签必须有名称和值。使用以下标准创建标签：  
+ 名称和值必须用分隔`=`。
+ 名称和值的长度最多可为 63 个字符。
+ 标签可以包含字母（A-Z、a-z、）、数字（0-9）和以下字符：`[-, _, ., *, ?]`
+ 名称和值必须以字母数字`?`、或`*`字符开头和结尾。
例如，`myLabelName1=*NodeLabelValue1`  
必需：否  
类型：列表

## 示例
<a name="node-eks-managed-node-example"></a>

```
SampleEKSManagedNode:
  type: tosca.nodes.AWS.Compute.EKSManagedNode
  capabilities:
    compute:
      properties:
        ami_type: "AL2_x86_64"
        instance_types:
          - "t3.xlarge"
        key_pair: "SampleKeyPair"
        root_volume_encryption: true
        root_volume_encryption_key_arn: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        root_volume_size: 1500    
    scaling:
      properties:
        desired_size: 1
        min_size: 1
        max_size: 1
  properties:
    node_role: "arn:aws:iam::${AWS::TNB::AccountId}:role/SampleRole"
    tags:
      - "Name=SampleVPC"
      - "Environment=Testing" 
    kubernetes_version:
      - "1.30" 
  requirements:
    cluster: SampleEKS
    subnets:
      - SampleSubnet
    network_interfaces:
      - SampleENI01
      - SampleENI02
    security_groups:
      - SampleSecurityGroup01
      - SampleSecurityGroup02
    placement_group: SamplePlacementGroup
    user_data: CustomUserData
    labels:
      - "sampleLabelName001=sampleLabelValue001"
      - "sampleLabelName002=sampleLabelValue002"
```