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 も効果がないようです。
この問題を Google で検索すると、環境を完全に消去するしか解決策が見つかりませんが、これはあまり良い選択肢ではありません。他の方法で問題を解決する方法はありますか? この種の問題をデバッグする一般的な方法は何ですか?
問題の根本的な原因: 私たちはほとんどのオーケストレーションに 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 以降で使用可能で、ハングしたマシンとそのマシン上のすべてのユニットを削除します。その後、サービスを再デプロイできるはずですが、「サービスが既に存在します」と表示された場合は、別の名前でデプロイしてください。
他の方法がすべて失敗した場合は、常にオプションになります。1.16.5でもjuju destroy-environment -e <name>
サポートされているかどうかはわかりません。--force
答え2
私も同じような状況に陥り、「ジュジュ解決(またはサービスの場合は、「juju 解決済み」と入力できます。これで問題は解決しました。)
「注意事項」のセクションをご覧ください。「ジュジュ内の除去」