Azure Kubernetes 服务中的可靠性 (AKS)

本文介绍 Azure Kubernetes 服务(AKS)中的可靠性支持,包括通过 可用性区域多区域部署实现区域内部复原能力。

可靠性是你和Microsoft之间的共同责任。 可以使用本指南了解哪些可靠性选项满足特定的业务目标和运行时间目标。

生产部署建议

有关如何在 AKS 中部署可靠生产工作负荷的建议,请参阅以下文章:

可靠性体系结构概述

创建 AKS 群集时,Azure 平台会自动创建和配置:

  • 一个包含 API 服务器、etcd、调度程序和管理工作负载所需的其他 Pod 的控制平面

  • 一个针对你的订阅的系统节点池,用于托管 kube-system 命名空间中运行的加载项和其他 Pod。

完成此初始节点池设置后,可以为自己的用户工作负荷 添加或删除节点池 。 AKS 不负责管理节点池以提高可靠性,必须确保您的工作负载能够在基础设施故障中保持弹性。

显示 Kubernetes 控制平面和节点组件的示意图。

复原能力是你与 Microsoft 共同的责任。 作为计算服务,AKS 管理群集可靠性的某些方面,但你负责管理其他方面。

  • Microsoft 负责管理 AKS 的控制平面和其他托管组件。

  • 你有责任

    • 定义应如何配置组件(包括附加到服务的节点池和负载均衡器)以满足可靠性要求。 定义组件后,Azure 会代表你部署和管理这些组件。

    • 管理 AKS 群集之外的任何组件,包括存储和数据库。 验证这些组件是否符合可靠性要求。 部署工作负荷时,请遵循这些服务的最佳做法,确保其他 Azure 组件也配置为复原能力。

暂时性故障

暂时性故障是指组件发生短暂的间歇性故障。 这些故障经常出现在云之类的分布式环境中,在运营过程中比较常见。 经过短暂的时间后,它们就会自我纠正。 应用程序必须能够处理暂时性故障,处理方式通常是重试受影响的请求。

与任何云托管 API、数据库和其他组件通信时,所有云托管的应用程序都应遵循 Azure 暂时性故障处理指南。 有关详细信息,请参阅 有关处理暂时性故障的建议

使用 AKS 时,可能会由于各种原因(包括应用程序崩溃、Pod 缩放和均衡作、节点修补和临时基础结构故障(如硬件或网络问题)而发生暂时性故障。

无法消除所有暂时性故障,因此访问 AKS 托管应用程序的客户端应准备好重试失败的请求,并遵循其他暂时性故障处理建议。 通过在部署中遵循 Kubernetes 和 Azure 的最佳实践,可以最大程度地减少瞬态故障的可能性,并避免或减轻它们可能导致的停机时间。

  • 在 Pod YAML 中设置 Pod 中断预算(PDB),以指定在给定时间需要处于 Ready 状态的 Pod 数量。 设置 PDB 后,AKS 确保在运行操作以隔离和排出节点时副本的最低限度可用性。 如果在升级等过程中不能满足 PDB,Pod 继续运行,且操作可能失败。 有关详细信息,请参阅 PDB

  • 使用 maxUnavailable 来定义在给定时间可能不可用的最大副本数。 例如,如果要执行滚动重启,AKS 确保在给定时间改动的 Pod 数不超过 maxUnavailable。 有关详细信息,请参阅 maxUnavailable

  • 遵循部署最佳做法。 Pod 副本也可能因为应用程序问题而失败。 有关详细信息,请参阅 AKS 群集可靠性的 部署级别最佳做法

注释

如果希望 AKS 验证部署是否符合最佳做法并提供阻止或警告通知,可以使用部署安全措施(预览版)。 部署安全措施是一种托管产品,可帮助在代码部署到群集之前强制实施产品最佳做法。

可用性区域支持

可用性区域是每个 Azure 区域内在物理上独立的数据中心组。 当某个区域发生故障时,服务可以切换到其他可用的区域。

有关 Azure 中可用性区域的详细信息,请参阅 什么是可用性区域?

将 AKS 群集部署到支持可用性区域的区域中时,不同的组件需要不同类型的配置。

默认情况下,AKS 控制平面具有区域复原能力。 如果某个区域发生故障,控制平面不需要任何配置或管理才能实现复原能力。 但是,当区域发生故障时,控制平面复原不足以使群集保持正常运行。 对于系统节点池和您部署的任何用户节点池,您必须启用可用区支持,以帮助确保您的工作负载对可用区故障具有弹性。

区域支持

可以将具备区域复原能力的 AKS 群集部署到支持可用性区域的任何区域。

注意事项

若要增强区域中 AKS 生产工作负荷的可靠性与复原能力,需要通过进行以下配置来配置 AKS 来实现区域冗余:

  • 部署多个副本。 Kubernetes 基于节点标签跨节点分布 Pod。 若要跨区域分散工作负荷,需要部署 Pod 的多个副本。 例如,如果使用三个区域配置节点池,但仅部署 Pod 的单个副本,则部署不会具有区域复原能力。

  • 启用自动缩放。 Kubernetes 节点池提供手动和自动缩放选项。 利用手动缩放,可以根据需要添加或删除节点,且挂起的 Pod 等待,直到你纵向扩展节点池。 AKS 管理的缩放使用群集自动缩放程序节点自动预配 (NAP)。 根据 Pod 的需求,在订阅的 SKU 配额和容量范围内,AKS 扩展或缩减节点池。 此方法有助于确保将您的 Pod 调度到可用区中的可用节点上。

  • 设置 Pod 拓扑约束。 使用 Pod 拓扑分布约束来控制 Pod 如何分布到不同的节点或区域。 约束有助于实现高可用性、复原能力和高效的资源使用。 如果希望严格地跨区域分布 Pod,可以将约束设置为强制 Pod 进入挂起状态,以保持跨区域的 Pod 平衡。 有关详细信息,请参阅 Pod 拓扑分布约束

  • 配置区域复原网络。 如果 Pod 提供外部流量,请使用 Azure 应用程序网关Azure 负载均衡器等服务配置群集网络体系结构。

  • 确保依赖项具有区域复原能力。 大多数 AKS 应用程序使用其他服务进行存储、安全性或网络。 请确保查看这些服务的区域复原建议。

成本

在 AKS 中启用可用性区域支持无需额外付费。 需要为在可用性区域中部署的虚拟机(VM)和其他资源付费。

配置可用性区域支持

  • 创建具有可用性区域支持的新 AKS 群集: 若要配置可用性区域支持,请参阅 创建使用可用性区域的 Azure Kubernetes 服务 (AKS) 群集
  • 迁移: 创建群集后,无法启用可用性区域支持。 相反,需要创建启用了可用性区域支持的新群集并删除现有群集。
  • 禁用可用性区域支持: 创建群集后,无法禁用可用性区域支持。 相反,需要创建一个可用性区域支持已禁用的新群集,并删除现有群集。

常规操作

  • 区域之间的流量路由: 部署使用可用性区域的 AKS 群集时,请务必确保网络组件也具有区域复原能力。 根据使用的负载均衡器和其他网络组件,可能需要显式配置组件,以将流量路由到正确区域中的正确节点,并响应区域中断。 有关详细信息,请参阅 AKS 的区域复原注意事项

  • 区域之间的数据复制: 如果运行无状态工作负荷,则应使用托管的 Azure 服务(例如 Azure 数据库Azure Redis 缓存Azure 存储 )来存储应用程序数据。 可以使用这些服务来帮助确保流量可以跨节点和区域移动,而不会造成数据丢失或影响用户体验的风险。 可以使用 Kubernetes 部署服务运行状况探测来管理无状态 Pod,并确保均匀分布到各个区域。

    如果需要使用 Azure 磁盘在群集中存储状态,请使用 Azure 区域冗余存储来帮助确保跨多个可用性区域复制数据。 有关详细信息,请参阅 根据应用程序需求选择正确的磁盘类型

区域关闭体验

  • 检测和响应:发生区域中断时,控制平面自动故障转移。 如果节点池使用可用性区域并遵循区域复原最佳做法,则可以预期 AKS 在启动和运行的区域中启动节点和副本。 使用群集自动缩放程序或 NAP 等托管解决方案时,AKS 会自动执行此任务。 如果没有自动缩放,节点和副本会保持 挂起 状态,并等待进行手动干预来扩展节点池。

    AKS 还尝试在正常区域中再平衡 Pod。 如果选择在区域关闭的场景中手动缩放节点池,则当正常区域中没有可用节点时,Pod 可能保持挂起状态。 剩余区域中的向外扩展还受你所使用的 VM SKU 配额和容量的可用性的约束。

  • 通知: AKS 不会在区域关闭时通知你。 可以使用节点或 Pod 运行状况指标来监视节点和 Pod 的运行状况。

  • 活动请求: 任何活动请求都可能会遇到中断。 当工作负载故障转移到另一个区域时,某些请求可能会失败,延迟可能会增加。

  • 预期数据丢失: 如果使用 Azure 磁盘在群集中存储状态,并且使用区域冗余存储,则区域故障不会造成任何数据丢失。

  • 预期的停机时间: 如果为群集和 Pod 正确配置区域复原能力,则区域故障不应导致 AKS 工作负荷停机。

  • 流量重新路由:负载均衡器将新的传入请求重新路由到在正常节点运行的 Pod。

有关详细信息,请参阅 AKS 的区域复原注意事项

故障回复

当可用性区域恢复时,故障恢复行为取决于组件:

  • 控制平面:AKS 自动还原所有可用性区域中的控制平面操作。 无需手动干预。

  • 节点池和节点:故障回复后,节点立即保留在先前正常的区域中,不会还原到恢复的区域中。 但是,下次执行节点缩放操作时(例如横向扩展节点池),节点池可以在恢复的可用区中创建节点。

  • Pod:故障回复后,Pod 立即继续在它们当前在其上运行的节点上运行。 创建新 Pod 或重新创建现有 Pod 时,它们有资格使用恢复区域中的节点。

  • 存储: 附加到 Pod 的任何存储会根据 区域冗余存储的工作原理进行恢复。

对区域故障进行测试

您可以使用以下方法测试对可用性区域故障的恢复能力:

多区域支持

AKS 群集是单区域资源。 如果区域不可用,AKS 群集也不可用。

备选多区域方法

如果需要将 Kubernetes 工作负荷部署到多个 Azure 区域,可以使用两个选项来管理这些群集的业务流程。

  • 如果需要更简单的托管体验,请使用 Azure Kubernetes Fleet Manager 。 通过使用 Azure Kubernetes Fleet Manager,可以:

    • 将一组 AKS 群集作为单个单元进行管理,这些群集可以分布在多个 Azure 区域。

    • 自动执行群集管理的特定方面,例如群集和节点映像升级。

    • 使用流量分配功能,将流量分布到各群集中,并在某个区域不可用时自动故障转移。

  • 如果工作负荷需要对区域间故障转移的不同组件进行更细微的控制,则使用手动主动-主动或主动-被动部署模型协调故障转移。 有关详细信息,请参阅 AKS 的 HA 和 DR 概述

备份

Azure 备份具有一个扩展,可用于备份 AKS 群集内的群集资源及附加在其上的持久卷。 备份保管库通过扩展与 AKS 群集通信以执行备份和还原操作。

如果 AKS 群集位于 配对区域中,则可以将备份配置为存储在异地冗余存储中。 可以将异地冗余备份还原到配对区域中。

如需了解更多信息,请参阅以下文章:

对于大多数解决方案,不应只依赖于备份。 请改用本指南中所述的其他功能来支持复原要求。 但是,备份可以防范其他方法没有的一些风险。 有关详细信息,请参阅 冗余、复制和备份

尽量使用无状态群集来最大程度地减少备份需求。 将数据存储在外部存储系统和数据库中,而不是在群集中存储数据。

服务级别协议

AKS 的服务级别协议(SLA)描述了服务的预期可用性以及实现该可用性预期必须满足的条件。 有关详细信息,请参阅 联机服务的 SLA

AKS 为群集管理提供三个定价层免费标准和高级。 免费层允许您使用 AKS 来测试您的工作负载。 标准和高级层专为生产工作负荷而设计。 部署启用了可用性区域的 AKS 群集时,SLA 中定义的运行时间百分比会增加。 但是,仅当在标准或高级定价层中部署群集时,SLA 才适用。