如何清理處於死亡狀態的機器?

如何清理處於死亡狀態的機器?

我正在 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 和 A​​WS 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>始終是一個選擇。我不確定--force1.16.5是否也支援。

答案2

我也遇到過類似的情況,我發出了“朱朱解決了」(或在服務的情況下,您可以給出「juju已解決」。這解決了問題。

請查看“注意事項”部分“Juju內的移除”

相關內容