缩放Azure Kubernetes服务上的智能应用

目录

掌握适用于智能应用的Azure Kubernetes服务

先决条件

解决方案架构

配置AKS以进行动态应用缩放

在AKS中设置群集自动缩放程序

群集自动缩放程序如何动态扩展资源

配置HorizontalPodAutoscaler

使用Azure负载均衡器和AKS确保高可用性

AKS中的可用性区域

使用中断预算在自愿中断期间维持服务

在AKS中配置Azure负载均衡器以实现高可用性

后续步骤


本周的第一个主题中,我们探讨了如何在 Azure Kubernetes服务AKS)中使用Azure AI视觉来创建能够通过光学字符识别(OCR)分析图像和提取有价值数据的智能应用。本周的第二篇文章重点介绍了Azure Cosmos DB的优势,重点介绍了其多模型数据库以及处理智能应用中OCR分析产生的各种数据的能力。

第三个主题中,我们将配置AKS来管理不同的工作负载并平滑缩放我们的智能应用,确保它可以在不影响性能或可用性的情况下处理密集和波动的工作负载。

掌握适用于智能应用的Azure Kubernetes服务

Azure生态系统的核心是Azure Kubernetes服务(AKS)。它在优化应用程序性能和高效资源使用方面起着至关重要的作用。我们可以通过精确编排容器化工作负载,跨不同环境部署、管理和扩展应用程序。

AKS提供了多项强大的功能,可帮助应用程序平稳缩放,即使在需求旺盛期间也能保持可用,包括:

  • 群集自动缩放程序会根据您的工作量调整群集中的节点数。这样,它就可以有效地利用资源并控制成本。
  • Azure负载均衡器是使用AKS自动创建的,其作用类似于智能流量控制器。它确保传入的网络流量在集群的节点之间均匀分布,从而优化资源使用。

总之,这些功能为您的应用程序提供了处理不同工作负载并保持不间断运行的坚实基础。

以下部分提供了设置、监视和优化AKS以提高应用程序效率和性能的实践演示。

先决条件

若要按照本教程操作,请确保满足以下条件:

查看完整的项目代码,预览最终项目。

解决方案架构

下图显示了本文所针对的解决方案的体系结构。

配置AKS以进行动态应用缩放

群集自动缩放程序和Kubernetes HorizontaPodAutoscalerHPA)对于在AKS环境中实现动态应用缩放至关重要。

群集自动缩放程序可确保我们的群集根据工作负载需求智能地扩展其资源。它通过动态添加或删除节点来优化成本效益,从而有效地管理资源。

HPA通过自动扩展集群中的单个Pod、监控CPU使用率或自定义指标等指标以及调整正在运行的Pod数量来满足应用程序需求,从而对此进行了补充。

为了了解这两个概念如何无缝地工作以提供全面的扩展解决方案,现在让我们详细了解群集自动缩放程序配置。稍后,我们将讨论如何在AKS群集中设置HPA

AKS中设置群集自动缩放程序

AKS中设置群集自动缩放程序涉及Azure CLIkubectl命令的组合。下面是一个分步指南,可帮助您完成整个过程,包括初始设置、配置每个节点池的最小和最大节点计数,以及监视群集自动缩放程序的性能。

若要继续操作,请确保已登录到Azure帐户。要登录,请在终端中运行以下命令:

az login

在本系列的第一部分中,我们创建了一个名为aks-intelligent-appAKS群集。下图显示AKS创建默认命名为nodepool1的单节点池。我们可以访问AKS群集节点,并通过单击设置部分中的节点池菜单来可视化默认nodepool1

在上图中,节点计数:1/1就绪表示我们在AKS群集的节点池nodepool1中分配了一个虚拟机(节点)。该节点当前运行正常且可操作,已准备好接受和执行工作负载。

AKS群集中,节点池是一组具有类似配置和容量的虚拟机(VM)。这些节点池是构成群集计算资源的不同VM组。节点池允许工作负载隔离和资源分配优化,因为我们可以定制每个池来处理特定的任务或工作负载。这种模块化方法增强了AKS群集中的灵活性和资源管理。

使用kubectl,通过运行以下命令来检索当前节点的信息:

kubectl get nodes

上面的此命令应检索类似于以下内容的结果:

NAME                                STATUS   ROLES   AGE   VERSION
aks-nodepool1-27122202-vmss000000   Ready    agent   59m   v1.26.6

假设我们希望我们的应用支持多个节点。在这种情况下,我们有两个选项:根据需要自定义nodepool1或添加更多节点池。在本指南中,我们将介绍如何更新现有nodepool1节点池以支持多个节点。

在终端中执行以下命令,更新现有节点池:

az aks update --resource-group computer-vision --name aks-intelligent-app --enable-cluster-autoscaler --min-count 2 --max-count 3

此更改可确保节点池始终至少有两个节点可用,并且可以根据工作负载需求扩展到最多三个节点。此方法有助于根据AKS群集中的不同需求管理资源分配。

现在,再次运行该kubectl get nodes命令以检索新节点计数:

kubectl get nodes

您的结果应类似于以下结果:

NAME                                STATUS   ROLES   AGE    VERSION
aks-nodepool1-27122202-vmss000000   Ready    agent   2d5h   v1.26.6
aks-nodepool1-27122202-vmss000001   Ready    agent   2d4h   v1.26.6

Azure门户中刷新aks-intelligent-app AKS群集的节点池页:

上面的节点计数:2/2就绪消息表示您现在已分配了两个节点,这两个节点都处于正常运行状态。

要查看有关集群中节点的更多信息,请选择 Node pools 页面上的 Nodes 选项卡:

在这里,CPU、内存、磁盘和Pod信息提供了集群资源使用情况和工作负载分布的全面视图。

群集自动缩放程序如何动态扩展资源

群集自动缩放程序对于在云环境中保持智能应用的最佳性能和成本效益至关重要。

AKS中的群集自动缩放程序持续监视群集的资源使用情况,包括CPU和内存,并将其与Pod规范中定义的资源请求和限制进行比较。当自动缩放程序检测到需要额外的资源来满足工作负载的需求时,它会自动预配新节点,从而扩展集群的容量。相反,当资源需求减少时,群集自动缩放程序会通过删除未充分利用的节点来缩减规模,从而优化成本效益。

通过动态缩放资源以响应工作负载需求的波动,自动缩放程序可确保有效分配资源,防止在低活动期间过度配置,并在需求高峰时进行纵向扩展。这种自适应方法增强了智能应用的响应能力,并通过调整基础架构的规模来减少不必要的费用。

配置HorizontalPodAutoscaler

Kubernetes HorizontalPodAutoscaler 是一个强大的工具,可确保最佳的应用程序性能和资源使用。它根据CPU使用率、内存使用率或自定义用户定义的指标动态调整Kubernetes部署中正在运行的Pod的数量。

要配置它,我们必须首先定义所需的资源使用目标。例如,如果使用CPU,我们将指定每个PodCPU使用率的目标百分比。一旦我们设定了目标,HPA就会持续监控指标并自动扩展Pod的数量以保持所需的使用水平。

为了演示HPA的功能,让我们编写一个YAML文件并将其配置为与我们的智能应用程序配合使用。  Deployment 文件夹中创建一个名为 intelligent-app-hpa.yml 的文件,其中包含以下内容:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: intelligent-app-hpa
spec:
  maxReplicas: 10
  minReplicas: 3
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: intelligent-app
  targetCPUUtilizationPercentage: 50

注意:您还可以通过在Pod定义YAML文件中包含上述规范来启用Pod自动缩放。

上面的 intelligent-app-hpa.yml 文件定义了Kubernetes中的HPA资源。它将intelligent-app  Deployment的自动缩放程序配置为根据CPU使用率自动调整副本数(Pod)。HPA确保副本数从最少3个到最多10个不等,目标是CPU使用率为50%

CPU使用率发生变化时,HPA会自动缩放副本数以保持所需的CPU使用率水平。此过程允许intelligent-app部署有效地处理不同的工作负载,同时保持在指定的资源边界内。

要应用HPA,请将终端更改为 Deployment 文件夹并运行以下kubectl命令:

cd Deployment
kubectl apply -f intelligent-app-hpa.yml

此命令应用intelligent-app-hpa.yml文件中描述的配置,在Kubernetes集群中创建HPA资源。

若要在终端中查看创建的HPA资源,请运行以下命令:

kubectl get hpa

终端将显示有关Kubernetes集群中存在的HPA资源的信息,提供详细信息,包括目标部署、所需副本、当前副本和自动缩放的使用指标:

NAME                  REFERENCE                    TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
intelligent-app-hpa   Deployment/intelligent-app   1%/50%    3         10        3          36s

正如我们在结果中看到的,HorizontalPodAutoscaler资源链接到intelligent-app部署。该1%/50%指标指示当前CPU使用率为目标使用率50%1%HPA至少维护3个副本(Pod),最多可以扩展到10个副本。目前,只有三个副本在运行。

使用Azure负载均衡器和AKS确保高可用性

我们可以配置和管理Azure负载均衡器、可用性区域(AZ)和Pod中断预算,以确保应用程序中的高可用性。在本节中,我们将详细介绍这些概念。

在本系列的第一篇文章中,我们了解到可以运行kubectl get services命令来列出服务及其相应的详细信息,例如服务名称、群集IP地址、外部IP和端口。

kubectl get services命令提供Kubernetes集群中部署的服务的快速、全面的快照,提供关键详细信息,例如服务名称、集群IP、外部IP、端口和关联的终端节点。此信息使管理员和开发人员能够监视、排除故障和管理服务的连接性和可访问性。

在终端中运行以下命令:

kubectl get services

您应收到类似于以下内容的输出:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
intelligent-app-service LoadBalancer 10.0.77.60 20.121.76.153 80:30936/TCP 47s
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 14m

在此输出中,我们可以看到一个名为intelligent-app-serviceKubernetes服务,其类型为LoadBalancer,可通过IP 10.0.77.60从集群访问。它可通过端口80访问20.121.76.153,映射到端口30936

Azure负载均衡器持续监视每个Pod或节点的运行状况和响应能力,并主动分发传入请求,以在Pod之间保持负载均衡。它确保了Pod之间的流量均匀分布,防止任何单个Pod或节点不堪重负,从而促进了最佳资源利用。

负载均衡器能够智能地将请求路由到正常运行的Pod,并结合服务的运行状况探测和后端池设置配置,可提高应用程序的高可用性和响应能力。

这些功能使应用程序能够无缝适应不同的工作负载和潜在的节点故障,同时提供可靠的用户体验。

AKS中的可用性区域

Azure可用区对于增强AKS中应用程序的复原能力和可用性至关重要。跨多个可用区部署AKS群集涉及在物理隔离的数据中心之间分配群集资源。此方法可确保,如果一个区域遇到中断(可能是由于该区域的自然灾害),应用程序可以从另一个区域继续运行。

在第一篇文章中,我们创建了一个AKS群集。现在,我们可以使用该kubectl命令和grep以检查此AKS群集中节点的可用区。在终端中运行以下命令:

kubectl get nodes -o custom-columns="NAME:.metadata.name,AVAILABILITY_ZONE:.metadata.labels.topology\.kubernetes\.io/zone"

您应该会收到类似于以下内容的结果:

NAME                                AVAILABILITY_ZONE
aks-nodepool1-57155478-vmss000001   0

输出显示节点aks-nodepool1-57155478-vmss000001位于可用性区域0。这些信息有助于我们了解Kubernetes如何在可用区之间分配集群中的节点,这对于在基于Kubernetes的应用程序中实现高可用性和容错至关重要。

值得注意的是,创建AKS群集后,我们无法直接修改它以启用或禁用AZ。要创建跨可用区123工作的集群,请按如下方式修改az aks create命令:

az aks create --resource-group computer-vision --name aks-intelligent-app --node-count 1 --generate-ssh-keys --zones 1 2 3

注意:我们可以使用Azure CLIAzure中发现特定区域的可用区。打开命令行终端并运行以下命令以列出特定Azure区域的可用可用区:

az vm list-skus --location <region-name> --output table

替换<region-name>为要检查的Azure区域的名称。例如,如果要检查美国东部区域的可用区,请运行以下命令:

az vm list-skus --location eastus --output table

使用中断预算在自愿中断期间维持服务

AKS中,容器中断预算PDB)对于在更新或计划中断期间维护服务可用性至关重要。PDB为可以同时不可用的Pod数量设定了准则,通过确保在任何给定时间仅使受控数量的Pod脱机来防止过多的停机时间。这种设计使我们能够在自愿中断期间维持服务。

以下是有关创建和管理PDB的分步指南,我们在其中定义了最小可用或最大不可用资源计数。

要创建PDB,您将定义一个YAML配置文件,用于指定预算所需的条件。首先,在Deployment文件夹中创建一个名为pdb-config.yml的文件,其中包含以下内容:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
   name: intelligent-app
spec:
   minAvailable: 3
   selector:
    matchLabels:
      app: intelligent-app

在这里,该minAvailable字段指定了在自愿中断(如维护或更新)期间必须保持可用(不中断或终止)的Pod的最小数量。将此字段设置为3,当发生中断时,Kubernetes将确保指定应用程序的至少三个Pod始终运行。

现在,确保您位于Deployment文件夹中,并使用以下kubectl apply命令应用PDB配置:

kubectl apply -f pdb-config.yml

若要验证是否已成功创建PDB,请运行以下命令:

kubectl describe pdb intelligent-app

此命令将为您提供以下结果:

Name:           intelligent-app
Namespace:      default
Min available:  3
Selector:       app=intelligent-app
Status:
    Allowed disruptions:  0
    Current:              1
    Desired:              3
    Total:                1
Events:                   <none>

现在让我们分析一下输出:

  • 名称和命名空间——PDB已命名intelligent-app并属于默认命名空间。
  • 最小可用——PDB指定必须始终至少有三个Pod可用。因此,即使在计划中断期间,也始终至少有三个应用程序Pod在运行。
  • 选择器——PDB适用于标记为app=intelligent-app的Pod 。
  • 状态——
    • 允许的中断——该值0表示PDB不允许对其选择器匹配的Pod进行任何中断或逐出。在此示例中,它确保至少三个正常运行的Pod始终可用,并且不允许中断。
    • 当前——显示与PDB选择器匹配的当前可用正常副本数。在本例中,它是1,表示当前有一个健康的Pod。
    • 所需副本数——指示应可用的所需副本数。它还设置为3,表示PDB希望维护三个副本。
    • 总计——与PDB选择器匹配的副本总数。它是1,表示有一个副本。
  • 事件——“事件”下的<none>条目表示没有与此PDB关联的最近事件或更改。

通过实施这些预算,AKS可确保逐步且受控的更新过程,从而最大限度地减少服务中断并提供可靠的用户体验。这是一种战略方法,用于平衡必要的更新与保持服务的响应性和对用户的可用性。

AKS中配置Azure负载均衡器以实现高可用性

若要确保应用程序能够承受故障并保持持续的服务可用性,必须在AKS中配置Azure负载均衡器以实现高可用性。可以采取多种措施来提高Azure负载均衡器在AKS群集中的可用性。

若要演示,请打开终端并运行以下命令:

az aks update --resource-group computer-vision --name aks-intelligent-app --load-balancer-managed-outbound-ip-count 2

上面的Azure CLI命令更新aks-intelligent-app AKS群集,将群集负载均衡器的托管出站IP计数设置为2。此命令会增加与群集的负载均衡器关联的托管出站IP的数量,这在负载均衡和网络出口需要多个出站IP地址时非常有用。该过程改进了集群的网络功能,并允许更灵活的出站流量管理。

若要在AKS中配置Azure负载均衡器以实现高可用性,请考虑实施以下附加措施:

  • 使用Azure AZ——跨多个Azure AZ部署AKS群集,以确保冗余和容错。
  • 配置运行状况探测——为Azure负载均衡器定义运行状况探测,以定期检查后端Pod或节点的运行状况。
  • 负载均衡器规则——配置负载均衡规则以有效分配流量。
  • 后端池扩展——根据流量模式调整后端池扩展
  • 网络安全规则——实施网络安全组(NSG)以控制进出负载均衡器的入站和出站流量。
  • Azure监视和诊断——设置监视和诊断,以深入了解负载均衡器的性能和流量分布。
  • 备份和恢复——为AKS群集和负载均衡器配置实施备份和灾难恢复策略。
  • 缩放和自动缩放——将AKS HorizontalPodAutoscaler用于应用程序,根据资源使用情况自动调整Pod数。

您可以在Microsoft Learn进一步探索此主题

后续步骤

下一篇博客中,继续探讨如何监视Azure Kubernetes服务群集,并深入探讨在智能应用中缩放和设计高可用性的实际用例。

https://www.codeproject.com/Articles/5370224/Scaling-Intelligent-Apps-on-Azure-Kubernetes-Servi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值