

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

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

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

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

架构的关键区别在于，EKS Auto Mode 使用的 Karpenter-based 系统会自动预置 EC2 实例以响应 pod 请求。这些实例在 Bottlerocket AMI 上运行，预装了诸如 EBS CSI 驱动程序之类的附加组件，从而使基础设施真正由 AWS 管理。与传统的缩放方法相比：
+ 传统的集群自动扩缩器 (CAS) 需要手动管理节点组，并且只能为每个节点组创建具有单一实例类型的节点
+ Self-managed Karpenter 通过使用 EC2 队列 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>

是的，您可以通过托管节点组运行静态节点，同时还可以在自动模式下提供的自动缩放节点旁边运行

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

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

注意事项：1. 启用自动模式后，您需要卸载已安装的所有现在由自动模式管理的组件，例如 Karpenter 或 AWS Load Balancer Controller 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 否则它会用污染这些节点。这是供 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 Auto Mode 集群时，我的集群数据平面中正在运行哪些组件？
<a name="_what_components_are_running_in_my_cluster_data_plane_when_i_provision_a_new_eks_auto_mode_cluster"></a>

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

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

EKS 自动模式可完全自动部署生产级 Kubernetes 所需的大部分数据平面。这包括：
+ Karpenter，用于自动缩放集群的计算
+ AWS Load Balancer Controller 允许您通过自动的 Elastic Load Balancer 集成轻松公开 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 Load Balancer Controller 和 Karpenter 等许多组件都是在集群之外为您管理的，因此您无法像自我管理时那样查看日志。如果您需要对自动模式功能的功能进行故障排除，请创建 AWS Support Ticket。