

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

# AWS.Compute.EKSManagedNode
<a name="node-eks-managed-node"></a>

AWS TNB 支持 EKS 托管节点组，以自动为亚马逊 EKS Kubernetes 集群配置节点（Amazon 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\_type: String
        ami\_id: String
        instance\_types: List
        key\_pair: String
        root\_volume\_encryption: Boolean
        root\_volume\_encryption\_key\_arn: String
        root\_volume\_size: Integer 
    scaling:
      properties:
        desired\_size: Integer
        min\_size: Integer
        max\_size: Integer       
  properties:
    node\_role: String
    tags: List
    kubernetes\_version: String        
  requirements:
    cluster: String
    subnets: List
    network\_interfaces: List
    security\_groups: List
    placement\_group: String
    user\_data: String
    labels: List
```

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

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

 `ami_type`    
亚马逊 EKS-supported AMI 类型。  
是否必需：是  
类型：字符串  
可能的值：`AL2_x86_64`\| `AL2_x86_64_GPU` \| `AL2_ARM_64` \| `AL2023_x86_64` \| `AL2023_ARM_64` \| `AL2023_x86_64_NVIDIA` \| `AL2023_x86_64_NEURON` \| \| `CUSTOM` \| `BOTTLEROCKET_ARM_64` \| `BOTTLEROCKET_x86_64` \| `BOTTLEROCKET_ARM_64_NVIDIA` \| `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`为假，则不包括`root_volume_encryption_key_arn`。
+ AWS TNB 支持 Amazon EBS-backed 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>`扩展`

定义 Amazon EKS 托管节点组扩缩参数的属性，例如节点组中所需的 Amazon EC2 实例数量以及 Amazon EC2 实例的最少和最多数量。

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

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

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

## Properties
<a name="node_eks_managed_node-properties"></a>

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

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

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

## 要求
<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`，如果您在节点中包含该属性，则 AWS TNB 将从该`multus_role`属性获取与 ENI 相关的权限。`multus` [AWS.Compute.EKS](https://docs.aws.amazon.com/tnb/latest/ug/node-eks.html)否则， AWS TNB 将从 [node\_role](#node_eks_managed_node_node_role) 属性中获取与 ENI 相关的权限。  
必需：否  
类型：列表

 `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\_role。  
必需：否  
类型：字符串

 `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"
```