你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Kubernetes 服务 (AKS) 中的可持续软件工程做法
可持续软件工程原则是一组可帮助你定义、构建和运行可持续应用程序的能力。 总体目标是降低应用程序每个方面的碳足迹。 Azure 架构良好的框架可持续性指导与绿色软件基金会的可持续软件工程原则相一致,并概述了可持续软件工程的原则。
可持续软件工程在优先级和重点方面有所转变。 在很多情况下,大多数软件的设计和运行方式强调了高性能和低延迟。 可持续软件工程侧重于最大程度地降低碳排放量。
- 应用可持续软件工程原则可以提高性能或降低延迟,例如,降低总体网络遍历时间。
- 减少碳排放可能会导致性能降低或延迟增加,如延迟低优先级工作负荷。
以下指导重点介绍使用 Azure Kubernetes 服务 (AKS) 在 Azure 上构建或操作的服务。 本文包括设计和配置清单、建议的设计做法以及配置选项。 将可持续软件工程原则应用到应用程序之前,请查看应用程序的优先级、需求和利弊。
先决条件
- 了解架构良好的框架可持续性指导将有助于生成优质、稳定且高效的云体系结构。 我们建议首先详细了解可持续工作负载,并使用 Microsoft Azure 架构良好评审评估来评审工作负载。
- 在生成应用程序时,明确定义业务要求至关重要,因为它们可能对群集和工作负载体系结构与配置产生直接影响。 在生成或更新现有应用程序时,请评审架构良好的框架可持续性设计领域,以及应用程序的整体生命周期。
了解共担责任模型
可持续性是云提供商与在平台上设计和部署 AKS 群集的客户或合作伙伴之间共同的责任。 即使数据中心已针对可持续性进行优化,部署 AKS 也不会自动使其具有可持续性。 未经正确优化的应用程序仍可能释放超出必要值的碳。
详细了解可持续性的共担责任模型。
设计原理
碳效率:尽量减少碳排放。
具备碳效率优势的云应用程序以经过优化,其出发点是成本优化。
能源效率:尽量减少能源使用量。
提高能源效率的一种方法是在服务器以最高利用率运行,同时提高硬件效率的条件下,在最大程度上减少运行应用程序的服务器数量。
硬件效率:尽量减少隐含碳的使用量。
有两种主要方法可以提高硬件效率:
- 对于最终用户设备,它延长了硬件寿命。
- 对于云计算,它提高了资源的利用率。
碳意识:在电能较清洁时多做事,在电能污染较重时少做事。
碳意识是指通过增加或减少需求来应对碳排放强度的变化。
设计模式和做法
在查看每个设计领域的详细建议之前,我们建议仔细考虑以下在 AKS 上构建可持续工作负载的设计模式:
设计模式 | 适用于工作负载 | 适用于群集 |
---|---|---|
逻辑组件的独立缩放设计 | ✔️ | |
事件驱动的缩放设计 | ✔️ | |
以无状态设计为目标 | ✔️ | |
启用群集和节点自动更新 | ✔️ | |
安装支持的加载项和扩展 | ✔️ | ✔️ |
在适当情况下容器化工作负载 | ✔️ | |
使用节能硬件 | ✔️ | |
匹配可伸缩性需求并利用自动缩放和突发功能 | ✔️ | |
在非营业时间关闭工作负载和节点池 | ✔️ | ✔️ |
删除未使用的资源 | ✔️ | ✔️ |
标记资源 | ✔️ | ✔️ |
优化存储利用率 | ✔️ | ✔️ |
选择离用户最近的区域 | ✔️ | |
减少节点之间的网络遍历 | ✔️ | |
使用服务网格进行评估 | ✔️ | |
优化日志收集 | ✔️ | ✔️ |
缓存静态数据 | ✔️ | ✔️ |
评估是否使用 TLS 终止 | ✔️ | ✔️ |
使用云原生网络安全工具和控制 | ✔️ | ✔️ |
扫描漏洞 | ✔️ | ✔️ |
应用程序设计
请浏览本部分以详细了解如何优化应用程序以实现可持续性更高的应用程序设计。
逻辑组件的独立缩放设计
微服务体系结构可能会减少所需的计算资源,因为它允许独立缩放其逻辑组件,并确保按需缩放组件。
- 请考虑使用 Dapr 框架或其他 CNCF 项目,以帮助将应用程序功能分离到不同的微服务中,并实现其逻辑组件的独立缩放。
事件驱动的缩放设计
在根据 HTTP 请求、队列长度和云事件等相关业务指标缩放工作负载时,可以帮助降低资源利用率并减少碳排放。
- 在生成事件驱动的应用程序时使用 Keda,以在没有需求时纵向缩减为零。
以无状态设计为目标
在设计中消除状态可以减少为了正常运行工作负载而需要的内存或磁盘中数据。
- 考虑采用无状态设计来减少不必要的网络负载、数据处理和计算资源。
应用程序平台
请浏览本部分了解如何围绕可持续性做出更明智的平台相关决策。
启用群集和节点自动更新
使群集保持最新状态可避免不必要的性能问题,并确保从最新的性能改进和计算优化中受益。
- 启用群集自动升级并使用 GitHub Actions 自动将安全更新应用于节点,以确保群集包含最新的改进。
安装支持的加载项和扩展
AKS 支持策略所涵盖的加载项和扩展为群集提供了进一步受支持的功能,同时支持你在整个群集生命周期内受益于最新的性能改进和能源优化。
- 将 KEDA 安装为加载项。
- 安装 GitOps 和 Dapr 作为扩展。
在适当情况下容器化工作负载
容器允许减少不必要的资源分配并更好地利用部署的资源,因为它们允许装箱,并且所需的计算资源比虚拟机更少。
- 使用 Draft 通过生成 Dockerfile 和 Kubernetes 清单来简化应用程序容器化。
使用节能硬件
Ampere 的云原生处理器采用独特设计,可同时满足云的高性能和能效需求。
- 评估使用基于 Ampere Altra Arm 的处理器的节点是否适合你的工作负载。
符合可伸缩性需求并利用自动缩放和突发功能
过大的群集无法最大程度地利用计算资源,并可能导致能源浪费。 将应用程序分隔到不同的节点池中,以便能够根据应用程序要求适当调整群集大小和实现独立缩放。 当 AKS 群集中的容量耗尽时,可以从 AKS 升级到 ACI,以将额外的 Pod 横向扩展到无服务器节点,并确保工作负载有效使用所有分配的资源。
- 调整群集大小,以匹配应用程序的可伸缩性需求。 将群集自动缩放程序与虚拟节点一起使用,以快速扩展和最大程度提高计算资源利用率。
- 还可在命名空间级别强制实施资源配额,并在无需求时将用户节点池缩减为零。
在非营业时间关闭工作负载和节点池
工作负载可能不需要连续运行,并且可将其关闭以减少能源浪费和碳排放。 可以完全关闭(停止)AKS 群集中的节点池,从而节省计算成本。
- 使用节点池停止/启动以在工作时间外关闭节点池。
- 使用 KEDA CRON 缩放程序根据时间纵向缩减工作负载 (Pod)。
操作过程
请浏览本部分来设置环境,以衡量和持续改进工作负载成本和碳效率。
删除未使用的资源
应识别并删除任何未使用的资源,例如未引用的映像和存储资源,因为它们会直接影响硬件和能源效率。 要确保持续进行能源优化,必须将识别和删除未使用的资源视为长期过程,而不是一项暂时性活动。
- 使用 Azure 顾问识别未利用的资源。
- 使用 ImageCleaner 清理过时的映像并消除群集中的风险区域。
标记资源
在正确的时间获取正确的信息和见解对于生成有关性能和资源利用率的报告非常重要。
- 在群集上设置 Azure 标记以启用工作负载监视。
存储
请浏览本部分了解如何设计可持续性更高的数据存储体系结构和优化现有部署。
优化存储利用率
数据检索和数据存储操作会对能源和硬件效率产生重大影响。 使用正确的数据访问模式设计解决方案可以减少能源消耗和隐含碳排放。
网络和连接性
请浏览本部分了解如何增强和优化网络效率,以减少不必要的碳排放。
选择离用户最近的区域
从数据中心到用户的距离对能源消耗和碳排放具有重大影响。 缩短网络数据包的传输距离可以提高能源效率和碳效率。
- 查看应用程序要求和 Azure 地理位置,以选择距离大部分网络数据包目标位置最近的区域。
减少节点之间的网络遍历
将节点放在单个地区或单个可用性区域可以减少实例之间的物理距离。 但对于业务关键型工作负载,需要确保群集分散在多个可用性区域,这可能会导致更多的网络遍历和碳足迹增加。
- 考虑在邻近放置组中部署节点,以确保计算资源在物理上彼此靠近,从而减少网络遍历。
- 对于关键工作负载,请使用可用性区域配置邻近放置组。
使用服务网格进行评估
服务网格会部署额外的容器用于通信(通常采用挎斗模式),以提供更多操作功能,这会导致 CPU 使用率和网络流量增加。 尽管如此,这会允许你将应用程序与这些功能分离,因为这样可以从应用程序层中移出这些功能,并将其向下转移到基础结构层。
- 在决定使用服务网格通信组件之前,请仔细考虑它们的 CPU 使用率和生成的网络流量会增加多少。
优化日志收集
发送和存储来自所有可能源(工作负载、服务、诊断和平台活动)的所有日志可能会增加存储使用量和网络流量,这会对成本和碳排放产生影响。
- 确保仅收集和保留必要的日志数据来支持你的需求。 为 AKS 工作负载配置数据收集规则并实施有关优化 Log Analytics 成本的设计注意事项。
缓存静态数据
使用内容分发网络 (CDN) 是优化网络流量的一种可持续方法,因为它可以减少整个网络中的数据移动。 它通过将频繁读取的静态数据存储在更靠近用户的位置来最大程度地降低延迟,帮助减少网络流量和服务器负载。
- 确保遵循 CDN 的最佳做法。
- 确保使用 Azure CDN 降低消耗的带宽并控制成本。
安全性
请浏览本部分来详细了解能够实现可持续、规模可控的安全态势的建议。
评估是否使用 TLS 终止
传输层安全性 (TLS) 确保在 Web 服务器和 Web 浏览器之间传递的所有数据保持私密性和经过加密。 但是,终止和重新建立 TLS 会增大 CPU 利用率,并且在某些体系结构中是不必要的。 均衡的安全级别可以提供可持续性更高且更节能的工作负载,而较高的安全级别可能会提高计算资源需求。
- 在使用应用程序网关或 Azure Front Door 时查看有关 TLS 终止的信息。 确定是否可以在边界网关上终止 TLS,并继续对工作负载均衡器和工作负载使用非 TLS。
使用云原生网络安全工具和控制
Azure Front Door 和应用程序网关可帮助管理来自 Web 应用程序的流量,而 Azure Web 应用程序防火墙可以防御 OWASP 十大攻击和网络边缘的降载恶意机器人。 这些功能有助于消除不必要的数据传输并减轻云基础结构的负担,同时降低带宽和基础结构要求。
- 使用 AKS 中的应用程序网关入口控制器 (AGIC) 筛选和卸载网络边缘上的流量,使其无法到达源处,以减少能源消耗和碳排放。
扫描漏洞
许多针对云基础结构的攻击试图滥用已部署的资源,使攻击者直接受益,从而导致使用量和成本出现不必要的高峰。 漏洞扫描工具有助于最大程度地减少攻击者的攻击时机,并减少任何潜在的资源恶意使用。
- 遵循 Microsoft Defender for Cloud 的建议。
- 运行自动化漏洞扫描工具以避免不必要的资源使用,如 Defender for Containers。 这些工具有助于识别映像中的漏洞,并最大程度地减少攻击者的机会窗口。