ECS 클러스터에서 실행되는 Docker 컨테이너(Spring Boot)가 있습니다. Elastic Load Balancing 없이 실행합니다.
가동 중지 시간 없이 서비스를 업데이트하려고 하므로 새 작업이 실행되고 정상 상태가 되면 이전 작업이 중지됩니다. 작업 정의에 상태 확인을 추가하려고 시도했지만 작동을 거부했습니다. 나는 이러한 기본 상태 확인 명령을 시도했습니다.
[ "CMD-SHELL","exit 0" ]
[ "CMD-SHELL","exit 1" ]
전자는 HEALTHY 상태의 작업이 발생하고 후자는 상태 확인에 실패할 것으로 예상됩니다. 두 경우 모두 UNKNOWN 상태로 새 작업이 정상적으로 시작됩니다.
이것이 ELB를 사용하지 않는 것과 관련이 있나요? 문서가 그다지 좋지 않으며 Google 검색에서 유용한 정보가 반환되지 않았습니다.
답변1
raja의 답변과 Andrew의 edite는 ECS/FARGATE에 대해 약간 벗어났습니다. 대괄호와 따옴표가 없습니다.
CMD-SHELL, curl -f http://localhost/ || exit 1
ECS의 작업 정의에 상태 점검 정보를 입력하는 경우 올바른 형식입니다.
ECS/FARGATE에 대한 문서가 유효하지 않음 https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_HealthCheck.html
답변2
주어진 명령은 구문상 유효하지 않습니다.
그것은해야한다
[ "CMD-SHELL", "curl -f http://localhost/ || exit 1" ]
CMD
또는CMD-SHELL
- 컨테이너의 기본 셸을 사용하여 명령을 실행합니다.curl -f http://localhost/
- 상태 확인을 검증하기 위해 컨테이너 내부에서 실행해야 하는 실제 명령입니다.exit 1
- 컬 명령이 실패하면 쉘이 종료됩니다.
따라서 아래와 같이 명령을 변경해야 합니다.
[ "CMD-SHELL", "echo hi || exit 1" ]
echo hi는 내 예에서 건강 검사 명령입니다. "echo hi" 대신 명령을 실행할 수 있습니다. 컨테이너에서 성공적으로 실행되면 종료 상태 0을 반환해야 합니다.
답변3
ecs-cli를 사용하여 Fargate 서비스를 배포하는 경우 작업 정의에서 상태 확인을 지원하는 것으로 업그레이드해야 한다는 것을 알았습니다. 또한 CMD-SHELL을 사용할 필요가 없다는 사실도 발견했습니다. 실제로 CMD-SHELL을 추가하면 생성된 작업 정의의 결과 json에서 CMD-SHELL을 다른 CMD-SHELL로 래핑하여 중단됩니다(aws 콘솔에서 볼 수 있음). .
그래서 나에게 도움이 된 방법은 ecs-cli를 1.4.0에서 1.7.0으로 업그레이드한 다음 서비스 아래의 ecs-params.yml 파일에 상태 확인을 추가하는 것이었습니다.
task_definition:
ecs_network_mode: awsvpc
task_role_arn: arn:aws:iam::........
task_execution_role: arn:aws:iam::........
task_size:
cpu_limit: 2048
mem_limit: 4GB
services:
foo:
healthcheck:
command: ps cax | grep "[p]ython"
interval: 30s
timeout: 10s
retries: 2
essential: true
답변4
예를 들어 "포트 매핑"이 8000:8000
"ECS EC2" 또는 8000 tcp
"ECS Fargate"에 대한 경우 "HEALTHCHECK"의 "명령"은 다음과 같습니다.
CMD-SHELL, curl -f http://localhost:8000/ || exit 1
이 경우에는 8000
이후를 잊지 마십시오 .http://localhost: