11.2. CLI를 사용하여 상태 점검 구성
준비 상태 프로브, 활성 상태 프로브, 시작 프로브를 구성하려면 상태 점검을 수행할 컨테이너가 포함된 Pod의 사양에 프로브를 한 개 이상 추가합니다.
기존 Pod에서 상태 점검을 추가하거나 편집하려면 Pod DeploymentConfig
오브젝트를 편집하거나 웹 콘솔에서 개발자 화면을 사용해야 합니다. CLI에서는 기존 Pod의 상태 점검을 추가하거나 편집할 수 없습니다.
프로세스
컨테이너에 대한 프로브를 추가하려면 다음을 수행합니다.
프로브를 한 개 이상 추가할
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
값보다 작아야 합니다.Pod
오브젝트를 생성합니다.$ oc create -f <file-name>.yaml
상태 점검 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