本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
可靠性最佳实践
本节提供有关使在 EKS 上运行的工作负载具有弹性和高度可用性的指导
如何使用本指南
本指南适用于想要在 EKS 中开发和运行高可用性和容错服务的开发人员和架构师。该指南分为不同的主题领域,便于阅读。每个主题首先简要概述,然后列出有关 EKS 集群可靠性的建议和最佳实践。
简介
EKS 的可靠性最佳实践分为以下主题:
-
应用程序
-
控制层面
-
数据层面
是什么让系统可靠? 如果一个系统即使在一段时间内环境发生变化也能持续运行并满足需求,则可以称之为可靠。为实现这一目标,系统必须检测故障,自动自我修复,并能够根据需求进行扩展。
客户可以使用 Kubernetes 作为基础,可靠地运行任务关键型应用程序和服务。但是,除了采用基于容器的应用程序设计原则外,可靠地运行工作负载还需要可靠的基础架构。在 Kubernetes 中,基础设施包括控制平面和数据平面。
EKS 提供了生产级 Kubernetes 控制平面,该控制平面设计为高可用性和容错性。
在 EKS 中,AWS 负责 Kubernetes 控制平面的可靠性。EKS 在 AWS 区域的三个可用区运行 Kubernetes 控制平面。它自动管理 Kubernetes API 服务器和 etcd 集群的可用性和可扩展性。
数据平面可靠性的责任由您、客户和 AWS 共同承担。EKS 为部署 Kubernetes 数据平面提供了四个工作节点选项。
EKS 自动模式是管理程度最高的选项,可处理数据平面的配置、扩展和更新,同时提供托管计算、网络和存储功能。自动模式 AMI 经常发布,集群会自动更新到最新的 AMI,以部署 CVE 补丁和安全补丁。您可以通过在自动模式上配置中断控制来控制何时发生这种情况 NodePools。
Fargate 通过为每个节点运行一个 Pod 来处理数据平面的配置和扩展。第三个选项,托管节点组,负责数据平面的配置和更新。最后,自管理节点是数据平面管理程度最低的选项。你使用的 AWS-managed 数据平面越多,你的责任就越小。
托管节点组可自动执行 EC2 节点的配置和生命周期管理。您可以使用 EKS API(使用 EKS 控制台、AWS API、AWS CLI CloudFormation、Terraform 或eksctl)来创建、扩展和升级托管节点。托管节点在您的账户中运行 EKS-optimized Amazon Linux 2 EC2 实例,您可以通过启用 SSH 访问来安装自定义软件包。当您预置托管节点时,它们作为 EKS-managed Auto Scaling 组的一部分运行,该组可以跨越多个可用区;您可以通过在创建托管节点时提供的子网对其进行控制。EKS 还会自动标记托管节点,以便它们可以与集群自动缩放器一起使用。
Amazon EKS 在托管节点组上遵循 CVE 和安全补丁的责任共担模式。由于托管节点运行亚马逊 EKS-optimized AMI,因此在错误修复后,亚马逊 EKS 负责构建这些 AMI 的补丁版本。但是,您负责将这些修补的 AMI 版本部署到托管节点组。
尽管你必须启动更新过程,但EKS也可以管理节点的更新。EKS 文档中解释了更新托管节点的过程。
如果您运行自管理节点,则可以使用 Amazon EKS-optimized Linux AMI 创建工作节点。您负责修补和升级 AMI 和节点。最佳做法是使用eksctl CloudFormation、或基础设施作为代码工具来配置自管理节点,因为这将使您轻松升级自管理节点。在更新工作节点时考虑迁移到新节点,因为迁移过程会污染旧节点组,NoSchedule并在新堆栈准备好接受现有 pod 工作负载后耗尽节点。但是,您也可以对自管理节点执行就地升级。
责任共担模式-Fargate
责任共担模型-MNG
本指南包含一系列建议,可用于提高 EKS 数据平面、Kubernetes 核心组件和应用程序的可靠性。
反馈
本指南现已发布 GitHub ,旨在收集来自更广泛 EKS/Kubernetes 社区的直接反馈和建议。如果您认为我们应该在指南中纳入最佳实践,请在 GitHub 存储库中提交问题或提交 PR。我们打算随着服务新功能的增加或新的最佳实践的发展而定期更新该指南。