

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

# EKS 自动模式
<a name="automode"></a>

**提示**  
 [通过亚马逊 EKS 研讨会探索](https://aws-experience.com/emea/smb/events/series/get-hands-on-with-amazon-eks?trk=4a9b4147-2490-4c63-bc9f-f8a84b122c8c&sc_channel=el)最佳实践。

亚马逊 EKS 自动模式代表了 Kubernetes 基础设施管理的重大发展，它将安全和可扩展的集群基础设施与由 AWS 管理的集成 Kubernetes 功能相结合。该服务提供完全托管的工作节点操作，无需客户设置托管节点组或 AutoScaling 组。

关键架构区别在于，EKS 自动模式使用的 Karpenter-based 系统可自动配置 EC2 实例以响应 pod 请求。这些实例在Bottlerocket AMI上运行，并预先安装了诸如EBS CSI驱动程序之类的附加组件，从而使基础设施真正由AWS管理。与传统的缩放方法相比：
+ 传统集群自动扩缩器 (CAS) 需要手动管理节点组，并且只能为每个节点组创建具有单个实例类型的节点
+ Self-managed Karpenter 通过使用 EC2 Fleet API 提供更大的灵活性，可以预置不同的实例类型，但需要客户管理
+ EKS 自动模式通过托管 NodePools 和自动处理所有扩展操作 NodeClasses

新系统引入了多项操作改进：
+ Pod 驱动的自动扩展，无需手动配置节点组
+ Built-in ALB/NLB 基于 Ingress 资源自动创建的托管负载均衡器控制器
+ 集成的安全功能和预先配置的 Pod 身份
+ 自动替换的最大节点运行时间为 21 天

从成本角度来看，EKS 自动模式维持标准的 EC2 定价，同时仅为自动 Mode-managed 节点增加管理费。重要的是，客户仍然可以在同一个集群中混合使用自动模式托管节点和自管理节点。

尽管 AWS 负责大多数运营方面，但客户保留[集群版本管理的责任，](https://docs.aws.amazon.com/eks/latest/userguide/update-cluster.html)并且可以执行可控升级，从而触发工作节点的滚动更新。

## 使用自动模式的原因
<a name="_reasons_to_use_auto_mode"></a>

自动模式面向那些希望享受 Kubernetes 和 EKS 的好处，但需要最大限度地减少与 Kubernetes 相关的运营负担（例如升级）以及自动扩展、负载平衡和存储等关键平台部分 installation/maintenance 的运营负担的用户。自动模式使EKS在最大限度地减少与Kubernetes维护相关的无差异繁重工作方面又向前迈进了一步

## 常见问题解答
<a name="_faq"></a>

### EKS 自动模式和开源 Karpenter 有什么区别？
<a name="_what_is_the_difference_between_eks_auto_mode_and_open_source_karpenter"></a>

EKS 自动模式是一套大型功能，使运行生产级 Kubernetes 变得简单。这些功能之一是完全托管的Karpenter的自动扩展优势。从操作的角度来看，唯一的区别是在 EKS 自动模式下，您无需管理 Karpenter pod 本身的部署、扩展和升级。所有其他操作，例如托管操作，其 NodePools 运行方式 NodeClasses与开源Karpenter相同。

### 我可以与 Auto 节点一起运行托管 Mode-managed 节点组吗？
<a name="_can_i_run_managed_node_groups_alongside_auto_mode_managed_nodes"></a>

是的，您可以在同一个集群中与 Auto Mode-managed 节点一起运行托管节点组。当您从托管节点组迁移到 EKS 自动模式时，这种方法很常见。有关更多信息，请参阅在现有 EKS 集群上[启用 EKS 自动模式](https://docs.aws.amazon.com/eks/latest/userguide/migrate-auto.html)。

### 我可以将集群从标准 EKS 迁移到 EKS 自动模式吗？
<a name="_can_i_migrate_a_cluster_from_standard_eks_to_eks_auto_mode"></a>

是的，可以在官方 A [ WS 文档中找到在现有集群上启用 EKS 自动模式的说明 ](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) 

注意事项：1. 启用自动模式后，您需要卸载已安装的所有现在由自动模式管理的组件，例如 Karpenter 或 AWS 负载均衡器控制器 2。你需要确保你安装的插件是最新的。参见文档。

### 如何 NodePools 在 EKS 自动模式下进行配置？
<a name="_how_do_i_configure_nodepools_in_eks_auto_mode"></a>

新集群将预先配置两个 NodePools

#### 通用
<a name="_general_purpose"></a>

![一般用途 NodePool](http://docs.aws.amazon.com/zh_cn/eks/latest/best-practices/images/autoscaling/gp_nodepool.png)


这 NodePool 会指示 Karpenter 启动具有以下特征的节点：

1. “按需” 的容量类型

1. C、M 或 R 的实例类型

1. 生成 4 个实例

1. AMD 架构

1. Linux OS

它还通过声明在任何给定时间都只有 10% 的节点可能处于中断状态，并且只有在节点空置或未得到充分利用时才应进行整合，从而定义了向下扩展逻辑。

#### 系统
<a name="_system"></a>

![系统 NodePool](http://docs.aws.amazon.com/zh_cn/eks/latest/best-practices/images/autoscaling/system_nodepool.png)


除了以下区别外， NodePool 这与 “通用型” 类似：

1. 它允许节点采用 ARM 架构和 AMD 架构

1. 除非可以容忍 “CriticalAddonsOnly”， NoSchedule 否则它会用 a 污染这些节点。这供 EKS 插件内部使用

#### 自定义
<a name="_custom"></a>

您可以 NodePools 根据需要创建自己的自定义。要了解更多信息，NodePools 请查阅 [ Karpenter 文档。](https://karpenter.sh/docs/concepts/nodepools/)

### 启动新节点时，我可以自定义自动模式使用的 AMI 吗？
<a name="_can_i_customize_the_ami_used_by_auto_mode_when_new_nodes_are_launched"></a>

不，目前唯一支持的 AMI 适用于 Bottlerocket Amazon-provided 

### 如何在我的 Kubernetes 主机上安装自定义工具或代理？
<a name="_how_can_i_install_custom_tooling_or_agents_on_my_kubernetes_hosts"></a>

由于不支持 AMI 自定义，因此如果您需要主机级软件来执行安全扫描等操作，则应将工作负载部署为 Kubernetes。[ DaemonSet ](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/)

### 当我配置新的 EKS 自动模式集群时，我的集群数据平面中正在运行哪些组件？
<a name="_what_components_are_running_in_my_cluster_data_plane_when_i_provision_a_new_eks_auto_mode_cluster"></a>

如果您使用 eksctl 或 AWS 控制台创建集群，则在 EKS 自动模式集群中运行的唯一容器是 Kubernetes Metrics Server 容器。EKS 自动模式的其他组件，例如 Karpenter、AWS 负载均衡器控制器和 EBS CSI 驱动程序，都在集群外运行和管理。

### 正在运行哪些托管组件来支持我的新 EKS 自动模式集群？
<a name="_what_managed_components_are_running_to_support_my_new_eks_auto_mode_cluster"></a>

EKS 自动模式可完全自动部署生产级 Kubernetes 所需的大部分数据平面。这包括：
+ Karpenter，用于自动扩展集群的计算
+ AWS 负载均衡器控制器允许您通过自动的弹性负载均衡器集成轻松公开 Kubernetes 服务
+ VPC CNI
+ 集群 DNS
+ kube-proxy
+ EBS CSI
+ EKS 容器组身份代理
+ EKS 节点监控代理

### 如何对曾经在我的集群中以 Pod 形式运行的自动模式组件进行故障排除？
<a name="_how_do_i_troubleshoot_the_components_of_auto_mode_that_used_to_run_as_pods_in_my_cluster"></a>

使用 EKS 自动模式，AWS 负载均衡器控制器和 Karpenter 等许多组件都是在集群之外为您管理的，因此您无法像自我管理时那样查看日志。如果您需要对某项自动模式功能的功能进行故障排除，请创建 AWS 支持票证。