【问题标题】:Azure Container Instance apparently keeps running after Stop or DeleteAzure 容器实例显然在停止或删除后继续运行
【发布时间】:2019-05-07 17:43:41
【问题描述】:

我们有一个使用 Azure ServiceBus 的基于微服务的应用程序。 我们将其中一项服务(传奇管理器)部署为 .Net Core 控制台应用程序在 docker 容器 (Linux) 中。我们使用 docker-compose 并将一组 2 个容器(包括控制台应用程序)部署到一个 Azure 容器实例中。

我们使用 MassTransit 与 Azure ServiceBus 合作。

控制台应用程序(传奇管理器)通过 MassTransit.BusControlExtensions.Start() 方法启动服务总线。

此时控制台应用程序(传奇管理器)或多或少已准备就绪。

旁注:有问题的应用程序(传奇管理器)运行 Automatonymous 状态机

现在,如果我们停止删除带有 saga 管理器的容器,然后重新启动它 - 它会停止接收总线消息。

似乎 每次重新启动 都会创建一个新的 saga 管理器实例(线程?) - 而旧实例(线程?)以某种方式持续存在。。 p>

即使我们在 Azure 上完全删除 Container Instance 资源 - 我们仍然可以观察到总线消息被某些东西拾取...

删除容器组本身

后,容器的应用仍然存在

有没有办法彻底杀死分离的实例/线程?

有人熟悉 Azure 容器实例的这种行为吗?

PS 在所描述的场景中,停止/删除操作总是成功的

PS2:这里是使用 az container create 命令部署有问题的容器组的 yaml 文件:

apiVersion: 2018-10-01
location: westeurope
name: #{groupName}#
properties:
  containers:
  - name: saga-aci
    properties:
      image: #{acrLoginServer}#/sagaazure:latest
      resources:
        requests:
          cpu: 1
          memoryInGb: 1.5
      ports:
      - port: 80
      - port: 443
      - port: 9350
  - name: proxymanager-aci
    properties:
      image: #{acrLoginServer}#/proxymanager:latest
      resources:
        requests:
          cpu: 1
          memoryInGb: 1.5
      ports:
      - port: 22999
      - port: 24000
  osType: Linux
  ipAddress:
    type: Public
    ports:
    - protocol: tcp
      port: '80'
    #- protocol: tcp
      #port: '8080'
    - protocol: tcp
      port: '22999'
    - protocol: tcp
      port: '24000'
    - protocol: tcp
      port: '443'
    - protocol: tcp
      port: '9350'
  imageRegistryCredentials:
    - server: #{acrLoginServer}#
      username: #{acrName}#
      password: #{acrPassword}#
tags: null
type: Microsoft.ContainerInstance/containerGroups

也许这是一个重星政策问题?

【问题讨论】:

  • 不,我已经尝试了所有的操作组合——删除、启动;停止,启动等。每次旧进程持续存在,不能死。例如,即使对于 az 容器重启,旧进程仍然存在。重启前 - 1 个 saga 管理器正在运行,重启后 -2 个 saga 管理器正在运行;无止境。 az container delete 也会发生此过程乘法。在停止或删除之后,当然,你不能进入容器 - 但天蓝色的总线进程仍在运行。疯了。
  • 如果您删除容器组,您确定 saga 仍在运行吗?不是其他服务?
  • 所以用不精确的术语来说——容器被正确地杀死了,这是真的。然而,似乎一个线程/进程在我们的messgae总线上徘徊并与之交互
  • 回答您的问题:我将通过应用程序洞察添加日志记录以确保但现在我们确信 SOMETHING 会接收总线消息并处理它们 - 即使在杀死所有可能的 saga 实例(尤其是容器组 - 通过 azure 门户、命令行、azure devops;也可以通过单独停止容器)。我将添加更多日志记录并让您知道。目前,我们有理由确定它仍在运行。 PS 其他服务已关闭 - 我们处于开发模式,所以我们可以这样做

标签: azure docker azureservicebus azure-container-instances automatonymous


【解决方案1】:

Azure Container Instance的操作有几点需要注意。

停止动作,如果你停止容器组,那么它将终止并回收组中的所有容器,并且不保留容器的状态。如果容器组已经终止,则无效。

启动动作,如果你从停止状态启动容器组,那么将会有一个新的部署与相同的容器配置。如果图像更新,它将拉新的。启动动作将启动整个容器组,但不能启动其中的特殊容器组。

对于删除操作,如果您删除容器组,我认为容器组内的应用程序不会仍然存在。该操作将需要很短的时间。但最终,容器组将被完全删除。

您可以在Azure Container Instance Operations 中查看更多详细信息。我对 Azure ServiceBus 没有任何经验,以上仅针对 Azure 容器实例。如果您还有任何问题,请告诉我。

【讨论】:

  • 检查我没有发疯,这里是日志摘录:ibb.co/2Nvhf7P 在大约 22:02 我完全删除了容器实例资源;在 22:07 左右,我发送了一条触发总线消息,似乎在删除时在虚空中创建了一个新实例。这可能是过度重启策略的结果
  • 我添加了用于部署容器组的config yaml,请看一下
  • 好的,为了排除故障,我将 restartPolicy 设置为 NEVER。它成功了——容器可以被永远杀死......我对这个解决方案并不满意,我认为我们遇到了容器实例的缺陷(或者至少是一个应该更好地记录的特性)。明天我将尝试 restartPolicy=OnFailure
  • 我在上次部署/容器升级期间遇到了一些问题 - 但让我确认一下。这个问题在 restarPolicy=Always 和最有可能在 restartPolicy=OnFailure 的情况下仍然存在。我将重现该问题并记下 App Insights 中的资源 ID。目前我不会说部署过程是稳定的。将确认。
  • @sztepen 我还将使用 MT 和 Azure SB 将一些服务部署到容器实例。非常有兴趣了解此问题的任何更改或您可能发现的任何进一步解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
相关资源
最近更新 更多