
我正在 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決心似乎也沒有效果。
谷歌搜尋這個問題,我能找到的唯一解決方案是完全破壞我的環境 - 這不是一個很好的選擇。否則有辦法解決這個問題嗎?調試此類問題的一般方法是什麼?
問題的根本原因:我們在大部分編排中使用 Chef,並發現 Chef 和 AWS API 之間偶爾出現的故障會留下孤立的實例。由於我們從 Chef 啟動的所有實例都帶有名稱標記,並且這些孤立實例未命名,為了避免不必要地向 Amazon 提供資金,我們在 Knife 插件中添加了代碼來終止未命名的實例。我相信你能明白這是怎麼回事...
一旦機器處於這種狀態,有什麼方法可以清理它們(--force沒有幫助) - 我還想知道是否有任何計劃允許實例被命名,以便它們在EC2管理中可識別控制台(類似juju 的東西-將是理想的)?
我嘗試過的事情:
destroy-machine --force
似乎沒有清理乾淨東西。我沒有收到錯誤,但狀態似乎沒有任何變化。
答案1
你可以嘗試:
juju destroy-machine --force 5
此--force
選項destroy-machine
自 1.16.5 起可用,並且應刪除掛起的機器及其上的所有單元。然後您應該能夠重新部署您的服務,但如果它顯示“服務已存在”,只需使用不同的名稱進行部署即可。
如果所有其他方法都失敗了,那麼juju destroy-environment -e <name>
始終是一個選擇。我不確定--force
1.16.5是否也支援。
答案2
我也遇到過類似的情況,我發出了“朱朱解決了」(或在服務的情況下,您可以給出「juju已解決」。這解決了問題。
請查看“注意事項”部分“Juju內的移除”