2016-06-13 25 views
1

Ich benutze den Progrium/Konsul Container mit dem Gliderlabs/Registrator Container. Ich versuche, Health Checks zu erstellen, um zu überwachen, ob meine Docker-Container hoch oder runter sind. Jedoch bemerkte ich einige sehr seltsame Aktivitäten mit Gesundheitscheck, die ich machen konnte. Hier ist der Befehl, den ich verwenden, um die Gesundheitsprüfung zu erstellen:Probleme beim Ausführen eines Consul Docker Health Checks

curl -v -X PUT http://$CONSUL_IP_ADDR:8500/v1/agent/check/register -d @/home/myUserName/health.json 

Hier ist meine health.json Datei:

{ 
"id": "docker_stuff", 
"name": "echo test", 
"docker_container_id": "4fc5b1296c99", 
"shell": "/bin/bash", 
"script": "echo hello", 
"interval": "2s" 
} 

Zuerst bemerkte ich, dass diese Prüfung automatisch den Dienst löschen würde, wenn der Behälter wurde gestoppt richtig, aber würde nichts tun, wenn der Behälter nicht ordnungsgemäß gestoppt wurde (dh während eines Knotenfehlers).

Zweitens bemerkte ich, dass die docker_container_id überhaupt keine Rolle spielte, diese Gesundheitsprüfung würde sich an jeden Container anschließen, der auf dem Consul-Knoten ausgeführt wurde, an den er angehängt war.

Ich möchte nur einen funktionierenden tcp oder HTTP-Gesundheitstest für jeden Docker-Container ausführen, der auf einem Consul-Knoten ausgeführt wird (ja, ich weiß, dass meine obige JSON-Datei ein Skript ausführt, ich habe das nach dem Beispiel der Dokumentation erstellt). Ich möchte nur, dass Konsul weiß, ob ein Container gestoppt ist oder läuft. Ich möchte nicht, dass sich meine Dienste selbst löschen, wenn eine Statusprüfung fehlschlägt. Wie würde ich das tun?

Hinweis: Ich finde die Konsul documentation Agent Health Checks sehr mangelhaft, vage und ungenau. Also, bitte verlinke nicht einfach darauf und sag mir, dass ich es lesen soll. Ich bin auf der Suche nach einer vollständigen Erklärung, wie genau Docker Health Checks richtig eingerichtet werden.

Update: Hier ist, wie Consul-Server mit der aktuellsten Version der offiziellen Konsuls Container starten (jetzt seine die Entwickler-Versionen bald krank aktualisieren es mit den Produktionsversionen):

#bootstrap server 
docker run -d \ 
-p 8300:8300 \ 
-p 8301:8301 \ 
-p 8301:8301/udp \ 
-p 8302:8302 \ 
-p 8302:8302/udp \ 
-p 8400:8400 \ 
-p 8500:8500 \ 
-p 53:53/udp \ 
--name=dev-consul0 consul agent -dev -ui -client 0.0.0.0 

#its IP address will then be the IP of the host machine 
#lets say its 172.17.0.2 

#start the other two consul servers, without web ui 
docker run -d --name --name=dev-consul1 \ 
-p 8300:8300 \ 
-p 8301:8301 \ 
-p 8301:8301/udp \ 
-p 8302:8302 \ 
-p 8302:8302/udp \ 
-p 8400:8400 \ 
-p 8500:8500 \ 
-p 53:53/udp \ 
consul agent -dev -join=172.17.0.2 

docker run -d --name --name=dev-consul2 \ 
-p 8300:8300 \ 
-p 8301:8301 \ 
-p 8301:8301/udp \ 
-p 8302:8302 \ 
-p 8302:8302/udp \ 
-p 8400:8400 \ 
-p 8500:8500 \ 
-p 53:53/udp \ 
consul agent -dev -join=172.17.0.2 

# then heres your clients 
docker run -d --net=host --name=client0 \ 
-e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' \ 
consul agent -bind=$(hostname -i) -retry-join=172.17.0.2 

https://hub.docker.com/r/library/consul/

Antwort

0

So eine Lösung, die eine Version der Konsul Container mit Arbeiten rund um ist nur direkt Konsul auf dem Host-Rechner zu installieren. Dies kann durch die folgenden Schritte aus https://sonnguyen.ws/install-consul-and-consul-template-in-ubuntu-14-04/ erfolgen:

sudo apt-get update -y 
sudo apt-get install -y unzip curl 
sudo wget https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip 

sudo unzip consul_0.6.4_linux_amd64.zip 
sudo rm consul_0.6.4_linux_amd64.zip 

sudo chmod +x consul 
sudo mv consul /usr/bin/consul 

sudo mkdir -p /opt/consul 
cd /opt/consul 
sudo wget https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_web_ui.zip 
sudo unzip consul_0.6.4_web_ui.zip 
sudo rm consul_0.6.4_web_ui.zip 

sudo mkdir -p /etc/consul.d/ 

sudo wget https://releases.hashicorp.com/consul-template/0.14.0/consul-template_0.14.0_linux_amd64.zip 
sudo unzip consul-template_0.14.0_linux_amd64.zip 
sudo rm consul-template_0.14.0_linux_amd64.zip 
sudo chmod a+x consul-template 
sudo mv consul-template /usr/bin/consul-template 


sudo nohup consul agent -server -bootstrap-expect 1 \ 
    -data-dir /tmp/consul -node=agent-one \ 
    -bind=$(hostname -i) \ 
    -client=0.0.0.0 \ 
    -config-dir /etc/consul.d \ 
    -ui-dir /opt/consul/ & 

echo 'Done with consul install!!!' 

Dann, nachdem Sie tun dies, um Ihre Dateien Konsul Gesundheitscheck json erstellen, Informationen darüber, wie das zu tun, kann here. finden Nachdem Sie Ihre JSON-Dateien erstellen, sie setzen in das Verzeichnis /etc/consul.d und starten Sie einen erneuten Kontakt mit consul reload. Wenn nach dem Reload Consul nicht Ihre neuen Health Checks hinzufügen, dann stimmt etwas mit der Syntax Ihrer JSON-Dateien nicht. Gehe zurück, bearbeite sie und versuche es erneut.

1

Progrium/Konsul Bild hat alte Version von Consul (https://hub.docker.com/r/progrium/consul/tags/) und derzeit scheint nicht gepflegt werden.

Bitte versuchen Sie es für Konsul offizielle Bild mit der aktuellen Version zu verwenden https://hub.docker.com/r/library/consul/tags/

Sie können auch registrator verwenden, um Kontrollen in Konsuls registrieren mit Ihrem Service verbunden. z.B.

SERVICE_[port_]CHECK_SCRIPT=nc $SERVICE_IP $SERVICE_PORT | grep OK 

Weitere Beispiele: http://gliderlabs.com/registrator/latest/user/backends/#consul