我想使用Azure容器实例使用旧版应用程序运行长时间(10分钟)的分析测试。当某项出现在CosmosDB中时,我想触发新容器实例的启动。
容器将具有轻量级代理,它将从CosmosDB中提取数据,将数据写入容器文件系统,运行旧版应用程序,获取输出并将其推回CosmosDB。
宇宙只是一个例子。可能是blob或其他任何可以存储几Mb数据的东西。
是否可以通过这种方式触发新容器的创建?任何参考/示例代码?
是否有关于持续部署到Azure容器实例的最佳实践,以便保留公共IP?或者将Azure保留IP映射到ACI在部署时绑定的动态IP?
我正在处理一个新的容器映像,它运行我的工作进程以排空Azure队列.一旦队列为空,我的应用程序退出,我希望ACI取消分配并被删除.我所看到的是ACI棒.它处于"终止"状态,重启次数为0,正如我所料(在Azure门户中看到),但为什么不完全从ACI列表中删除/删除?
我使用Azure cli创建这些实例,并指定restart never选项.这是我的命令行(减去图像特定的细节):
az container create --cpu 4 --memory 14 --restart-policy never --os-type windows --location eastus
Run Code Online (Sandbox Code Playgroud)
我当然也想知道结算停止的地方.一旦我看到终止状态,我希望结算已经停止.虽然目前尚不清楚.我当然可以手动删除ACI,它会立即消失,如果退出应用程序也一样吗?
我是在 Azure 中运行容器的新手,我对下面的用例感到困惑,如果您觉得我错误地使用了容器,请随时给我另一种方法。
核心问题:我无法/不知道如何通过命令行或 ARM 模板部署在“停止”状态下创建容器实例
长读用例:
我创建了一个运行 python 作业的 docker 映像。
该作业需要每天运行并通过数据工厂触发。数据工厂将确定环境、设置 docker 命令、更新容器映像,然后通过批处理帐户执行容器。该作业本身会执行 api 调用并将一些数据写入 sql。这部分工作正常,容器状态进入运行状态,然后停止(我关闭了自动重启)
在 Azure DevOps 中,我有一个管道来构建作业的映像并将其存储在 azure 存储库中。这很好用。
由于我需要一个容器实例作为我的资源组中的资源,因此我决定将它们放入我的基础 ARM 模板中。问题:当使用 DevOps / Arm 模板部署来部署容器时,它会部署并运行作业实例,这不太好,我希望在“停止”状态下创建容器。原因是该作业否则会将数据写入我们的数据库,这是不需要的。
我想知道什么是最好的方法/最好的指导方针是什么,我考虑了这两种情况,但对于这两种情况,我的直觉都说不。
场景 1:拥有一个始终运行的容器(让它执行 bin/bash)并使用“az container exec”传递命令。为什么我不想这样做:我目前每个环境都有一个图像,该图像具有该环境的确切工作,并且我没有看到让 3 个备用容器一直运行以每天触发一次的有用性
场景 2:不通过 DevOps 处理容器实例创建,而是忽略问题并使用数据工厂和批处理帐户创建它。这意味着,当触发作业时,它将创建(并因此运行容器)。随后,我可以在使用后将其删除。
为什么我不想这样做:我将容器实例视为基础设施的一部分(因为它是您在资源组内部署的东西,如果我的观点错误,请纠正我)因此从这个意义上说,通过管理资源计划的数据工厂作业看起来不太好,它是一种克服无法在停止状态下部署容器实例的问题的黑客方法。
# set base image (host OS)
FROM python:3.7-buster
# Argument for environment selection
ARG environment
ENV environment ${environment}
# set the working directory in the container
WORKDIR /
# copy the dependencies file to the working …Run Code Online (Sandbox Code Playgroud) [PS C:\Source\VelocityAzurev0.10.0\credentialagent-docker-compose> docker compose up
[+] Running 0/1
- Group credentialagent-docker-compose Error 1.7s
containerinstance.ContainerGroupsClient#CreateOrUpdate: Failure sending request: StatusCode=400 -- Original Error: Code="DuplicateImageRegistries" Message="Duplicate image registries 'index.docker.io' found in the 'imageRegistryCredentials' of container group 'credentialagent-docker-compose'."
PS C:\Source\VelocityAzurev0.10.0\credentialagent-docker-compose>]
Run Code Online (Sandbox Code Playgroud)
直到今天早上,这对我来说一直有效,没有明显的 YAML 更改。如果我调整 YAML 以使用本地与 azure 资源并使用本地 Docker 上下文,则组合可以工作。先前成功的运行已通过“compose down”删除。我仔细检查了 Azure 订阅,资源组中似乎不存在容器实例或组。
我似乎找不到与 Code="DuplicateImageRegistries" 有关的此特定错误的任何相关问题/解决方案。
我通过 Azure CLI 创建了一个具有新 vnet 和子网的新 Azure 容器实例 (ACI)
我从 Azure 门户中删除了 ACI,现在我尝试删除子网,但出现以下错误:
无法删除子网“SubnetNAme”。错误:子网 SubnetNAme 正被 aci-network-profile-VNETNAME-SubnetNAme/eth0/ipconfigprofile 使用,无法删除。要删除子网,请删除子网内的所有资源。请参见 aka.ms/deletesubnet。
如果我尝试访问 aci-network-profile-VNETNAME-SubnetNAme/eth0/ipconfigprofile,它会告诉我不存在此资源:
详细信息 未找到资源,可能已被删除。如果这是从仪表板上的固定磁贴启动的,则应将其删除。
我有一个 Azure 逻辑应用程序,可以正确创建 Azure 容器实例。容器启动、完成其工作并终止。我需要使用适当的连接器收集其日志并将其写入天蓝色的 blob。
我已准备就绪,但我不知道在使用“获取容器日志”连接器收集日志之前如何等待容器终止。
如果容器作业将持续可预测的时间,我可以在获取日志之前使用延迟连接器,这就足够了(我已经尝试过短作业并且效果很好)。但我的工作可能会持续几个小时,这取决于一些外部因素,所以延迟技术不起作用。
我尝试使用“直到”连接器,以及延迟和“获取容器组的属性”容器来等待容器的状态不“终止”,但没有成功(也许我做错了)。无论如何,这可能相当昂贵,因为每张“支票”都要收费。
在询问其日志之前如何等待容器终止?
谢谢。
在 ACI 上运行简单的 Linux 容器时,门户中“图形化”的 CPU 使用率与在容器本身中运行“top”的 CPU 使用率之间存在巨大差异。
我可以看到我的进程在“top”运行,CPU 使用率保持在 5% 左右,机器上的负载低于 0.10,但门户报告使用率约为 60%。它是一个单处理器容器。
在较重的负载下,我看到 CPU 使用率为 300-400%,这感觉像是与处理器数量相关的问题,但即使这样也不能累加,并且如前所述,它是一个单处理器容器
有什么想法吗 ??
我在 vnet 中有 Azure 容器实例,我想实现负载平衡,但想不出可行的解决方案。对于上下文,它将是一组联系负载平衡资源的虚拟机,该资源会将请求定向到其中一个 ACI。
到目前为止,我尝试过的有 Azure 负载均衡器(不适用于 ACI)和 Azure 流量管理器(不能位于 vnet 内)。我认为应用程序网关也不是一个可行的解决方案。我想知道是否有人以前遇到过这种情况,他们是如何克服的,或者是否有人有我可以测试的潜在解决方案?
我们已经部署了一些 API(很少使用 Node.js/Express.js 开发,其他使用 Python Quart 开发)。我们的所有 API 均使用 Azure 容器化实例进行部署。我们通过 Postman 设置了定期 API 监控。API 在大约 20% 的情况下会失败,并出现错误:套接字挂起。我们在开发区域或通过浏览器访问 API 时从未遇到过此问题。什么可能导致此套接字挂起问题以及我们如何克服它?
我们的 Node.js API Dockerfile 设置如下:
FROM node:16
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN rm -rf .env
RUN mv production.env .env
#ENV PORT=5000
EXPOSE 5000
CMD ["npm", "run", "prod"]
Run Code Online (Sandbox Code Playgroud)
Python Quart API Dockerfile 设置如下:
FROM continuumio/miniconda3
COPY . /api/
WORKDIR /api/src
RUN conda env create -f /api/environment.yml
COPY entrypoint.sh ./
RUN chmod +x ./entrypoint.sh
ENTRYPOINT …Run Code Online (Sandbox Code Playgroud)