준비 상태 프로브 구성

트래픽 서비스를 제공하는 컨테이너화된 애플리케이션의 경우 컨테이너가 수신 요청을 처리할 준비가 되었는지 확인하고 싶을 수 있습니다. Azure Container Instances에서는 준비 상태 프로브에 특정 조건에서는 컨테이너에 액세스할 수 없도록 하는 구성을 포함하도록 지원합니다. 이 준비 상태 프로브는 Kubernetes 준비 상태 프로브와 유사하게 작동합니다. 예를 들어 컨테이너 애플리케이션은 시작하는 동안 대규모 데이터 세트를 로드해야 하는데 앱에서 이 시간 동안에는 요청을 수신하지 않도록 하고 싶을 수 있습니다.

이 문서에서는 프로브가 성공하는 경우에만 컨테이너가 트래픽을 수신하도록 하는 준비 상태 프로브가 포함된 컨테이너 그룹을 배포하는 방법을 설명합니다.

Azure Container Instances에서는 비정상 컨테이너가 자동으로 다시 시작하도록 구성할 수 있는 활동성 프로브도 지원합니다.

YAML 구성

예를 들어 준비 상태 프로브가 포함된 다음 코드 조각을 사용하여 readiness-probe.yaml 파일을 만듭니다. 이 파일은 작은 웹앱을 실행하는 컨테이너로 구성된 컨테이너 그룹을 정의합니다. 이 앱은 퍼블릭 mcr.microsoft.com/azuredocs/aci-helloworld 이미지에서 배포됩니다. 이 컨테이너화된 앱은 Azure CLI를 사용하여 Azure에서 컨테이너 인스턴스 배포 및 다른 빠른 시작에도 설명되어 있습니다.

apiVersion: 2019-12-01
location: eastus
name: readinesstest
properties:
  containers:
  - name: mycontainer
    properties:
      image: mcr.microsoft.com/azuredocs/aci-helloworld
      command:
        - "/bin/sh"
        - "-c"
        - "node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait"
      ports:
      - port: 80
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
      readinessProbe:
        exec:
          command:
          - "cat"
          - "/tmp/ready"
        periodSeconds: 5
  osType: Linux
  restartPolicy: Always
  ipAddress:
    type: Public
    ports:
    - protocol: tcp
      port: '80'
tags: null
type: Microsoft.ContainerInstance/containerGroups

시작 명령

이 배포에는 컨테이너가 처음 실행을 시작할 때 실행되는 시작 명령이 정의된 command 속성이 포함되어 있습니다. 이 속성에는 문자열 배열이 사용됩니다. 이 명령은 웹앱이 실행되지만 컨테이너가 준비되지 않은 시간을 시뮬레이션합니다.

먼저 셸 세션을 시작하고 node 명령을 실행하여 웹앱을 시작합니다. 240초 동안 일시 중지하는 명령도 시작합니다. 그 후에는 /tmp 디렉터리에 ready 파일을 만듭니다.

node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait

준비 상태 명령

이 YAML 파일에서는 준비 상태 확인을 담당하는 exec 준비 상태 명령을 지원하도록 readinessProbe를 정의합니다. 이 예제 준비 상태 명령은 /tmp 디렉터리에 ready 파일이 있는지 테스트합니다.

ready 파일이 없으면 준비 상태 명령이 0이 아닌 값으로 종료됩니다. 컨테이너가 계속 실행되지만 컨테이너에 액세스할 수 없습니다. 종료 코드 0으로 이 명령이 종료되면 컨테이너에 액세스할 준비가 된 것입니다.

periodSeconds 속성은 준비 상태 명령이 5초마다 실행되도록 지정합니다. 준비 상태 프로브는 컨테이너 그룹의 수명 기간 동안 실행됩니다.

배포 예제

다음 명령을 실행하여 앞에 있는 YAML 구성으로 컨테이너 그룹을 배포합니다.

az container create --resource-group myResourceGroup --file readiness-probe.yaml

준비 상태 확인 보기

이 예제에서는 처음 240초 동안 준비 상태 명령이 ready 파일이 있는지 확인하는 데 실패합니다. 반환된 상태 코드는 컨테이너가 준비되지 않았음을 나타냅니다.

이러한 이벤트는 Azure Portal 또는 Azure CLI에서 볼 수 있습니다. 예를 들어, 포털에서는 준비 상태 명령이 실패하면 Unhealthy 유형의 이벤트가 트리거되는 것을 보여 줍니다.

포털 비정상 이벤트

컨테이너 준비 상태 확인

컨테이너를 시작한 후 처음에는 컨테이너에 액세스할 수 없다는 것을 확인할 수 있습니다. 프로비저닝한 후 컨테이너 그룹의 IP 주소를 가져옵니다.

az container show --resource-group myResourceGroup --name readinesstest --query "ipAddress.ip" --out tsv

준비 상태 프로브가 실패할 때 사이트에 액세스해 봅니다.

wget <ipAddress>

처음에는 출력에서 사이트에 액세스할 수 없음을 보여 줍니다.

wget 192.0.2.1
--2019-10-15 16:46:02--  http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...

240초 후 준비 상태 명령이 성공하면 컨테이너가 준비되었음을 나타내는 것입니다. 이제 wget 명령을 실행하면 명령이 성공합니다.

wget 192.0.2.1
--2019-10-15 16:46:02--  http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...200 OK
Length: 1663 (1.6K) [text/html]
Saving to: ‘index.html.1’

index.html.1                       100%[===============================================================>]   1.62K  --.-KB/s    in 0s

2019-10-15 16:49:38 (113 MB/s) - ‘index.html.1’ saved [1663/1663]

컨테이너가 준비된 상태인 경우에는 웹 브라우저로 IP 주소를 찾아 웹앱에 액세스할 수도 있습니다.

참고 항목

준비 상태 프로브는 컨테이너 그룹의 수명 기간 동안 계속 실행됩니다. 나중에 준비 상태 명령이 실패하면 다시 컨테이너에 액세스할 수 없는 상태가 됩니다.

다음 단계

준비 상태 프로브는 종속 컨테이너로 구성된 다중 컨테이너 그룹 관련 시나리오에 유용할 수 있습니다. 다중 컨테이너 시나리오에 대한 자세한 내용은 Azure Container Instances의 컨테이너 그룹을 참조하세요.