8.2. CLI를 사용하여 상태 점검 구성

준비 상태 프로브, 활성 상태 프로브, 시작 프로브를 구성하려면 상태 점검을 수행할 컨테이너가 포함된 Pod의 사양에 프로브를 한 개 이상 추가합니다.

참고

기존 Pod에서 상태 점검을 추가하거나 편집하려면 Pod DeploymentConfig 오브젝트를 편집하거나 웹 콘솔에서 개발자 화면을 사용해야 합니다. CLI에서는 기존 Pod의 상태 점검을 추가하거나 편집할 수 없습니다.

프로세스

컨테이너에 대한 프로브를 추가하려면 다음을 수행합니다.

  1. 프로브를 한 개 이상 추가할 Pod 오브젝트를 생성합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        test: health-check
      name: my-application
    spec:
      containers:
      - name: my-container 1
        args:
        image: k8s.gcr.io/goproxy:0.1 2
        livenessProbe: 3
          tcpSocket:  4
            port: 8080 5
          initialDelaySeconds: 15 6
          periodSeconds: 20 7
          timeoutSeconds: 10 8
        readinessProbe: 9
          httpGet: 10
            host: my-host 11
            scheme: HTTPS 12
            path: /healthz
            port: 8080 13
        startupProbe: 14
          exec: 15
            command: 16
            - cat
            - /tmp/healthy
          failureThreshold: 30 17
          periodSeconds: 20 18
          timeoutSeconds: 10 19
    1
    컨테이너 이름을 지정합니다.
    2
    배포할 컨테이너 이미지를 지정합니다.
    3
    선택 사항: 활성 상태 프로브를 생성합니다.
    4
    수행할 테스트를 지정합니다. 여기서는 TCP 소켓 테스트를 지정합니다.
    5
    컨테이너가 수신 대기 중인 포트를 지정합니다.
    6
    컨테이너를 시작한 후 프로브를 예약할 수 있을 때까지 걸리는 시간을 초 단위로 지정합니다.
    7
    프로브를 수행할 시간(초)을 지정합니다. 기본값은 10입니다. 이 값은 timeoutSeconds 보다 커야 합니다.
    8
    프로브가 실패한 것으로 간주되는 비활성 시간(초)입니다. 기본값은 1입니다. 이 값은 periodSeconds 보다 작아야 합니다.
    9
    선택 사항: 준비 상태 프로브 생성.
    10
    수행할 테스트 유형을 지정합니다. 여기서는 HTTP 테스트를 지정합니다.
    11
    호스트 IP 주소를 지정합니다. host가 정의되지 않은 경우 PodIP가 사용됩니다.
    12
    HTTP 또는 HTTPS를 지정합니다. scheme가 정의되지 않은 경우 HTTP 스키마가 사용됩니다.
    13
    컨테이너가 수신 대기 중인 포트를 지정합니다.
    14
    선택 사항: 시작 프로브 생성.
    15
    수행할 테스트 유형을 지정합니다. 여기서는 컨테이너 실행 프로브를 지정합니다.
    16
    컨테이너에서 실행할 명령을 지정합니다.
    17
    실패 후 프로브에 시도할 수 있는 횟수를 지정합니다.
    18
    프로브를 수행할 시간(초)을 지정합니다. 기본값은 10입니다. 이 값은 timeoutSeconds 보다 커야 합니다.
    19
    프로브가 실패한 것으로 간주되는 비활성 시간(초)입니다. 기본값은 1입니다. 이 값은 periodSeconds 보다 작아야 합니다.
    참고

    initialDelaySeconds 값이 periodSeconds 값보다 작으면 타이머 관련 문제로 인해 첫 번째 준비 상태 프로브가 두 기간 사이의 어느 시점에 수행됩니다.

    timeoutSeconds 값은 periodSeconds 값보다 작아야 합니다.

  2. Pod 오브젝트를 생성합니다.

    $ oc create -f <file-name>.yaml
  3. 상태 점검 Pod의 상태를 확인합니다.

    $ oc describe pod health-check

    출력 예

    Events:
      Type    Reason     Age   From                                  Message
      ----    ------     ----  ----                                  -------
      Normal  Scheduled  9s    default-scheduler                     Successfully assigned openshift-logging/liveness-exec to ip-10-0-143-40.ec2.internal
      Normal  Pulling    2s    kubelet, ip-10-0-143-40.ec2.internal  pulling image "k8s.gcr.io/liveness"
      Normal  Pulled     1s    kubelet, ip-10-0-143-40.ec2.internal  Successfully pulled image "k8s.gcr.io/liveness"
      Normal  Created    1s    kubelet, ip-10-0-143-40.ec2.internal  Created container
      Normal  Started    1s    kubelet, ip-10-0-143-40.ec2.internal  Started container

    다음은 컨테이너를 재시작한 실패한 프로브의 출력입니다.

    비정상 상태의 컨테이너가 있는 샘플 활성 상태 점검 출력

    $ oc describe pod pod1

    출력 예

    ....
    
    Events:
      Type     Reason          Age                From                                               Message
      ----     ------          ----               ----                                               -------
      Normal   Scheduled       <unknown>                                                             Successfully assigned aaa/liveness-http to ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj
      Normal   AddedInterface  47s                multus                                             Add eth0 [10.129.2.11/23]
      Normal   Pulled          46s                kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Successfully pulled image "k8s.gcr.io/liveness" in 773.406244ms
      Normal   Pulled          28s                kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Successfully pulled image "k8s.gcr.io/liveness" in 233.328564ms
      Normal   Created         10s (x3 over 46s)  kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Created container liveness
      Normal   Started         10s (x3 over 46s)  kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Started container liveness
      Warning  Unhealthy       10s (x6 over 34s)  kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Liveness probe failed: HTTP probe failed with statuscode: 500
      Normal   Killing         10s (x2 over 28s)  kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Container liveness failed liveness probe, will be restarted
      Normal   Pulling         10s (x3 over 47s)  kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Pulling image "k8s.gcr.io/liveness"
      Normal   Pulled          10s                kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Successfully pulled image "k8s.gcr.io/liveness" in 244.116568ms