108. 쿠버네티스 프로브 (Probes) 생명주기 관리

⚠️ 이 문서는 쿠버네티스가 파드(Pod)를 띄웠다고 "아싸, 서버 켜졌다!"라며 무턱대고 1만 명의 손님(트래픽)을 밀어 넣었다가, 서버 안의 자바(Java) 앱이 아직 로딩 중이어서 500 에러를 뿜으며 장렬히 전사하는 끔찍한 아마추어 짓을 막기 위해, **파드의 뱃속을 콕콕 찔러보며 "너 지금 손님 받을 준비 다 됐어(Readiness)?", "너 혹시 일하다가 죽어서 좀비 상태 된 거 아냐(Liveness)?"라고 끝없이 건강을 검진(Health Check)하는 3가지 절대적인 생명 연장 청진기 '프로브(Probes)'**를 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 파드 껍데기(컨테이너)가 Running 상태라고 해서 안의 프로그램(앱)이 정상 동작한다는 보장은 0%다. K8s의 뇌(Kubelet)가 주기적으로 앱의 엔드포인트(/healthz 등)를 찔러서 실제 앱의 생사 여부를 직접 확인하는 팩트 체크 기능이다.
  2. 가치: 무중단 배포(Zero Downtime)의 핵심 심장이다. 새 서버가 100% 준비 완료 도장을 받기 전까지는 트래픽을 절대 주지 않으며(Readiness), 며칠 돌다가 메모리가 새서 뻗어버린 좀비 파드는 기계가 알아서 눈치채고 암살 후 새로 띄워주는(Liveness) 100% 무인 자가 치유(Auto-Healing)를 완성한다.
  3. 기술 체계: 무거운 스프링(Spring) 앱이 뜰 때까지 기다려주는 방패 Startup Probe, 손님을 받아도 되는지 문을 열어주는 신호등 Readiness Probe, 24시간 감시하다 미치면 죽여버리는 사신 Liveness Probe 3박자로 완벽하게 돌아간다.

Ⅰ. Readiness Probe (준비성 프로브): 트래픽의 신호등

간판 불을 켰다고 영업 시작이 아니다. 찌개가 다 끓어야 손님을 받는다.

  1. 상태 착각의 비극:
    • 톰캣(Tomcat) 서버 컨테이너가 K8s에서 켜지면 0.1초 만에 Running 상태로 뜬다.
    • 멍청한 L4 로드밸런서(Service)는 "오! 새 서버 떴네!" 하고 즉시 대기하던 고객 트래픽 1만 명을 이쪽으로 확 넘긴다.
    • 하지만 톰캣 뱃속에 있는 무거운 스프링(Spring Boot) 프레임워크와 DB 커넥션 풀이 연결되려면 최소 15초의 시간이 필요하다. 결국 15초 동안 들어온 1만 명의 고객은 몽땅 502 Bad Gateway 에러를 쳐맞고 폭동을 일으킨다.
  2. Readiness Probe (신호등 제어):
    • yaml 파일에 readinessProbe를 달고 HTTP GET /health를 2초마다 찌르라고 명령한다.
    • 파드가 켜져도 로드밸런서는 절대 트래픽을 넘기지 않고(격리) 가만히 서 있다.
    • K8s(Kubelet)가 2초마다 파드 배꼽을 찌른다. "2초: 에러(500), 4초: 에러(500)... 16초: 정상(200 OK)!"
    • 파드가 200 OK를 뱉어내는 그 찬란한 순간, K8s는 그제야 로드밸런서에게 "야! 얘 진짜 요리 준비 끝났다! 손님 1만 명 들여보내라!"라고 초록불을 켜준다. 무중단 배포의 500 에러를 0으로 멸망시키는 절대 방어막이다.

📢 섹션 요약 비유: 식당 셔터 문을 열었다고(Pod Running) 손님을 바로 들이밀면, 손님들은 주방장이 도마 닦고 양파 까는 걸 10분 동안 보면서 짜증(500 에러)을 냅니다. Readiness Probe는 깐깐한 홀 매니저입니다. 셔터를 올리더라도 식당 문 앞을 몸으로 꽉 막고 섭니다(트래픽 차단). 주방을 계속 기웃거리다가(찌르기), 주방장이 가스레인지에 불을 켜고 "자, 이제 첫 주문 받아!"라고 소리치는 그 완벽한 순간(200 OK)에만 정문을 열어 손님을 들여보내는 완벽한 입장 통제 시스템입니다.


Ⅱ. Liveness Probe (활성 프로브): 좀비 감별사와 암살자

숨을 쉬지 않는 좀비 직원은 자르지 않으면 팀 전체를 전염시킨다.

  1. Deadlock (교착 상태)의 공포:
    • Readiness 덕분에 파드가 잘 켜져서 한 달 동안 손님을 신나게 받았다.
    • 그런데 어느 날 코딩 버그로 메모리 누수(Memory Leak)가 터져, 이 파드가 DB를 잡은 채 멈춰버렸다(Deadlock).
    • 더 환장할 노릇은, 파드의 컨테이너 껍데기는 아직 안 터졌기 때문에(프로세스가 안 죽음) K8s 상태 창에는 여전히 Running(정상)으로 초록불이 켜져 있다는 것이다. K8s는 바보같이 이 멈춰버린 좀비 파드에게 계속 손님(트래픽)을 던져주고 손님들은 무한 로딩 창에 갇혀 죽어 나간다.
  2. Liveness Probe (좀비 암살자):
    • 이번엔 yaml 파일에 livenessProbe를 달아둔다. "3초마다 앱이 숨을 쉬는지 /ping 주소로 찔러봐라."
    • Kubelet이 멈춰버린 좀비 파드를 찌른다. 대답이 없다(Timeout). 한 번 더 찌른다. 대답이 없다. "Failure Threshold(실패 임계치)"인 3번 연속 무응답을 확인한다.
    • K8s의 눈이 뒤집힌다. "이 새끼 죽은 채로 서 있는 좀비네!" 그 즉시 Kubelet이 전기톱을 꺼내 이 멍청한 파드의 목을 썰어버리고(Kill / Restart), 깨끗한 새 파드로 강제 부활(자가 치유, Auto-healing)시켜 버린다. 서비스가 마비에서 1분 만에 저절로 풀리는 기적의 순간이다.

📢 섹션 요약 비유: Liveness Probe는 일하는 직원 뒤에 서서 5분에 한 번씩 직원의 옆구리를 찌르는(Ping) 악덕 감시관입니다. 직원이 너무 피곤해서 눈을 뜬 채로 선 채 기절(Deadlock 좀비 상태)했습니다. 겉보기엔 멀쩡하게 서 있어서(Running) 사장님은 모릅니다. 감시관이 옆구리를 3번 연속 찔렀는데 "아!" 소리를 안 내면, "이놈 기절했네!"라며 즉시 직원을 병원(Restart)으로 앰뷸런스 태워버리고 쌩쌩한 새 직원을 1초 만에 알바천국에서 데려다 꽂아 넣는 피도 눈물도 없는 공장 자동 치유 시스템입니다.


Ⅲ. Startup Probe (스타트업 프로브): 뚱땡이 앱의 방패

로딩하는 데만 3분이 걸리는 무거운 앱은 찌르다가 죽을 수도 있다.

  1. 기존 프로브의 모순적 팀킬 (Team Kill):
    • 엄청나게 무거운 구형 톰캣 앱(Legacy)을 K8s에 올렸다. 얘는 부팅해서 메모리에 다 올라올 때까지 꼬박 **3분(180초)**이 걸린다.
    • 그런데 아까 설정한 사신(Liveness Probe)은 파드가 켜지자마자 3초마다 찌르기 시작한다. 3번 찔러서 대답 없으면 죽인다고 했다.
    • 앱 입장에서는 "야! 나 아직 로딩 중인데 10초 만에 날 왜 죽여!" 라며 피를 토하고 죽는다. 그리고 다시 켜지고, 또 10초 만에 죽임을 당하는 무한 재부팅(CrashLoop)의 지옥에 빠진다. (사신이 아군을 죽임)
  2. Startup Probe (초반 면책권):
    • 이 억울함을 막기 위해 K8s 1.16 버전부터 **startupProbe**가 새로 등판했다.
    • 룰을 건다. "이 파드가 맨 처음 부팅될 때, 최대 5분(300초) 동안은 절대 사신(Liveness)이나 매니저(Readiness)가 찌르지 못하게 접근 금지 바리케이드를 쳐라!"
    • 이 바리케이드가 쳐진 5분 동안 startupProbe 혼자서 조용히 찔러본다. "로딩 다 됐어?"
    • 파드가 마침내 "어, 다 됐어(200 OK)!"라고 딱 한 번 응답을 주는 순간, startupProbe는 기뻐하며 바리케이드를 치우고 즉시 퇴근(소멸)한다.
    • 바리케이드가 걷히면 그제야 바깥에서 대기하던 Liveness와 Readiness가 우르르 몰려와 평소처럼 찌르기(운영 감시)를 시작한다. 뚱뚱한 짐승(앱)도 무사히 클라우드에 안착하게 해주는 따뜻한 인큐베이터 기술이다.

📢 섹션 요약 비유: 컴퓨터를 처음 켰을 때(부팅 중) 엄청 버벅거립니다. 이때 엄마(Liveness Probe)가 들어와 "너 왜 컴퓨터 안 해! 죽을래?" 라며 10초 만에 전원 코드를 뽑아버리고(재부팅) 나가는 끔찍한 상황입니다. Startup Probe는 '로딩 중 방해 금지 팻말'입니다. 방문 앞에 이 팻말을 걸어두면 5분 동안은 엄마나 아빠(Readiness)가 절대 방문을 열지 못합니다. 3분 뒤 컴퓨터 부팅이 100% 완전히 끝나 윈도우 화면이 떴을 때 팻말을 떼버리면, 그때부터 부모님이 정상적으로 방문을 열고 들어와 감시를 시작하는, 느려 터진 구형 컴퓨터(Legacy App)를 위한 눈물겨운 유예 기간(Grace Period) 보장술입니다.