5. [중급편] 기본 오브젝트 (POD)

데일리·2023년 11월 22일
0

1. Pod의 life Cycle

1) Pending

Initialize

  • 파드의 최초 상태를 결정한다.
  • 작업이 성공적으로 끝나거나, 아예 설정을 하지 않으면 initialized 값이 True, 아니면 False로 설정된다.
  • InitContainer: 본 컨테이너가 가동되기 위해 초기화해야하는 내용을 담는 컨테이너
initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]

PodScheduled

  • 파드가 어느 노드로 올라갈지 스케줄이 완료되면 True가 된다

Image Downloading

  • 컨테이너에 이미지 다운로드 동작
  • 이 과정에서 Container의 상태는 Waiting이 되는데 이유는 Container가 생성되고 있기 때문이다.

2) Running

  • 컨테이너가 정상적으로 가동되면 Running으로 상태가 변한다
  • 만일 정상적으로 가동된다면 ContainerReady, Ready의 값이 True로 설정

  • 컨테이너 가동중 문제가 시작되어 재 생성이 된다면 Waiting으로 값이 바뀌지만 해당 pod은 이러한 상태를 Running으로 간주한다. 하지만 내부 컨디션은 False로 설정

    즉 pod의 상태는 running이지만 컨테이너는 waiting으로 문제가 있을 수 있기 때문에 컨테이너 상태로 모니터링을 해주어야한다.

3) Succeed/Failed

  • Job, CronJob으로 생성, 일을 하는 중에는 Running이지만 일을 마치면 파드는 더이상 일을 하지 않는데 해당 상태를 위 2가지로 나타낸다.
  • Failed: 작업을 하고 있는 컨테이너 중에 하나라도 문제가 생겼을 경우
  • Succeed: 컨테이너가 해당 작업을 모두 성공적으로 마쳤을 경우
  • Failed, Succeed 모두 ContainerReady, Ready는 False로 설정이 된다.
  • Pending 중 Failed로 상태가 바뀔 수 있다.
  • Running 중 통신장애가 발생할 시 Unknown 상태로 바뀌고 해당 상태가 지속될 시 Failed로 상태 변경

2. Pod 상태 확인

kubectl describe pod <pod_name>

ReadinessProbe / LivenessProbe

ReadinessProbe

  • ReadinessProbe는 앱이 구동되기 전까지 서비스와 연결이 되지 않도록 해준다.
  • 어플리케이션이 시작할 준비가 되었는지 우선 확인 후 앱 구동 순간 트래픽 실패 방지


해당 사진을 확인해보면 최초 Probe하고 5초 후에 실행이 되고 10초마다 cat /tmp/ready.txt라는 명령어가 제대로 동작하는지 확인을 한다. 만일 3회 성공시 해당 어플리케이션이 시작할 준비가 되었다고 인지를 하여 해당 어플리케이션 구동을 실시 한다.

LivenessProbe

  • LivenessProbe는 앱의 장애 상황을 감지
  • 어플리케이션이 응답가능한지 확인 후 앱 장애시 지속적은 트래픽 실패를 방지한다.

  • httpGet, Exec, tcpSocket은 ReadinessProbe, LivenessProbe에서 공통으로 설정하는 내용
  • httpGet: 포트, 호스트이름, Path, HttpHeader, Schme 확인 가능
  • Exec: 특정 명령어를 날려서 결과 확인
  • tcpSocket: 포트번호와 호스트명을 확인해서 ReadinessProbe, LivenessProbe에 대한 성공여부 확인

세부 설정

  • initialDelaySeconds: 최초 Probe하기 전 delay 설정
  • periodSeconds: Probe를 확인하는 시간의 간격
  • timeoutSeconds: 지정된 시간까지 결과가 와야함
  • successThreshold: 몇 번의 성공 결과를 받아야 정말 성공으로 인정할건지
  • failureThreshold: 몇 번의 실패 결과를 받아야 정말 실패로 인정할건지!

    위의 사진을 보면 우선 컨테이너 러닝 준비가 되면 5초 후에 10초 간격으로 http get 메서드로 /health url로 요청을 보낸다, 만일 3회 실패할 시에 해당 pod은 재실행을 하는 방식이다.
profile
하루에 한편 씩 읽기 좋은 테크 로그

0개의 댓글