我正在使用 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 和 AWS API 之间偶尔出现故障,导致出现孤立实例。由于我们从 Chef 启动的所有实例都标有名称,而这些孤立实例是未命名的,因此为了避免不必要地向亚马逊提供资金,我们在 Knife 插件中添加了代码来终止未命名的实例。我相信您一定知道这是怎么回事……
有没有什么方法可以在机器处于这种状态时清理它们(--force 没有帮助) - 并且我还想知道是否有任何计划允许命名实例以便在 EC2 管理控制台中识别它们(像 juju-- 这样的东西会很理想)?
我尝试过的事情:
destroy-machine --force
似乎没有清理干净。我没有收到错误,但状态似乎没有任何变化。
答案1
您可以尝试:
juju destroy-machine --force 5
选项自 1.16.5 开始可用,应该可以删除挂起的机器及其上的所有单元。然后您应该能够重新部署您的服务,但如果它显示“服务已存在”,则只需使用不同的名称进行部署即可--force
。destroy-machine
如果其他方法都失败了,juju destroy-environment -e <name>
这始终是一个选择。我不确定它--force
在 1.16.5 中是否也支持。
答案2
我遇到过类似的情况,我发出了“魔咒已解决“(或者在服务的情况下,您可以说“juju solved”。这解决了问题。
请参阅“注意事项”部分“Juju 内的移除”