

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# Amazon EKS 附加组件
<a name="eks-add-ons"></a>

附加组件是为 Kubernetes 应用程序提供辅助操作功能的软件，但并不特定于应用程序。这包括可观测性代理或 Kubernetes 驱动程序等软件，这些软件允许集群与用于联网、计算和存储的基础 AWS 资源进行交互。附加组件软件通常由 Kubernetes 社群、AWS 等云提供商或第三方供应商构建和维护。Amazon EKS 会自动为每个集群安装自主管理型附加组件，例如适用于 Kubernetes 的 Amazon VPC CNI 插件、`kube-proxy` 以及 CoreDNS。请注意，VPC CNI 附加组件与 Amazon EKS 混合节点功能不兼容，也不会部署到混合节点。您可以更改附加组件的默认配置并在需要时加以更新。

Amazon EKS 附加组件为 Amazon EKS 集群的一组经策管附加组件提供安装和管理。Amazon EKS 附加组件包含最新的安全补丁、错误修复，并经 AWS 验证能够与 Amazon EKS 一起使用。Amazon EKS 附加组件允许您始终如一地确保您的 Amazon EKS 集群安全稳定，并减少您在安装、配置和更新上所需执行的工作量。如果是类似于 `kube-proxy` 的自我管理附加组件，若已在您的集群上运行并且可作为 Amazon EKS 附加组件使用，那么您便可以安装 `kube-proxy` Amazon EKS 加载项开始享受 Amazon EKS 附加组件的功能所带来的益处。

您可以通过 Amazon EKS API 为 Amazon EKS 附加组件更新特定的 Amazon EKS 托管配置字段。在附加组件启动后，您还可以直接在 Kubernetes 集群中修改并非由 Amazon EKS 管理的配置字段，包括在适用时为附加组件定义特定的配置字段。Amazon EKS 不会覆盖您所做的这些更改。使用 Kubernetes 服务器端应用功能可以实现这一点。有关更多信息，请参阅 [确定可以为 Amazon EKS 附加组件自定义的字段](kubernetes-field-management.md)。

您可以将 Amazon EKS 附加组件与任何 Amazon EKS 节点类型配合使用。有关更多信息，请参阅 [使用节点来管理计算资源](eks-compute.md)。

您可以使用 Amazon EKS API、AWS 管理控制台、AWS CLI 和 `eksctl` 添加、更新或删除 Amazon EKS 附加组件。您也可以使用 [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-addon.html) 创建 Amazon EKS 附加组件。

## 注意事项
<a name="eks-add-ons-considerations"></a>

使用 Amazon EKS 附加组件时应注意以下几点：
+ 要为集群配置附加组件，您的 [IAM 主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)必须具有 IAM 权限，以使用附加组件。如需了解更多信息，请参阅 [Amazon Elastic Kubernetes Service 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelastickubernetesservice.html#amazonelastickubernetesservice-actions-as-permissions) 中的名称中带有 `Addon` 的操作。
+ Amazon EKS 附加组件能在您为集群预置或配置的节点上运行。节点类型包括 Amazon EC2 实例 、Fargate 和混合节点。
+ 您可以修改并非由 Amazon EKS 管理的字段以自定义 Amazon EKS 附加组件的安装。有关更多信息，请参阅 [确定可以为 Amazon EKS 附加组件自定义的字段](kubernetes-field-management.md)。
+ 如果使用 AWS 管理控制台 创建集群，则 Amazon EKS `kube-proxy`、适用于 Kubernetes 的 Amazon VPC CNI 插件和 CoreDNS Amazon EKS 附加组件会自动添加到集群中。如果您借助 `eksctl` 使用 `config` 文件创建集群，则 `eksctl` 还可以使用 Amazon EKS 附加组件创建集群。如果使用不带 `config` 文件的 `eksctl` 或使用任何其他工具创建集群，则会安装自主管理型 `kube-proxy`、适用于 Kubernetes 的 Amazon VPC CNI 插件和 CoreDNS 附加组件，不会安装 Amazon EKS 附加组件。您可以自行管理，也可以在集群创建后手动添加 Amazon EKS 附加组件。无论您使用哪种方法创建集群，VPC CNI 附加组件都不会安装到混合节点上。
+ `eks:addon-cluster-admin` `ClusterRoleBinding` 将 `cluster-admin` `ClusterRole` 绑定到 `eks:addon-manager` Kubernetes 身份。该角色拥有 `eks:addon-manager` 身份所需的权限，可以创建 Kubernetes 命名空间并将附加组件安装到命名空间中。如果删除 `eks:addon-cluster-admin` `ClusterRoleBinding`，Amazon EKS 集群将继续运行，但 Amazon EKS 将无法再管理任何附加组件。以下平台版本开头的所有集群都使用新的 `ClusterRoleBinding`。
+ AWS 提供的部分 EKS 附加组件经过验证，可以与 Amazon EKS 混合节点功能兼容。有关更多信息，请参阅 [AWS 附加组件](workloads-add-ons-available-eks.md)中的兼容性表。

## 附加组件的自定义命名空间
<a name="custom-namespace"></a>

对于社区和 AWS 附加组件，您可以选择在创建附加组件时指定自定义命名空间。在特定命名空间中安装附加组件后，必须移除并重新创建该附加组件才能更改其命名空间。

如果您未指定命名空间，它将使用附加组件的预定义命名空间。

使用自定义命名空间可以更好地组织和隔离 EKS 集群中的附加组件对象。这种灵活性有助于您将附加组件与您的运营需求和现有命名空间策略保持一致。

您可以在创建附加组件时设置自定义命名空间。有关更多信息，请参阅 [创建 Amazon EKS 附加组件](creating-an-add-on.md)。

### 获取附加组件的预定义命名空间
<a name="_get_predefined_namespace_for_add_on"></a>

如果您不指定，附加组件的预定义命名空间就是它将安装到的命名空间。

要获取附加组件的预定义命名空间，请使用以下命令：

```
aws eks describe-addon-versions --addon-name <addon-name> --query "addons[].defaultNamespace"
```

输出示例：

```
[
    "kube-system"
]
```

## Amazon EKS 自动模式的注意事项
<a name="addon-consider-auto"></a>

Amazon EKS 自动模式包含了若干提供基本集群功能的功能，包括：
+ 容器组联网
+ 服务联网
+ 集群 DNS
+ 自动扩缩
+ 数据块存储
+ 负载均衡器控制器
+ 容器组身份代理
+ 节点监控代理

使用自动模式计算时，许多常用的 EKS 附加组件都变得多余，例如：
+ Amazon VPC CNI
+ kube-proxy
+ CoreDNS
+ Amazon EBS CSI 驱动程序
+ EKS 容器组身份代理

但是，如果集群将自动模式与其他计算选项（例如自主管理型 EC2 实例、托管式节点组或 AWS Fargate）结合使用，则这些附加组件仍然是必需的。AWS 使用反亲和性规则增强了 EKS 附加组件，可自动确保附加组件容器组仅在支持的计算类型上进行调度。此外，用户现在可以利用 EKS 附加组件 `DescribeAddonVersions` API，来验证每个附加组件及其特定版本支持的计算类型。此外，使用 EKS 自动模式时，上面列出的控制器是在 AWS 拥有的基础设施上运行的。因此，您可能不会在账户中看到这些控制器，除非您在其他类型的计算中使用 EKS 自动模式，对于后一种情况，您会看到在集群上安装的控制器。

如果您计划在现有集群上启用 EKS 自动模式，则可能需要升级某些附加组件的版本。有关更多信息，请参阅 EKS 自动模式的[必需的附加组件版本](auto-enable-existing.md#auto-addons-required)。

## 支持
<a name="addon-support"></a>

 AWS 会发布具有不同支持级别的多种附加组件。
+  **AWS 附加组件：**此类附加组件由 AWS 构建并提供全面支持。
  + 将 AWS 附加组件与其他 AWS 服务配合使用，例如 Amazon EFS。
  + 有关更多信息，请参阅 [AWS 附加组件](workloads-add-ons-available-eks.md)。
+  **AWS Marketplace 附加组件：**此类附加组件经 AWS 扫描并由独立的 AWS 合作伙伴提供支持。
  + 使用 Marketplace 附加组件可为集群添加重要的复杂功能，例如使用 Splunk 进行监控。
  + 有关更多信息，请参阅 [AWS Marketplace 附加组件](workloads-add-ons-available-vendors.md)。
+  **社区附加组件**：此类附加组件由 AWS 扫描，但由开源社区提供支持。
  + 使用社区附加组件可降低安装常用开源软件（例如 Kubernetes Metrics Server）的复杂性。
  + 社区附加组件由 AWS 基于源代码进行打包。AWS 仅针对社区附加组件的版本兼容性进行验证。
  + 有关更多信息，请参阅 [社区附加组件](community-addons.md)。

下表详细说明了每种附加组件类型的支持范围：


| 类别 | 功能 |  AWS 附加组件 |  AWS Marketplace 附加组件 | 社区附加组件 | 
| --- | --- | --- | --- | --- | 
|  开发  |  由 AWS 构建   |  是  |  否  |  是  | 
|  开发  |  经 AWS 验证   |  是  |  否  |  是\$1  | 
|  开发  |  经 AWS 合作伙伴验证  |  否  |  是  |  否  | 
|  维护  |  经 AWS 扫描   |  支持  |  是  |  是  | 
|  维护  |  由 AWS 修补   |  是  |  否  |  是  | 
|  维护  |  由 AWS 合作伙伴修补  |  否  |  是  |  否  | 
|  分配  |  由 AWS 发布   |  是  |  否  |  是  | 
|  分配  |  由 AWS 合作伙伴发布  |  否  |  是  |  否  | 
|  支持  |  由 AWS 提供基本安装支持   |  支持  |  是  |  是  | 
|  支持  |  AWS 提供全面支持  |  是  |  否  |  否  | 
|  支持  |  AWS 合作伙伴提供全面支持  |  否  |  是  |  否  | 

 `*`：社区附加组件的验证仅包括 Kubernetes 版本兼容性。例如，如果您在集群上安装了社区附加组件，则 AWS 会检查其是否与集群的 Kubernetes 版本兼容。

 AWS Marketplace 附加组件可能会从 AWS 之外的来源下载其他软件依赖项。这些外部依赖项未经 AWS 扫描或验证。在部署会获取外部依赖项的 AWS Marketplace 附加组件时，请注意您的安全要求。