如何清理处于死机状态的机器?

如何清理处于死机状态的机器?

我正在使用 AWS 上的 Juju 上的测试魅力进行一些实验,并设法使我的服务进入完全挂起状态。juju 服务返回以下内容。

environment: amazon
machines:
  "0":
    agent-state: started
    agent-version: 1.16.5
    dns-name: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    instance-id: i-7c2f4c52
    instance-state: running
    series: precise
    hardware: arch=amd64 cpu-cores=1 cpu-power=100 mem=1740M root-disk=8192M
  "5":
    agent-state: down
    agent-state-info: (started)
    agent-version: 1.16.5
    instance-id: i-9cb9cbb2
    instance-state: missing
    series: precise
    hardware: arch=amd64 cpu-cores=1 cpu-power=100 mem=1740M root-disk=8192M
services:
  metest:
    charm: local:precise/metest-0
    exposed: false
    life: dying
    relations:
      cluster:
      - metest
    units:
      metest/0:
        agent-state: down
        agent-state-info: (started)
        agent-version: 1.16.5
        life: dying
        machine: "5"
        open-ports:
        - 80/tcp
        public-address: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

(为了以防万一,我删除了 DNS 名称!)。根据 AWS 管理控制台,机器 5 的实例 ID 已被终止。“destroy-unit metest/0”、“destroy-service metest”和“destroy-machine 5”都无法解决问题,我无法在这种状态下重新部署服务。juju resolve 似乎也没有效果。

在谷歌上搜索这个问题,我能找到的唯一解决办法就是彻底摧毁我的环境——这不是一个好选择。除了这个,我还有没有什么办法可以解决这个问题?调试这种问题的一般方法是什么?

问题的根源:我们在大部分编排中都使用 Chef,并且发现 Chef 和 A​​WS API 之间偶尔出现故障,导致出现孤立实例。由于我们从 Chef 启动的所有实例都标有名称,而这些孤立实例是未命名的,因此为了避免不必要地向亚马逊提供资金,我们在 Knife 插件中添加了代码来终止未命名的实例。我相信您一定知道这是怎么回事……

有没有什么方法可以在机器处于这种状态时清理它们(--force 没有帮助) - 并且我还想知道是否有任何计划允许命名实例以便在 EC2 管理控制台中识别它们(像 juju-- 这样的东西会很理想)?

我尝试过的事情:

  • destroy-machine --force似乎没有清理干净。我没有收到错误,但状态似乎没有任何变化。

答案1

您可以尝试:

juju destroy-machine --force 5

选项自 1.16.5 开始可用,应该可以删除挂起的机器及其上的所有单元。然后您应该能够重新部署您的服务,但如果它显示“服务已存在”,则只需使用不同的名称进行部署即可--forcedestroy-machine

如果其他方法都失败了,juju destroy-environment -e <name>这始终是一个选择。我不确定它--force在 1.16.5 中是否也支持。

答案2

我遇到过类似的情况,我发出了“魔咒已解决“(或者在服务的情况下,您可以说“juju solved”。这解决了问题。

请参阅“注意事项”部分“Juju 内的移除”

相关内容