Azure Spring Apps에서 호스트되는 앱에 대한 상태 프로브 및 정상 종료 기간을 구성하는 방법
참고 항목
기본, 표준 및 엔터프라이즈 계획은 2025년 3월 중순부터 사용되지 않으며 3년의 은퇴 기간이 있습니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 사용 중지 공지 사항을 참조하세요.
표준 소비 및 전용 계획은 2024년 9월 30일부터 사용되지 않으며 6개월 후에 완전히 종료됩니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 표준 사용량 및 전용 계획을 Azure Container Apps로 마이그레이션을 참조 하세요.
이 문서는 Java ✅ C에✅ 적용됩니다.#
이 문서는 기본/표준 ✅ 엔터프라이즈에✅ 적용됩니다.
이 문서에서는 상태 프로브 및 정상 종료 기간을 사용하여 Azure Spring Apps에서 실행되는 앱을 사용자 지정하는 방법을 보여 줍니다.
프로브는 앱 인스턴스에서 Azure Spring Apps에서 주기적으로 수행하는 진단 작업입니다. 진단을 수행하기 위해 Azure Spring Apps는 다음 작업 중 하나를 수행합니다.
- 앱 인스턴스 내에서 선택한 임의의 명령을 실행합니다.
- TCP 소켓 연결을 설정합니다.
- HTTP 요청을 만듭니다.
Azure Spring Apps는 모든 애플리케이션에 대한 기본 상태 프로브 규칙을 제공합니다. 이 문서에서는 세 가지 종류의 상태 프로브를 사용하여 애플리케이션을 사용자 지정하는 방법을 보여 줍니다.
활동성 프로브는 애플리케이션을 다시 시작할 시기를 결정합니다. 예를 들어 활동성 프로브는 애플리케이션이 실행 중이지만 진행할 수 없는 경우와 같이 교착 상태를 식별할 수 있습니다. 교착 상태의 애플리케이션을 다시 시작하면 오류에도 불구하고 애플리케이션을 사용할 수 있습니다.
준비 상태 프로브는 앱 인스턴스가 트래픽 수락을 시작할 준비가 되는 시기를 결정합니다. 예를 들어 준비 상태 프로브는 애플리케이션의 백 엔드로 사용되는 앱 인스턴스를 제어할 수 있습니다. 앱 인스턴스가 준비되지 않은 경우 Kubernetes 서비스 검색에서 제거됩니다. 자세한 내용은 Spring Boot 애플리케이션 검색 및 등록을 참조하세요. 엔터프라이즈 계획을 사용하여 서비스 검색에 대한 자세한 내용은 Tanzu Service Registry 사용을 참조하세요.
시작 프로브는 애플리케이션이 시작된 시기를 결정합니다. 시작 프로브는 시작이 성공할 때까지 활동성 및 준비 검사를 사용하지 않도록 설정하여 활동성 및 준비 상태 프로브가 애플리케이션 시작을 방해하지 않도록 합니다. 시작 프로브를 사용하여 느린 시작 애플리케이션에 대한 활동성 검사를 수행하여 앱이 실행되기 전에 종료되지 않도록 할 수 있습니다.
필수 조건
Azure Spring Apps 확장을 사용하는 Azure CLI. 다음 명령을 사용하여 이전 버전을 제거하고 최신 확장을 설치합니다. 이전에 spring-cloud 확장을 설치한 경우 구성 및 버전 불일치를 방지하기 위해 제거합니다.
az extension remove --name spring az extension add --name spring az extension remove --name spring-cloud
애플리케이션에 대한 상태 프로브 및 정상 종료 구성
다음 섹션에서는 Azure CLI를 사용하여 상태 프로브 및 정상 종료를 구성하는 방법을 설명합니다.
정상 종료
다음 표에서는 정상 종료를 구성하는 데 사용할 수 있는 terminationGracePeriodSeconds
속성에 대해 설명합니다.
Property name | 설명 |
---|---|
terminationGracePeriodSeconds |
앱 인스턴스에서 실행되는 프로세스가 종료 신호를 보낸 때부터 강제로 중단되기 전까지의 기간(초)입니다. 이 값을 프로세스의 예상 정리 시간보다 길게 설정합니다. 값은 음의 정수가 아니어야 합니다. 유예 기간을 0으로 설정하면 종료할 기회 없이 종료 신호를 통해 앱 인스턴스가 즉시 중지됩니다. 값이 nil이면 Azure Spring Apps는 기본 유예 기간을 사용합니다. 기본값은 90입니다. |
상태 프로브 속성
다음 표에서는 상태 프로브를 구성하는 데 사용할 수 있는 속성에 대해 설명합니다.
Property name | 설명 |
---|---|
initialDelaySeconds |
앱 인스턴스가 시작된 다음 프로브가 시작되기 전까지의 시간(초)입니다. 기본값은 최소값인 0입니다. |
periodSeconds |
프로브를 수행하는 빈도(초)입니다. 기본값은 10입니다. 최소값은 1입니다. |
timeoutSeconds |
프로브 시간이 초과될 때까지의 시간(초)입니다. 기본값은 최소값인 1입니다. |
failureThreshold |
프로브가 성공한 후 실패한 것으로 간주되는 최소 연속 실패 횟수입니다. 기본값은 3입니다. 최소값은 1입니다. |
successThreshold |
프로브가 실패한 후 성공한 것으로 간주되는 최소 연속 성공 횟수입니다. 기본값은 1입니다. 활동성 및 시작의 경우 값은 1이어야 합니다. 최소값은 1입니다. |
프로브 작업 속성
프로브를 사용하여 앱 인스턴스를 확인할 수 있는 세 가지 방법이 있습니다. 각 프로브는 다음 프로브 작업 중 하나를 정의해야 합니다.
HTTPGetAction
지정된 경로의 앱 인스턴스에 대해 HTTP GET 요청을 수행합니다. 응답의 상태 코드가 200 이상 400 미만인 경우 진단이 성공한 것으로 간주됩니다.
Property name 설명 scheme
호스트에 연결하는 데 사용하는 체계입니다. 기본값은 HTTP입니다. path
/healthz와 같은 앱 인스턴스의 HTTP 서버에서 액세스할 경로입니다. ExecAction
앱 인스턴스 내에서 지정된 명령을 실행합니다. 명령이 상태 코드 0으로 종료되면 진단이 성공한 것으로 간주됩니다.
Property name 설명 command
앱 인스턴스 내에서 실행할 명령입니다. 명령에 대한 작업 디렉터리가 앱 인스턴스의 파일 시스템에 있는 루트 디렉터리(/)입니다. 명령은 셸 내부가 아닌 exec
를 사용하여 실행되므로 셸 명령이 작동하지 않습니다. 셸을 사용하려면 셸을 명시적으로 호출합니다. 종료 상태 0은 라이브/정상으로 처리되고 0이 아닌 상태는 비정상입니다.TCPSocketAction
앱 인스턴스에 대해 TCP 검사를 수행합니다.
TCPSocketAction
작업에 사용할 수 있는 속성이 없습니다.
애플리케이션 사용자 지정
다음 단계를 사용하여 Azure Portal 사용하는 애플리케이션을 사용자 지정합니다.
모범 사례
상태 프로브를 Azure Spring Apps에 추가하는 경우 다음 모범 사례를 사용합니다.
활동성 및 준비 상태 프로브를 함께 사용합니다. Azure Spring Apps는 서비스 검색을 위한 두 가지 방법을 동시에 제공합니다. 준비 상태 프로브가 실패하면 앱 인스턴스는 Kubernetes 서비스 검색에서만 제거됩니다. 제대로 구성된 활동성 프로브는 예기치 않은 사례를 방지하기 위해 Eureka 서비스 검색에서 발급된 앱 인스턴스를 제거할 수 있습니다. 서비스 검색에 대한 자세한 내용은 Spring Boot 애플리케이션 검색 및 등록을 참조하세요. 엔터프라이즈 계획을 사용하여 서비스 검색에 대한 자세한 내용은 Tanzu Service Registry 사용을 참조하세요.
앱 인스턴스가 시작되면
initialDelaySeconds
에서 지정한 지연 시간 이후에 첫 번째 검사가 수행됩니다.periodSeconds
에서 지정한 기간에 따라 후속 검사가 주기적으로 수행됩니다. 앱이failureThreshold
에서 지정한 대로 여러 번 요청에 응답하지 않으면 앱 인스턴스가 다시 시작됩니다. 총 시간 제한initialDelaySeconds + periodSeconds * failureThreshold
가 애플리케이션의 시작 시간보다 길도록 애플리케이션을 충분히 빠르게 시작하거나 이러한 매개 변수를 업데이트할 수 있는지 확인합니다.Spring Boot 애플리케이션의 경우 Spring Boot는 상태 그룹 지원과 함께 제공되므로 개발자는 상태 표시기의 하위 집합을 선택하고 상호 관련된 단일 상태 아래에서 그룹화할 수 있습니다. 자세한 내용은 Spring 블로그에서 Spring Boot를 사용하는 활동성 및 준비 상태 프로브를 참조하세요.
다음 예제에서는 Spring Boot를 사용하는 활동성 프로브를 보여줍니다.
"probe": { "initialDelaySeconds": 30, "periodSeconds": 10, "timeoutSeconds": 1, "failureThreshold": 30, "successThreshold": 1, "probeAction": { "type": "HTTPGetAction", "scheme": "HTTP", "path": "/actuator/health/liveness" } }
다음 예제에서는 Spring Boot를 사용하는 준비 상태 프로브를 보여줍니다.
"probe": { "initialDelaySeconds": 0, "periodSeconds": 10, "timeoutSeconds": 1, "failureThreshold": 3, "successThreshold": 1, "probeAction": { "type": "HTTPGetAction", "scheme": "HTTP", "path": "/actuator/health/readiness" } }
자주 묻는 질문
이 섹션에서는 Azure Spring Apps가 있는 상태 프로브를 사용하는 방법에 대한 질문과 대답을 제공합니다.
사용자 지정된 상태 프로브를 사용하여 애플리케이션을 만들 때 400개의 응답을 받았습니다. 무슨 의미인가요?
오류 메시지는 프로비전 실패를 담당하는 프로브를 가리킵니다. 상태 프로브 규칙이 올바르고 애플리케이션이 실행 중 상태일 수 있도록 시간 제한이 충분히 긴지 확인합니다.
기존 애플리케이션에 대한 기본 프로브 설정은 무엇인가요?
다음 예제는 기본 설정을 보여 줍니다.
"startupProbe": null, "livenessProbe": { "disableProbe": false, "failureThreshold": 3, "initialDelaySeconds": 300, "periodSeconds": 10, "probeAction": { "type": "TCPSocketAction" }, "successThreshold": 1, "timeoutSeconds": 3 }, "readinessProbe": { "disableProbe": false, "failureThreshold": 3, "initialDelaySeconds": 0, "periodSeconds": 5, "probeAction": { "type": "TCPSocketAction" }, "successThreshold": 1, "timeoutSeconds": 3 }