다음을 통해 공유


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 사용하는 애플리케이션을 사용자 지정합니다.

  1. 설정에서 을 선택한 다음 목록에서 애플리케이션을 선택합니다.

    앱 페이지를 보여 주는 Azure Portal 스크린샷

  2. 왼쪽 탐색 창에서 구성을 선택하고 상태 프로브를 선택한 다음 상태 프로브 속성을 지정합니다.

    상태 프로브 탭을 보여 주는 Azure Portal 구성 페이지의 스크린샷

  3. 종료 유예 기간을 설정하려면 일반 설정을 선택하고 종료 유예 기간 상자에 값을 지정합니다.

    일반 설정 탭을 보여 주는 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
    }
    

다음 단계