들어가며
- k8s는 자체적으로 self-healing이 가능합니다. 시스템이 영향받을 때 마다 pod, container 단위로 상태를 감지하고, 비정상적인 경우 자체적으로 교체하여 최대한 안정적인 서비스를 유지할 수 있도록 도와줍니다
- 그러나 pod 내 사용자가 만든 applicaion에서 panic 등 실제 application이 죽지 않는 경우의 에러 형태는 감지할 수 없습니다.
- 그래서 k8s는 liveness라는 probe를 통해 pod의 상태를 식별할 수 있도록 제공합니다.
- 이번 내용에서는 LivenessProbe를 설정하는 방법에 대해 알아보겠습니다.
LivenessProbe
Liveness Probe는 pod가 계속 실행할 수 있음을 보장합니다.
Liveness Probe를 정의하려면, pod의 spec 부분에 정의할 수 있습니다.
아래 예시는 스파클링소다 4.0 의 gitlab 에 대한 yaml 파일의 일부입니다.
apiVersion: apps/v1 kind: Deployment metadata: name: gitlab-server namespace: sodaflow labels: app: gitlab-server spec: containers: - name: gitlab-server image: "hub.sparklingsoda.io:80/sameersbn/gitlab_offline:13.9.4" livenessProbe: httpGet: path: /gitlab/help port: 80 initialDelaySeconds: 30 timeoutSeconds: 15 failureThreshold: 5
위와 같이 spec의 container 하위에 livenessProbe가 정의된 것을 알 수 있습니다.
그렇다면, LivenessProbe에 작성 가능한 속성에 대해 알아보겠습니다.
- LivenessProbe의 Action
httpGet | 지정된 포트와 URL로 GET 요청 후 Response Status Code가 200~399까지 성공으로 판단합니. |
tcpSokect | 지정된 port에 tcp 연결을 시도합니다. 연결되지 않으면 컨테이너를 재시작 합니다. |
exec | 컨테이너 안에서 실행하고 싶은 exec 명령을 전달합니다. Return이 0이면 성공으로 판단합니다. |
- LivenessProbe 의 매개변수
initialDelaySeconds | pod 실행 후, 처음으로 검사할 시간 (단위 : 초) |
periodSeconds | 검사하는 시간의 주기 (단위 : 초) |
timeputSeconds | 검사할 때 기다리는 시간 (단위 : 초) |
successThreshold | 성공 횟수 설정 (설정된 횟수만큼 성공하면 healthy container 라고 판단) |
failureThreshold | 연속 실패 횟수 설정 (설정된 횟수만큼 실패하면 컨테이너 재실행) |
이를 기반으로 위의 gitlab-server yaml 파일을 해석해 보면 아래와 같습니다.
마무리
- 컨테이너의 동작 여부를 판단하는 LivenessProbe 에 대해 알아보았습니다.
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.