Azure Container Apps의 상태 프로브
Azure Container Apps 상태 프로브를 사용하면 Container Apps 런타임에서 컨테이너 앱의 상태를 정기적으로 검사할 수 있습니다.
TCP 또는 HTTP(S)를 단독으로 사용하여 프로브를 설정할 수 있습니다.
Container Apps는 다음 프로브를 지원합니다.
프로브 | 설명 |
---|---|
Startup 클래스 | 애플리케이션이 성공적으로 시작되었는지 확인합니다. 이 검사는 활동성 프로브와는 별개이며 애플리케이션의 초기 시작 단계에서 실행됩니다. |
활동성 | 애플리케이션이 여전히 실행 중이고 응답성이 있는지 확인합니다. |
준비 | 복제본이 들어오는 요청을 처리할 준비가 되었는지 확인합니다. |
Azure Container Apps에서 지원되는 프로프 사양의 전체 목록은 Azure REST API 사양을 참조하세요.
HTTP 프로브
HTTP 프로브를 사용하면 정상 상태를 보고하기 전에 애플리케이션 종속성의 상태를 확인하는 사용자 지정 논리를 구현할 수 있습니다.
성공 여부를 나타내기 위해 HTTP 상태 코드가 200
보다 크거나 같고 400
보다 작은 HTTP 상태 코드로 응답하도록 상태 프로브 엔드포인트를 구성합니다. 이 범위를 벗어나는 다른 응답 코드는 오류를 나타냅니다.
다음 예제에서는 JavaScript에서 활동성 엔드포인트를 구현하는 방법을 보여 줍니다.
const express = require('express');
const app = express();
app.get('/liveness', (req, res) => {
let isSystemStable = false;
// check for database availability
// check filesystem structure
// etc.
// set isSystemStable to true if all checks pass
if (isSystemStable) {
res.status(200); // Success
} else {
res.status(503); // Service unavailable
}
})
TCP 프로브
TCP 프로브는 서버와의 연결이 설정될 때까지 대기하여 성공을 나타냅니다. 애플리케이션에 대한 연결을 설정할 수 없는 경우 프로브가 실패합니다.
제한 사항
- 컨테이너당 각 프로브 유형 중 하나만 추가할 수 있습니다.
exec
프로브는 지원되지 않습니다.- 포트 값은 정수여야 하며, 명명된 포트는 지원되지 않습니다.
- gRPC는 지원되지 않습니다.
예제
다음 코드 목록에서는 컨테이너에 대한 상태 프로브를 정의하는 방법을 보여 줍니다.
...
자리 표시자는 생략된 코드를 나타냅니다. 전체 ARM 템플릿 세부 정보는 Container Apps ARM 템플릿 API 사양을 참조하세요.
{
...
"containers":[
{
"image":"nginx",
"name":"web",
"probes": [
{
"type": "liveness",
"httpGet": {
"path": "/health",
"port": 8080,
"httpHeaders": [
{
"name": "Custom-Header",
"value": "liveness probe"
}]
},
"initialDelaySeconds": 7,
"periodSeconds": 3
},
{
"type": "readiness",
"tcpSocket": {
"port": 8081
},
"initialDelaySeconds": 10,
"periodSeconds": 3
},
{
"type": "startup",
"httpGet": {
"path": "/startup",
"port": 8080,
"httpHeaders": [
{
"name": "Custom-Header",
"value": "startup probe"
}]
},
"initialDelaySeconds": 3,
"periodSeconds": 3
}]
}]
...
}
선택적 failureThreshold
설정은 실행이 실패할 경우 Container Apps가 프로브 실행을 시도하는 횟수를 정의합니다. failureThreshold
양을 초과하는 시도는 각 프로브 형식에 대해 서로 다른 결과를 초래합니다.
기본 구성
수신을 사용하도록 설정하면 각 형식에 대해 정의되지 않은 경우 다음 기본 프로브가 주 앱 컨테이너에 자동으로 추가됩니다.
프로브 유형 | 기본값 |
---|---|
Startup 클래스 | 프로토콜: TCP 포트: 수신 대상 포트 시간 제한: 3초 기간: 1초 초기 지연 시간: 1초 성공 임계값: 1 실패 임계값: 240 |
준비 | 프로토콜: TCP 포트: 수신 대상 포트 시간 제한: 5초 기간: 5초 초기 지연 시간: 3초 성공 임계값: 1 실패 임계값: 48 |
활동성 | 프로토콜: TCP 포트: 수신 대상 포트 |
Java에서 일반적인 앱 시작 시간이 길어지는 상황에서는 컨테이너가 충돌하지 않도록 프로브를 사용자 지정해야 하는 경우가 많습니다.
다음 예제에서는 시작 시간을 연장하기 위해 활동성 및 준비 상태 프로브를 구성하는 방법을 보여 줍니다.
"probes": [
{
"type": "liveness",
"failureThreshold": 3,
"periodSeconds": 10,
"successThreshold": 1,
"tcpSocket": {
"port": 80
},
"timeoutSeconds": 1
},
{
"type": "readiness",
"failureThreshold": 48,
"initialDelaySeconds": 3,
"periodSeconds": 5,
"successThreshold": 1,
"tcpSocket": {
"port": 80
},
"timeoutSeconds": 5
}]