Azure 上的 Node.js:监控和扩展容器化应用





5.00/5 (1投票)
在本文中,您将了解 Azure 如何帮助您轻松监控和扩展 AKS 上的微服务。
在上一篇文章中,我们构建、自动化并将在 Azure 上的 Kubernetes 集群中部署了一个复杂的 Node.js 应用程序。现在,我们如何确保这个职位列表应用程序运行顺利呢?
确保应用程序在部署后正常运行对任何企业都至关重要,尤其是在云端,您拥有 Kubernetes 集群和其他组件。 Azure Monitor 可为您提供深入了解 Kubernetes 集群和容器工作负载性能和运行状况所需的洞察。
我们将基于 之前的项目 进行扩展,该项目已在 Azure Kubernetes Service (AKS) 上运行一个已部署的 Kubernetes 集群。我们将为已部署的应用程序添加监控,然后学习如何扩展以满足日益增长的需求。
启用监控
在 AKS 上拥有 Kubernetes 集群后,您有 多种启用监控的选项。
我们将使用 Azure CLI 如下启用监控:
az aks enable-addons -a monitoring -n [CLUSTER-NAME] -g [RESOURCE-NAME]
例如
az aks enable-addons -a monitoring -n nodejsonaksapp -g nodejsonaks
此命令完成后,您可以通过 Azure 门户访问见解,方法是选择 AKS 集群,然后导航到“见解”页面。 Azure Monitor 提供了关于集群、节点和容器工作负载的关键信息,例如 CPU 使用率和内存使用率。
这些指标可帮助您确定是否需要增加容量来处理用户对服务的需求,或者是否不需要那么多节点,并可以缩减资源以节省成本。
Prometheus 指标
如果您使用或熟悉 Prometheus 进行应用程序指标收集,您可能会很高兴地知道 Azure Monitoring 可以 配置为无缝收集 Prometheus 指标,而无需设置和管理 Prometheus 服务器。
实时数据
容器见解包含一个用于 Azure Kubernetes Service 容器日志、事件和 pod 指标的 实时数据功能。如果已部署的应用程序出现问题,此功能可让您直接实时地筛选和调试云问题,从而节省时间和精力。有关设置实时数据功能的详细信息,请参阅 Microsoft 的指南。
指标和运行状况警报
应用程序性能和运行状况可能随时发生意外降级,因此请在 Azure 中配置指标和运行状况警报,这样您就可以少担心一些。当您的云系统中可能出现问题时,警报会通知您,让您无需不断监视统计数据。
这与在 Azure 门户中转到“警报”然后点击“新建警报规则”一样简单。或者,您可以使用 Azure Resource Manager 模板,或 通过 Azure CLI 或 REST API 创建它们。
指标图表
Azure Monitor 上的另一个有用的监控功能是指标图表。 Azure 指标资源管理器使您能够有效地调查并更好地理解运行中应用程序的性能,提供可视化图表和趋势。要深入了解并创建您的第一个图表,请使用 此 Azure Monitor 指标图表教程,并查看 Azure 指标资源管理器的某些高级功能。
Application Insights Node.js SDK
当您需要来自应用程序更深层次、更丰富的日志数据时,可以使用 Application Insights Node.js SDK 来检测您的代码。此 SDK 会自动监控应用程序的各个方面,例如 HTTP 请求、异常,甚至常见的第三方软件包,如 MongoDB、MySQL 和 Redis,同时还允许您手动配置应用程序的其他指标。
让我们通过几个简单的步骤来设置我们在 项目代码 中的 Application Insights,并了解如何实现更好的监控。
要开始,请在 Azure 门户中创建一个 Application Insights 资源,然后创建一个新应用。如果您希望单独管理资源组,则所选的资源组不必与您的 AKS 集群相同。
创建完成后,打开资源并复制“检测密钥”。这是连接您的应用程序到 Azure 进行日志记录的 API 密钥。
在您的 Node.js 应用程序中,添加 applicationinsights npm 包
npm install applicationinsights
导入模块并在项目代码(例如主 Web 服务器的 index.ts 文件)中设置 Application Insights,使用您复制的检测密钥。为演示目的,此密钥直接传递到 setup 函数,但通过环境变量安全地提供它通常是最佳实践。
import * as appInsights from "applicationinsights";
// NOTE TO READER: To keep this key out of commited source code,
// provide this key via an environment variable.
const appInsightsKey = "APP INSIGHTS KEY";
appInsights.setup( appInsightsKey );
appInsights.start();
就是这样!确保您的应用程序正在运行,片刻之后,Application Insights 仪表板就开始报告数据了。
要了解有关使用 Application Insights Node.js SDK 的更多信息,包括详细的配置选项、扩展指标以及使用 TelemetryClient API 的自定义事件和指标,请参阅 Microsoft 的文档。
扩展集群
随着应用程序需求的增加和减少,您可以手动或自动地在 Azure 上扩展 AKS 集群。这可以通过添加或删除运行微服务的实例来水平扩展您的应用程序容量。
让我们探讨这两种选项。
手动扩展
要手动扩展集群,首先,您需要获取节点池的名称。使用 Azure CLI 和以下命令:
az aks show -n [CLUSTER-NAME] -g [RESOURCE-NAME] --query agentPoolProfiles
例如
az aks show -n nodejsonaksapp -g nodejsonaks --query agentPoolProfiles
在此示例中,节点名称为 nodepool1。
然后,您可以使用 scale 命令扩展到所需的节点数:
az aks scale -n [CLUSTER-NAME] -g [RESOURCE-NAME] --node-count [COUNT] --nodepool-name [NODE-NAME]
例如
az aks scale -n nodejsonaksapp -g nodejsonaks --node-count 2 --nodepool-name nodepool1
命令完成后,您的 AKS 集群将在新的池节点数上运行。
自动扩展
自动扩展使您可以设置 Azure 可以实例化的最小和最大节点数,以自动满足需求。
您可以使用 Azure CLI 更新集群以启用集群自动缩放器。
要更新设置,请运行:
az aks update -n [CLUSTER-NAME] -g [RESOURCE-NAME] --enable-cluster-autoscaler --min-count [MIN-COUNT] --max-count [MAX-COUNT]
例如
az aks update -n nodejsonaksapp -g nodejsonaks --enable-cluster-autoscaler --min-count 1 --max-count 3
Azure AKS 支持众多配置设置来管理您的集群。要深入了解 AKS 集群的自动扩展,请阅读 Microsoft 的文档,或 了解如何基于性能和计划进行自动扩展。
后续步骤
在高级云原生系列的这一部分中,您学习了如何启用监控以及如何手动和自动扩展在 Azure 上运行的 Node.js 应用程序。
下一步,我们将使用 Azure Active Directory,轻松安全地将登录按钮添加到我们的应用程序,而无需自己处理用户帐户数据的存储和管理。继续阅读,不要错过后面更多激动人心的代码。