Azure 批处理不会刷新池中的缓存容器
Azure batch does not refresh cached containers in the pool
我在 Azure 批处理帐户池中预取了一个容器映像,但我注意到当新映像上传到容器注册表时池不会自动刷新容器,即使我已要求 Batch 缓存最新的容器container(:latest).
有什么好的方法可以做到这一点(除了删除并重新创建池之外)?池机目前是批量管理的;我无权访问它。刷新池详细信息会预取新容器吗?
容器镜像在请求时加载到机器上,例如,如果在池级别指定,则它们在节点启动时加载。如果它被指定为任务的一部分,那么当任务执行时,它被“拉”为隐式 docker run
的一部分。后续任务执行将模拟 docker run
,并且如果在本地找到容器镜像,则不会下载镜像,正如您在本地 运行ning 时所期望的那样。
有一些解决方法:
- 删除池或将池大小调整为零个节点,然后向上扩展以获取新图像。
- 采用滚动池策略,在该策略中启动具有相同图像引用的新池,然后 autoscale/drain 关闭旧池并将工作重定向到新池。顺便说一句,这通常是一个很好的策略,无论是否使用容器,都可以选择最新的 Azure Batch 节点代理版本。
- 创建一个 job preparation task,这样当引用容器映像的作业中的任务将在第一个 运行节点上的作业。请注意,您必须删除作业并为更新容器的每个实例重新创建它。
- 创建一个远程进入机器并在所有节点上执行图像刷新命令的脚本。
我在 Azure 批处理帐户池中预取了一个容器映像,但我注意到当新映像上传到容器注册表时池不会自动刷新容器,即使我已要求 Batch 缓存最新的容器container(:latest).
有什么好的方法可以做到这一点(除了删除并重新创建池之外)?池机目前是批量管理的;我无权访问它。刷新池详细信息会预取新容器吗?
容器镜像在请求时加载到机器上,例如,如果在池级别指定,则它们在节点启动时加载。如果它被指定为任务的一部分,那么当任务执行时,它被“拉”为隐式 docker run
的一部分。后续任务执行将模拟 docker run
,并且如果在本地找到容器镜像,则不会下载镜像,正如您在本地 运行ning 时所期望的那样。
有一些解决方法:
- 删除池或将池大小调整为零个节点,然后向上扩展以获取新图像。
- 采用滚动池策略,在该策略中启动具有相同图像引用的新池,然后 autoscale/drain 关闭旧池并将工作重定向到新池。顺便说一句,这通常是一个很好的策略,无论是否使用容器,都可以选择最新的 Azure Batch 节点代理版本。
- 创建一个 job preparation task,这样当引用容器映像的作业中的任务将在第一个 运行节点上的作业。请注意,您必须删除作业并为更新容器的每个实例重新创建它。
- 创建一个远程进入机器并在所有节点上执行图像刷新命令的脚本。