2016-06-13 4 views
1

gliderlabs/registrator 컨테이너로 progrium/consul 컨테이너를 실행 중입니다. 도커 컨테이너가 위 또는 아래에 있는지 여부를 모니터링하기 위해 상태 확인을 만들려고합니다. 그러나 나는 건강 검진을 통해 아주 이상한 활동을 발견했다. 여기consul docker 상태 검사를 실행하는 데 문제가 있습니다.

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

내 health.json 파일입니다 : 여기가 건강 검진을 만드는 데 사용되는 명령은

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

먼저 나는 용기가 중지 될 때마다이 검사가 자동으로 서비스를 삭제 것입니다 것으로 나타났습니다 컨테이너가 부적절하게 중지되었을 때 (즉, 노드 장애를 유발할 때) 아무것도하지 않습니다.

둘째, docker_container_id이 전혀 중요하지 않은 것으로 확인되었으므로이 상태 검사는 첨부 된 영사 노드에서 실행중인 모든 컨테이너에 첨부됩니다.

영사 노드에서 실행되는 모든 도커 컨테이너에 대해 작동중인 TCP 또는 http 상태 테스트를 실행하고 싶습니다. (예, 위의 json 파일이 스크립트를 실행한다는 것을 알았습니다. 영사가 컨테이너가 멈추었는지 또는 작동하고 있는지를 알기를 원합니다. 건강 검진이 실패 할 때 내 서비스가 스스로 삭제되는 것을 원하지 않습니다. 어떻게하면 좋을까요?

참고 : 상담원 상태 검사에 영사관 documentation이 매우 부족하고 막연하고 정확하지 않습니다. 그러니 그냥 링크 만하지 말고 읽어 보라고하십시오. 올바른 방법으로 도커 건강 점검을 설정하는 방법에 대한 자세한 설명을 찾고 있습니다.

업데이트 : 여기 공식 영사 컨테이너의 최신 버전으로 영사 서버를 시작 (지금의 dev에 버전이 곧 병이 생산 버전으로 업데이트)하는 방법입니다 :

#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/

답변

0

http://gliderlabs.com/registrator/latest/user/backends/#consul 그래서 영사 컨테이너의 모든 버전을 사용하여 주위를 작동하는 솔루션은 단지 직접 호스트 시스템에 영사를 설치하는 것입니다. 이것은 https://sonnguyen.ws/install-consul-and-consul-template-in-ubuntu-14-04/에서 다음 단계를 수행하여 수행 할 수 있습니다

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!!!' 

을 그런 후 당신이 할이 만들고, 당신이 당신의 JSON 파일을 그냥 넣어 만든 후 영사 상태 확인 JSON 파일은이 작업을 수행하는 방법에 대한 정보는 here.을 찾을 수 있습니다 /etc/consul.d 디렉토리에서 영사를 consul reload으로 다시 시작하십시오. 다시로드 영사가 새 건강 검사를 추가하지 않으면 json 파일의 구문에 문제가 있습니다. 다시 편집하고 다시 시도하십시오.

1

progrium/consul 이미지에는 영사 (https://hub.docker.com/r/progrium/consul/tags/)의 구버전이 있으며 현재 유지 관리되지 않은 것으로 보입니다.

영사 https://hub.docker.com/r/library/consul/tags/

또한 서비스와 연결 영사의 확인을 등록 registrator을 사용할 수 있습니다에 대한 현재 버전 공식 이미지를 사용하여보십시오. 예.

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

더 많은 예제 :