我在 Azure 批处理帐户池上预取了一个容器镜像,但我注意到,当新镜像上传到容器注册表时,该池不会自动刷新容器,即使我已要求 Batch 缓存最新的镜像容器容器(:最新)。
有什么好的方法可以做到这一点(除了删除并重新创建池)?池机目前是按批处理管理的;我无权访问它。刷新池详细信息会预取新容器吗?
最佳答案
容器镜像在请求时加载到计算机上,例如,如果在池级别指定,则它们会在节点启动时加载。如果它被指定为任务的一部分,那么当任务执行时,它会作为隐式 docker run 的一部分被“拉取”。如果在本地找到容器镜像(按照本地运行时的预期),后续任务执行将模拟 docker run,并且不会下载镜像。
有一些解决方法:
- 删除池或将池大小调整至零个节点,然后扩大规模以获取新图像。
- 采用滚动池策略,您可以使用相同的图像引用启动一个新池,并自动缩放/排出旧池并将工作重定向到新池。顺便说一句,无论容器如何,这通常都是一个很好的策略,无论是否选择最新的 Azure Batch 节点代理版本。
- 创建 job preparation task这样,当引用容器镜像的作业中的任务将在节点上首次运行作业时重新拉取镜像时,您可以显式发出镜像的 docker pull 。请注意,您必须删除该作业并为更新容器的每个实例重新创建它。
- 创建一个脚本,用于远程访问计算机并在所有节点上执行图像刷新命令。
关于Azure 批处理不会刷新池中缓存的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65690299/