108. 쿠버네티스 프로브 (Probes) 생명주기 관리
⚠️ 이 문서는 쿠버네티스가 파드(Pod)를 띄웠다고 "아싸, 서버 켜졌다!"라며 무턱대고 1만 명의 손님(트래픽)을 밀어 넣었다가, 서버 안의 자바(Java) 앱이 아직 로딩 중이어서 500 에러를 뿜으며 장렬히 전사하는 끔찍한 아마추어 짓을 막기 위해, **파드의 뱃속을 콕콕 찔러보며 "너 지금 손님 받을 준비 다 됐어(Readiness)?", "너 혹시 일하다가 죽어서 좀비 상태 된 거 아냐(Liveness)?"라고 끝없이 건강을 검진(Health Check)하는 3가지 절대적인 생명 연장 청진기 '프로브(Probes)'**를 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 파드 껍데기(컨테이너)가
Running상태라고 해서 안의 프로그램(앱)이 정상 동작한다는 보장은 0%다. K8s의 뇌(Kubelet)가 주기적으로 앱의 엔드포인트(/healthz등)를 찔러서 실제 앱의 생사 여부를 직접 확인하는 팩트 체크 기능이다.- 가치: 무중단 배포(Zero Downtime)의 핵심 심장이다. 새 서버가 100% 준비 완료 도장을 받기 전까지는 트래픽을 절대 주지 않으며(Readiness), 며칠 돌다가 메모리가 새서 뻗어버린 좀비 파드는 기계가 알아서 눈치채고 암살 후 새로 띄워주는(Liveness) 100% 무인 자가 치유(Auto-Healing)를 완성한다.
- 기술 체계: 무거운 스프링(Spring) 앱이 뜰 때까지 기다려주는 방패
Startup Probe, 손님을 받아도 되는지 문을 열어주는 신호등Readiness Probe, 24시간 감시하다 미치면 죽여버리는 사신Liveness Probe3박자로 완벽하게 돌아간다.
Ⅰ. Readiness Probe (준비성 프로브): 트래픽의 신호등
간판 불을 켰다고 영업 시작이 아니다. 찌개가 다 끓어야 손님을 받는다.
- 상태 착각의 비극:
- 톰캣(Tomcat) 서버 컨테이너가 K8s에서 켜지면 0.1초 만에
Running상태로 뜬다. - 멍청한 L4 로드밸런서(Service)는 "오! 새 서버 떴네!" 하고 즉시 대기하던 고객 트래픽 1만 명을 이쪽으로 확 넘긴다.
- 하지만 톰캣 뱃속에 있는 무거운 스프링(Spring Boot) 프레임워크와 DB 커넥션 풀이 연결되려면 최소 15초의 시간이 필요하다. 결국 15초 동안 들어온 1만 명의 고객은 몽땅
502 Bad Gateway에러를 쳐맞고 폭동을 일으킨다.
- 톰캣(Tomcat) 서버 컨테이너가 K8s에서 켜지면 0.1초 만에
- Readiness Probe (신호등 제어):
- yaml 파일에
readinessProbe를 달고HTTP GET /health를 2초마다 찌르라고 명령한다. - 파드가 켜져도 로드밸런서는 절대 트래픽을 넘기지 않고(격리) 가만히 서 있다.
- K8s(Kubelet)가 2초마다 파드 배꼽을 찌른다. "2초: 에러(500), 4초: 에러(500)... 16초: 정상(200 OK)!"
- 파드가 200 OK를 뱉어내는 그 찬란한 순간, K8s는 그제야 로드밸런서에게 "야! 얘 진짜 요리 준비 끝났다! 손님 1만 명 들여보내라!"라고 초록불을 켜준다. 무중단 배포의 500 에러를 0으로 멸망시키는 절대 방어막이다.
- yaml 파일에
📢 섹션 요약 비유: 식당 셔터 문을 열었다고(Pod Running) 손님을 바로 들이밀면, 손님들은 주방장이 도마 닦고 양파 까는 걸 10분 동안 보면서 짜증(500 에러)을 냅니다. Readiness Probe는 깐깐한 홀 매니저입니다. 셔터를 올리더라도 식당 문 앞을 몸으로 꽉 막고 섭니다(트래픽 차단). 주방을 계속 기웃거리다가(찌르기), 주방장이 가스레인지에 불을 켜고 "자, 이제 첫 주문 받아!"라고 소리치는 그 완벽한 순간(200 OK)에만 정문을 열어 손님을 들여보내는 완벽한 입장 통제 시스템입니다.
Ⅱ. Liveness Probe (활성 프로브): 좀비 감별사와 암살자
숨을 쉬지 않는 좀비 직원은 자르지 않으면 팀 전체를 전염시킨다.
- Deadlock (교착 상태)의 공포:
- Readiness 덕분에 파드가 잘 켜져서 한 달 동안 손님을 신나게 받았다.
- 그런데 어느 날 코딩 버그로 메모리 누수(Memory Leak)가 터져, 이 파드가 DB를 잡은 채 멈춰버렸다(Deadlock).
- 더 환장할 노릇은, 파드의 컨테이너 껍데기는 아직 안 터졌기 때문에(프로세스가 안 죽음) K8s 상태 창에는 여전히
Running(정상)으로 초록불이 켜져 있다는 것이다. K8s는 바보같이 이 멈춰버린 좀비 파드에게 계속 손님(트래픽)을 던져주고 손님들은 무한 로딩 창에 갇혀 죽어 나간다.
- Liveness Probe (좀비 암살자):
- 이번엔 yaml 파일에
livenessProbe를 달아둔다. "3초마다 앱이 숨을 쉬는지/ping주소로 찔러봐라." - Kubelet이 멈춰버린 좀비 파드를 찌른다. 대답이 없다(Timeout). 한 번 더 찌른다. 대답이 없다. "Failure Threshold(실패 임계치)"인 3번 연속 무응답을 확인한다.
- K8s의 눈이 뒤집힌다. "이 새끼 죽은 채로 서 있는 좀비네!" 그 즉시 Kubelet이 전기톱을 꺼내 이 멍청한 파드의 목을 썰어버리고(Kill / Restart), 깨끗한 새 파드로 강제 부활(자가 치유, Auto-healing)시켜 버린다. 서비스가 마비에서 1분 만에 저절로 풀리는 기적의 순간이다.
- 이번엔 yaml 파일에
📢 섹션 요약 비유: Liveness Probe는 일하는 직원 뒤에 서서 5분에 한 번씩 직원의 옆구리를 찌르는(Ping) 악덕 감시관입니다. 직원이 너무 피곤해서 눈을 뜬 채로 선 채 기절(Deadlock 좀비 상태)했습니다. 겉보기엔 멀쩡하게 서 있어서(Running) 사장님은 모릅니다. 감시관이 옆구리를 3번 연속 찔렀는데 "아!" 소리를 안 내면, "이놈 기절했네!"라며 즉시 직원을 병원(Restart)으로 앰뷸런스 태워버리고 쌩쌩한 새 직원을 1초 만에 알바천국에서 데려다 꽂아 넣는 피도 눈물도 없는 공장 자동 치유 시스템입니다.
Ⅲ. Startup Probe (스타트업 프로브): 뚱땡이 앱의 방패
로딩하는 데만 3분이 걸리는 무거운 앱은 찌르다가 죽을 수도 있다.
- 기존 프로브의 모순적 팀킬 (Team Kill):
- 엄청나게 무거운 구형 톰캣 앱(Legacy)을 K8s에 올렸다. 얘는 부팅해서 메모리에 다 올라올 때까지 꼬박 **3분(180초)**이 걸린다.
- 그런데 아까 설정한 사신(Liveness Probe)은 파드가 켜지자마자 3초마다 찌르기 시작한다. 3번 찔러서 대답 없으면 죽인다고 했다.
- 앱 입장에서는 "야! 나 아직 로딩 중인데 10초 만에 날 왜 죽여!" 라며 피를 토하고 죽는다. 그리고 다시 켜지고, 또 10초 만에 죽임을 당하는 무한 재부팅(CrashLoop)의 지옥에 빠진다. (사신이 아군을 죽임)
- Startup Probe (초반 면책권):
- 이 억울함을 막기 위해 K8s 1.16 버전부터 **
startupProbe**가 새로 등판했다. - 룰을 건다. "이 파드가 맨 처음 부팅될 때, 최대 5분(300초) 동안은 절대 사신(Liveness)이나 매니저(Readiness)가 찌르지 못하게 접근 금지 바리케이드를 쳐라!"
- 이 바리케이드가 쳐진 5분 동안
startupProbe혼자서 조용히 찔러본다. "로딩 다 됐어?" - 파드가 마침내 "어, 다 됐어(200 OK)!"라고 딱 한 번 응답을 주는 순간,
startupProbe는 기뻐하며 바리케이드를 치우고 즉시 퇴근(소멸)한다. - 바리케이드가 걷히면 그제야 바깥에서 대기하던 Liveness와 Readiness가 우르르 몰려와 평소처럼 찌르기(운영 감시)를 시작한다. 뚱뚱한 짐승(앱)도 무사히 클라우드에 안착하게 해주는 따뜻한 인큐베이터 기술이다.
- 이 억울함을 막기 위해 K8s 1.16 버전부터 **
📢 섹션 요약 비유: 컴퓨터를 처음 켰을 때(부팅 중) 엄청 버벅거립니다. 이때 엄마(Liveness Probe)가 들어와 "너 왜 컴퓨터 안 해! 죽을래?" 라며 10초 만에 전원 코드를 뽑아버리고(재부팅) 나가는 끔찍한 상황입니다. Startup Probe는 '로딩 중 방해 금지 팻말'입니다. 방문 앞에 이 팻말을 걸어두면 5분 동안은 엄마나 아빠(Readiness)가 절대 방문을 열지 못합니다. 3분 뒤 컴퓨터 부팅이 100% 완전히 끝나 윈도우 화면이 떴을 때 팻말을 떼버리면, 그때부터 부모님이 정상적으로 방문을 열고 들어와 감시를 시작하는, 느려 터진 구형 컴퓨터(Legacy App)를 위한 눈물겨운 유예 기간(Grace Period) 보장술입니다.