土豆不好吃

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

文章目录[显示]

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

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

这次的情况有点特殊:

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

虚拟网络

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

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

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

容器应用的虚拟网络

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

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

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

配置容器

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

需要注意的是 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上,那就错了……

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

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

webplb, -mode=worker, -queue=generic

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

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

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

测试通信

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

配置缩放

http-scaler

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

CPU使用率缩放

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

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

缩放上下限

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

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

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

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

默认缩放行为

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

重新部署

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

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

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

最终结果

这我是没想到的!

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

参考文档

在 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
退出移动版