如何在Azure VM规模集部署Flask应用并配置负载均衡与启动脚本?
Azure VMSS+负载均衡器部署Flask应用指南
一、关联负载均衡器与VMSS,实现流量分发
你已经创建了LB、VMSS和VNet,接下来完成以下配置:
- 将VMSS加入LB后端池:进入VMSS资源页,选择「负载均衡」,关联已创建的负载均衡器,指定LB中对应的后端地址池(若LB无后端池,先在LB的「后端池」页面创建,选择VMSS所在的VNet子网)。
- 配置健康探测:在LB的「健康探测」中新建探测规则,协议选HTTP/HTTPS,端口填Flask应用的监听端口(如5000),探测路径建议设为
/health(需在Flask中添加健康检查接口:@app.route('/health')返回200 OK),确保LB能识别实例是否正常运行。 - 创建负载均衡规则:在LB的「负载均衡规则」中新建规则,前端端口设为80(或443,若用HTTPS),后端端口匹配Flask的监听端口,后端池选择关联的VMSS池,健康探测选刚才创建的规则,会话持久性按需选择(分布式场景建议选「无」)。
二、修正Flask应用监听地址
单实例能通过公网IP访问,但要接收LB分发的流量,必须让Flask监听实例的所有网卡地址,启动命令改为:
app.run(host='0.0.0.0', port=5000)
建议用systemd将Flask配置为后台服务,避免实例重启后服务中断。
三、为VMSS添加启动脚本(ARM/Terraform)
ARM模板实现
在VMSS的virtualMachineProfile节点下添加自定义脚本扩展,示例片段:
"virtualMachineProfile": { "extensionProfile": { "extensions": [ { "name": "flask-setup-script", "properties": { "publisher": "Microsoft.Azure.Extensions", "type": "CustomScript", "typeHandlerVersion": "2.1", "autoUpgradeMinorVersion": true, "settings": { "fileUris": ["https://your-storage-blob-url/setup-flask.sh"], "commandToExecute": "./setup-flask.sh" } } } ] } }
setup-flask.sh脚本可包含安装Python依赖、拉取Flask代码、配置systemd服务等操作。
Terraform实现
在azurerm_virtual_machine_scale_set资源中添加自定义脚本扩展块:
resource "azurerm_virtual_machine_scale_set" "flask_vmss" { # 基础VMSS配置(如SKU、存储、网络等)... extension { name = "flask-setup-script" publisher = "Microsoft.Azure.Extensions" type = "CustomScript" type_handler_version = "2.1" settings = jsonencode({ fileUris = ["https://your-storage-blob-url/setup-flask.sh"] commandToExecute = "./setup-flask.sh" }) } }
若脚本无需公开,可将脚本内容写入protected_settings的commandToExecute字段,或使用存储账户SAS令牌限制访问。
四、自动缩放配置提示
在VMSS的「自动缩放」页面设置缩放规则,针对N系列GPU实例,建议基于GPU使用率设置阈值(如使用率>70%时增加实例,<30%时减少),也可结合CPU使用率或自定义指标(如请求队列长度),确保流量能被动态扩容的实例承接。
内容的提问来源于stack exchange,提问作者Ashcom
相关产品推荐
相关产品推荐

