쿠버네티스 Probe(Readiness, Liveness, Startup) 개념 및 설정

ZER0·2023년 1월 16일
0

Kubernetes

목록 보기
34/39
post-thumbnail

1. Probe 개념

1.1. Readiness, Startup

  • 파드의 상태를 체크 할 수 있는 2가지의 지표가 존재
    • get을 통해 확인 가능한 STATUS 정보
    • describe을 통해 확인 가능한 Conditions 정보
  • STATUS와 Conditions이 Running/True 상태임에도 불구하고 컨테이너가 초기화 프로세스(cold start)를 거치는 경우 파드에 정상적으로 접근 불가
  • 컨테이너 생성 및 HTTP 요청에 대한 응답을 할 수 있는지 확인하기 위해 Readiness Probe를 활용
  • 컨테이너에 배포된 서비스의 초기화 프로세스(cold start)가 완료되어 서비스를 제공할 수 있는지 확인하기 위해 Startup Probe를 활용

1.2. Liveness

  • 파드에 장애가 발생하는 경우 k8s 특성상 파드를 재생성 및 삭제함
  • 하지만 파드 자체에는 문제가 없으나 컨테이너에 장애가 발생한 경우 파드는 복구되지 않고 접근이 불가능한 상태로 지속적으로 존재하게 됨
  • 이러한 문제를 해결하기 위해 Liveness Probe를 활용
  • Liveness Probe를 설정할 경우 지속적으로 컨테이너의 상태를 체크하고 비정상일 경우 파드를 재생성

1.3. 한줄 요약

  • probe는 컨테이너의 상태를 확인하기 위한 기능

2. Probe 핸들러

  • 컨테이너의 상태를 확인하는 주체는 kubelet이며, kubelet은 핸들러를 활용해 컨테이너의 상태를 확인
  • 3종류의 핸들러 존재
    • HttpGetAction : 지정된 포트와 URL로 HTTP Get 요청을 전송해 응답 코드가 200 ~ 400 구간인 경우 성공 이외의 경우 실패
      1
      2
      3
        httpGet:
          path: /healthcheck
          port: probeport
      cs
    • ExecAction : 컨테이너에서 관리자가 지정한 명령어를 실행. 명령어 상태 코드가 0일 경우 성공 이외의 경우 실패
      1
      2
      3
      4
        exec:
          command:
          - cat
          - /tmp/healthy
      cs
    • TCPAction : 지정된 포트로 TCP 소켓 연결 시도. 연결 성공 시 성공
      1
      2
            tcpSocket:
              port: 8080
      cs

3. Probe 옵션

  • Probe 설정을 세밀하게 조정하기 위한 옵션이 존재
  • 세부 내용은 공식 문서 참고

4. Probe 설정

  • Readiness, Liveness, Startup Probe 모두 설정 방법은 동일하며 probe 이름만 수정 필요
  • HTTP Probe 설정
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    apiVersion: v1
    kind: Pod
    metadata:
      name: readinessTest
    spec:
      containers:
      - name: nginx
        image: nginx
        readinessProbe:
          httpGet:
            path: /healthcheck
            port: 8080
    cs
  • exec Probe 설정
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    apiVersion: v1
    kind: Pod
    metadata:
      name: readinessTest
    spec:
      containers:
      - name: nginx
        image: nginx
        readinessProbe:
          exec:
            command:
            - cat
            - /tmp/healthy
    cs
  • TCP Probe 설정
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    apiVersion: v1
    kind: Pod
    metadata:
      name: readinessTest
    spec:
      containers:
      - name: nginx
        image: nginx
        readinessProbe:
          tcpSocket:
            port: 8080
    cs

5. 참고

  1. https://www.udemy.com/course/certified-kubernetes-application-developer/
  2. https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
  3. https://medium.com/finda-tech/kubernetes-pod%EC%9D%98-%EC%A7%84%EB%8B%A8%EC%9D%84-%EB%8B%B4%EB%8B%B9%ED%95%98%EB%8A%94-%EC%84%9C%EB%B9%84%EC%8A%A4-probe-7872cec9e568
profile
Security Compliance Engineer

0개의 댓글