Ich habe mit einem Test-Charm auf Juju auf AWS experimentiert und es geschafft, meinen Dienst in einen völlig hängenden Zustand zu versetzen. Der Juju-Dienst gibt Folgendes zurück.
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
(Ich habe die DNS-Namen vorsichtshalber entfernt!). Die Instanz-ID für Maschine 5 wurde laut AWS-Verwaltungskonsole beendet. Keines von „destroy-unit metest/0“, „destroy-service metest“ und „destroy-machine 5“ behebt das Problem, und ich kann den Dienst in diesem Zustand nicht erneut bereitstellen. Juju Resolve scheint auch keine Wirkung zu haben.
Wenn ich das Problem google, ist die einzige Lösung, die ich finden kann, meine Umgebung komplett zu zerstören – was keine gute Option ist. Gibt es eine Möglichkeit, das Problem anderweitig zu beheben? Was ist die allgemeine Methode zum Debuggen dieser Art von Problemen?
Die Grundursache des Problems: Wir verwenden Chef für den Großteil unserer Orchestrierung und haben festgestellt, dass gelegentliche Fehler zwischen Chef und AWS API verwaiste Instanzen hinterlassen. Da alle Instanzen, die wir von Chef aus starten, mit einem Namen versehen sind und diese verwaisten Instanzen unbenannt sind, haben wir unseren Knife-Plugins Code hinzugefügt, um unbenannte Instanzen zu beenden, um Amazon nicht unnötig Geld zu geben. Sie können sich sicher vorstellen, worauf das hinausläuft ...
Gibt es eine Möglichkeit, Maschinen zu bereinigen, wenn sie sich einmal in diesem Zustand befinden (--force hilft nicht) – und ich würde auch gern wissen, ob es Pläne gibt, die Benennung von Instanzen zu ermöglichen, sodass sie in der EC2-Verwaltungskonsole identifizierbar sind (so etwas wie juju-- wäre ideal)?
Dinge, die ich versucht habe:
destroy-machine --force
scheint die Dinge nicht zu bereinigen. Ich erhalte keine Fehlermeldung, aber es scheint, als ob sich am Status nichts geändert hat.
Antwort1
Du könntest es versuchen:
juju destroy-machine --force 5
Die --force
Option destroy-machine
ist seit 1.16.5 verfügbar und sollte die hängengebliebene Maschine und alle Einheiten darauf entfernen. Dann sollten Sie Ihren Dienst erneut bereitstellen können, aber wenn die Meldung „Dienst existiert bereits“ erscheint, stellen Sie ihn einfach unter einem anderen Namen bereit.
Wenn alles andere fehlschlägt, juju destroy-environment -e <name>
ist es immer eine Option. Ich bin nicht sicher, ob es --force
in 1.16.5 auch unterstützt wurde.
Antwort2
Ich hatte eine ähnliche Situation und ich habe "Juju gelöst" (oder im Servicefall können Sie „juju solved“ angeben. Damit war das Problem gelöst.
Bitte beachten Sie den Abschnitt „Vorbehalte“ von„Entfernung innerhalb von Juju“