LivenessProbe가 뭔가요

작성자 김아름 수정일 2022-12-02 13:21

#kubernetes, #쿠버네티스, #livenessprobe, #self-healing


들어가며

  • 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 의 매개변수
initialDelaySecondspod 실행 후, 처음으로 검사할 시간 (단위 : 초)
periodSeconds검사하는 시간의 주기 (단위 : 초)
timeputSeconds검사할 때 기다리는 시간 (단위 : 초)
successThreshold성공 횟수 설정 (설정된 횟수만큼 성공하면 healthy container 라고 판단)
failureThreshold연속 실패 횟수 설정 (설정된 횟수만큼 실패하면 컨테이너 재실행)


이를 기반으로 위의 gitlab-server  yaml 파일을 해석해 보면 아래와 같습니다.




마무리

  • 컨테이너의 동작 여부를 판단하는 LivenessProbe 에 대해 알아보았습니다.

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300