cleanUrl: /k8s/replica-replication-controller-managing-pod
disqus: true

컨테이너를 모니터링하고 실패하면 다시 시작하는 방법을 배울 것이다. 컨트롤러가 파드를 관리하지 않는 한 새로운 컨트롤러로 대체 되지 않는다. Replica set 으로 pod 를 관리하면 반드시 n 개의 pod 가 실행됨을 보장하는데 이에 대해서 자세히 다룬다.

4.1 파드를 안정적으로 유지하기

컨테이너 주 프로세스에 crash 가 발생하면 kublet 은 컨테이너를 다시 시작한다

crash 가 발생한 container 는 자동으로 다시 시작하고, OOM 와 같은 GC 문제에 의한 오류의 경우 process 를 죽이고 다시 실행한다.

하지만 무한 루프와 같은 application 문제로 인한 오류는 해결해주지 못하기 때문에 모니터링 도구가 필요하다

Introducing liveness probes

k8s 는 probe 를 통해 container 가 살아 있는지 3가지 메커니즘으로 확인할 수 있다.

  1. 지정한 IP, port 로 HTTP GET 을 보내어 2xx, 3xx 인지 확인한다
  2. TCP 소켓 probe 는 container 의 지정된 port 에 TCP 연결을 시도한다.
  3. Exec 는 명령의 종료 상태 코드가 0인지 확인한다.

HTTP 기반 liveness probe 생성 (Creating an HTTP-based liveness probe)

apiVersion: v1
kind: Pod
metadata:
  name: kubia-liveness
spec:
  containers:
  - image: luksa/kubia-unhealthy # 실패를 반환할 container 이미지
    name: kubia
    livenessProbe:
      httpGet:
        path: /    # probe 가 요청해야 하는 경로
        port: 8080 # probe 가 연결해야 하는 포트

livenessProbe 를 통해서 정의한다.

예제에는 문제가 있는 container 이미지를 사용해 실패하면 재시작 하는지 확인한다

동작 중인 liveness probe 확인

kubectl get po kubia-liveness

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e744403-8d57-4ee3-bb78-30a1a509d05f/Screen_Shot_2021-05-16_at_7.28.22_PM.png

RESTARTS 는 pod 가 몇번 재실행 되었는지 반환한다

kubectl describe 로 컨테이너가 다시 시작된 이유를 파악할 수 있다.-