登录
  • 人们都希望被别人需要 却往往事与愿违
  • 宁要社会主义的防火墙 不要资本主义的互联网

Azure Container Apps 连接到虚拟机并配置CPU自动缩放

Azure Benny小土豆 1136次浏览 2190字 0个评论
文章目录[显示]

我的所有的代码最终都做成了 Docker image,因此可以非常方便的拿出来部署,自然也可以部署在各种 managed container或者managed k8s的环境。

更重要的是,Azure Container Apps 提供一定的免费额度,一般普通用户都够用的了!

这次的情况有点特殊:

  1. 如何部署到 Azure Container Apps上,并且让这个容器可以与 Azure 内的某虚拟机内网互通?
  2. 在CPU使用率比较高的情况下,如何自动扩容?如果做不到这点那也没必要用托管k8s了呀

虚拟网络

通常来说,在 Azure 上的虚拟机,如果是同一个数据中心的,想要内网互通,直接都创建在一个虚拟网络下就可以了,默认情况下就是互通的,而且默认的安全组是允许同一个虚拟网络的通信的。

如果是不同的数据中心,或者不同的订阅,那么就要创建不同的虚拟网络,不同的网段,然后创建 peering

Azure Container Apps 连接到虚拟机并配置CPU自动缩放

创建的过程非常简单,鼠标点点下一步就可以了

Azure Container Apps 连接到虚拟机并配置CPU自动缩放

容器应用的虚拟网络

容器应用需要使用独享的虚拟网络,因此没法重复利用虚拟机已有的虚拟网络。

在创建容器应用时,选择数据中心,这里就建议就近选择啦。然后Container Apps Environment 点击create new

Azure Container Apps 连接到虚拟机并配置CPU自动缩放

在新的窗口中选择 Networking,配置自己的虚拟网络,如果你的容器不需要被访问,那么甚至可以选择 internal

Azure Container Apps 连接到虚拟机并配置CPU自动缩放

配置容器

下一步需要配置我们使用什么镜像

Azure Container Apps 连接到虚拟机并配置CPU自动缩放

需要注意的是 Command Override和Arguments Override这两个。Command Override并不是dockerdocker-compose中的command,比如你像 docker-compose.yml里这样写的

services:
  generic:
    image: ghcr.io/webp-pt/webplb:latest
    command: webplb -mode=worker -queue=generic

,把这个webplb -mode=worker -queue=generic复制到 Azure Portal上,那就错了……

  • Command Override:指的是ENTRYPOINT
  • Arguments Override:指的是 CMD 😢

那就简单了嘛!直接把 webplb -mode=worker -queue=generic 这一串粘贴到 Arguments Override的文本框,恭喜你又错了🎉。

因为,每一个参数都要用逗号和空格隔开,正确的形式是这样的

webplb, -mode=worker, -queue=generic

再接下来选择容器的配置,小到 0.25C 0.5G RAM,大到 4C 8G都在这里,如需环境变量也可以一起配置

Azure Container Apps 连接到虚拟机并配置CPU自动缩放

再下一步选择端口映射,一个是容器的一个是发布的端口

Azure Container Apps 连接到虚拟机并配置CPU自动缩放

创建的过程比较慢,大概要10-20分钟。如果你的应用有 ingress,那么还会看到一个 Application URL。

测试通信

容器创建好之后,在 Monitoring – Console 可以连接到容器,或者说是pod内部,之后可以用ping……嗯?😐 其实是通的,nc一下就知道了,我检查了很多地方也检查了安全组的ICMP配置,但是还是没法ping通不过就这样了吧😐

Azure Container Apps 连接到虚拟机并配置CPU自动缩放

配置缩放

http-scaler

通过http请求数量去扩容,实时的,默认就应该有这条规则,可以根据自身的情况进行配置。在满足条件时会自动扩容

Azure Container Apps 连接到虚拟机并配置CPU自动缩放

CPU使用率缩放

需要使用 Custom,azure使用的是KEDA, 在metadata中填入两个字段

  • type,有使用率Utilization和平均值AverageValue两种
  • value:值

比如下图的写法,就是CPU使用率超过80%就触发;内存也同理,只需要把cpu改成memory就可以

Azure Container Apps 连接到虚拟机并配置CPU自动缩放

缩放上下限

在这里可以配置缩放的上下限,上限是1000,下限……可以选择0。

Azure Container Apps 连接到虚拟机并配置CPU自动缩放

对于 Container Apps来说,最低副本数量是可以为0的。这意味着,如果你的网站没有收到任何流量或请求,ACA 将会自动缩减到零副本,从而节省资源。

当然这样有一定的冷启动时间……所以如果希望长时间运行,可以改成1或者任何合适的数值。

需要注意的是,缩放出来的新的容器的配置,都和最开始创建时配置的是一样的哦。

默认缩放行为

轮询间隔30秒(KEDA),冷却期300秒。这些参数无法改动。

重新部署

如果镜像更新了,或者需要更改配置,在 Azure Portal上也可以轻松完成

Containers – Edit and deploy 在下面container image这里就可以重新配置了,包括环境变量在内。

当然了懂得都懂,一个pod可以包含多个container,这里也可以加另外一个container的。

Azure Container Apps 连接到虚拟机并配置CPU自动缩放

最终结果

Azure Container Apps 连接到虚拟机并配置CPU自动缩放

这我是没想到的!

在急需扩容的时候,我的代码却出了问题,导致程序直接卡死并不退出,无法触发扩容规则🤡

参考文档

在 Azure 容器应用中设置缩放规则 https://learn.microsoft.com/zh-cn/azure/container-apps/scale-app?pivots=azure-portal

Scaling options in Azure Container Apps https://techcommunity.microsoft.com/t5/apps-on-azure-blog/scaling-options-in-azure-container-apps/ba-p/3878282


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/aca-vm-scale.html
喜欢 (0)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)