devops

livenessProbe를 통한 어플리케이션 상태검사, PVC가 필요한 이유 본문

DevOps/Kubernetes

livenessProbe를 통한 어플리케이션 상태검사, PVC가 필요한 이유

vata500 2022. 7. 5. 17:26
반응형

500 Internal Server Error
 
하이퍼텍스트 전송 프로토콜 (HTTP) 500 Internal Server Error 서버 에러 응답 코드는 요청을 처리하는 과정에서 서버가 예상하지 못한 상황에 놓였다는 것을 나타냅니다.

이 에러 응답은 "서버 에러를 총칭하는"(catch-all) 구체적이지 않은 응답입니다. 종종, 서버 관리자들은 미래에 같은 에러를 발생하는 것을 방지하기 위해 500 상태 코드 같은 에러 응답들에 더 많은 자세한 내용을 남겨 둡니다.

어플리케이션 상태검사

  • liveness probe : 컨테이너 내부의 어플리케이션이 살아있는 지 검사한다. 검사 실패 시 해당 컨테이너는 restartPolicy에 따라 재시작된다. (정상 상태를 유지하고 있는지, 트래픽 전송)
  • readiness probe : 컨테이너 내부의 어플리케이션이 사용자 요청을 처리할 준비가 됐는지 검사한다. 검사 실패 시 컨테이너는 서비스 라우팅 대상에서 제외된다. (초기화 작업이 마무리되어 준비가 되었는지, 트래픽 전송 X)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cozserver-deployment
  labels:
    app: cozserver
spec:
  replicas: 5
  selector:
    matchLabels:
      app: cozserver
  minReadySeconds: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    # 여기서부터 파드 템플릿이다
    metadata:
      labels:
        app: cozserver
    spec:
      restartPolicy: Always
      containers:
      - name: coz-container
        image: sebcontents/cozserver:3.0
        livenessProbe:
          httpGet:
          port:8080
          path: /

- httpGet : HTTP 요청을 전송해 상태를 검사한다. HTTP 요청 종료 코드가 200 혹은 300번 계열이 아닌 경우, 어플리케이션 상태검사가 실패한 것으로 간주한다.

- port : 파드 컨테이너의 port를 말한다. kubelet이 직접 상태검사를 하기 때문에, 서비스 포트를 입력하지 않는다.

- restartPolicy : 파드의 재시작 정책을 말한다. 기본값은 Always이며, 3가지의 옵션이 있다. Always는 파드 컨테이너가 종료될 때 자동 재시작된다. OnFailure는 파드 컨테이너가 실패했을 때, 포드를 재시작한다. Never는 파드가 종료되어도 재시작하지 않는다.

1) livenessProbe 설정을 통해서 어플리케이션의 HTTP 상태검사를 진행한다.
2) HTTP 요청 코드가 500번으로 나타나는 Failure 결과가 나오면, restartPolicy(Always)에 의해서 파드를 자동 재시작한다.


 

PV와 어플리케이션의 정의를 분리할 수 있는 유연한 상태를 위해

디플로이먼트 YAML로 배포하거나 다른 팀과 공유하게 될 경우, PV를 고정적으로 명시하게 되면 반드시 해당 PV만을 사용해야 한다. 또한, 다른 PV를 사용하려면 해당 볼륨 타입을 명시하는 별도의 YAML 파일을 여러 개 만들어 배포해야하는 번거로운 작업이 요구된다.

그래서 PVC를 통한 파드와 PV의 연결이 가능해지면, 파드가 볼륨의 세부적인 사항을 몰라도 볼륨을 사용할 수 있도록 추상화해주는 역할을 담당하게 된다. 

반응형
Comments