쿠버네티스 운영 설계 가이드: 장애를 줄이는 기본 습관 정리
쿠버네티스 운영을 덜 아프게 만드는 설계와 습관
앞선 글들에서
Pod 장애, OOMKilled, Evicted, Node 문제까지 살펴봤다.
이쯤 되면 자연스럽게 이런 생각이 든다.
- “매번 터지고 나서 고치는 게 맞나?”
- “처음부터 덜 아프게 운영할 수는 없을까?”
이 글에서는
쿠버네티스를 잘 쓰는 기술이 아니라
덜 고생하면서 운영하기 위한 설계와 습관을 정리한다.
화려한 패턴보다는, 실제로 도움이 되는 기본에 집중한다.
1. 모든 것은 “기본값에 맡기지 않는다”
쿠버네티스는 기본값이 많다.
문제는 이 기본값들이 운영 환경에 최적화되어 있지 않다는 점이다.
대표적인 예시는 다음과 같다.
- resources 미설정
- readiness/liveness probe 미설정
- replicas = 1
처음에는 편하지만,
운영 단계로 가면 거의 항상 문제가 된다.
기본값은 “동작 확인용”이지 “운영용”은 아니다.
2. 리소스 설정은 선택이 아니라 전제다
이미 여러 번 강조했지만,
requests와 limits는 운영의 출발점이다.
최소한 지켜야 할 기준
- 모든 Pod에 requests 설정
- 메모리 limits는 반드시 설정
- CPU limits는 상황에 따라 선택
[이미지: requests/limits 설정 여부에 따른 Pod 안정성 비교]
리소스를 설정해두면 좋은 점은 단순히 장애 방지가 아니다.
- 스케줄링 예측 가능
- 장애 원인 추적이 쉬워짐
- HPA 기준이 명확해짐
실제로 써보면
“왜 이 Pod가 여기 배치됐지?” 같은 의문이 줄어든다.
3. 헬스 체크는 반드시 분리해서 생각한다
쿠버네티스에서 헬스 체크는 보통 두 가지다.
- liveness probe
- readiness probe
이 둘을 같은 개념으로 생각하면
의도치 않은 장애를 만들기 쉽다.
readiness probe
- “지금 트래픽을 받아도 되는가”
- 배포/재시작 시 매우 중요
liveness probe
- “이 컨테이너는 정상 동작 중인가”
- 실패하면 재시작이 발생
⚠️ readiness 없이 liveness만 설정하면
아직 준비 안 된 Pod로 트래픽이 들어갈 수 있다.
4. 로그와 모니터링은 처음부터 최소 세트라도
“나중에 붙이자”는 말은
운영에서는 거의 성립하지 않는다.
최소한 다음 정도는 초기에 갖추는 게 좋다.
로그
- 모든 Pod 로그 중앙 수집
- 서비스/환경 기준으로 필터 가능
모니터링
- Node CPU / 메모리
- Pod 재시작 횟수
- OOMKilled, Evicted 이벤트
[이미지: 로그·모니터링 최소 구성 개념도]
완벽할 필요는 없다.
다만 아무것도 없는 상태는 가장 위험하다.
5. 장애를 전제로 한 구조를 만든다
쿠버네티스의 핵심 철학은 이것이다.
장애는 언젠가 반드시 발생한다.
그래서 다음 질문을 자주 던져야 한다.
- Pod 하나가 죽어도 서비스는 유지되는가?
- Node 하나가 사라져도 괜찮은가?
- 설정 변경 시 롤백이 가능한가?
이를 위해 최소한 다음은 고려하는 게 좋다.
- replicas 2 이상
- 무중단 배포 전략 사용
- 이전 버전으로 롤백 가능 구조
6. “한 번에 많이”보다 “조금씩 자주”
쿠버네티스 환경에서
대규모 변경은 리스크가 크다.
- 리소스 한 번에 크게 조정
- 설정 여러 개 동시에 변경
- 이미지 + 설정 + 스케일링 동시 수정
이런 작업은
문제가 생겼을 때 원인 파악을 어렵게 만든다.
실무에서는 보통
- 한 가지 변경
- 영향 확인
- 다음 변경
이 리듬이 가장 안전하다.
7. 트러블슈팅을 문서로 남긴다
의외로 효과가 큰 습관이다.
- 어떤 증상이었는지
- 원인이 무엇이었는지
- 어떻게 해결했는지
이 기록은 다음에 꼭 다시 쓰인다.
특히 쿠버네티스는 비슷한 문제가 반복되는 경우가 많다.
운영 노하우는 검색보다
“내가 겪었던 기록”이 더 빠른 경우가 많다.
쿠버네티스 운영을 대하는 관점 정리
쿠버네티스를 쓰면서 가장 많이 느끼는 점은 이것이다.
- 잘 쓰면 정말 편하다
- 하지만 방심하면 복잡함이 바로 드러난다
그래서 운영에서는
새로운 기능보다 다음을 더 중요하게 본다.
- 예측 가능성
- 관측 가능성
- 복구 가능성
정리하며
이번 글에서는
쿠버네티스를 덜 아프게 운영하기 위한 설계와 습관을 정리했다.
- 기본값에 의존하지 않는다
- 리소스와 헬스 체크는 필수다
- 로그와 모니터링은 초기에 준비한다
- 장애를 전제로 구조를 만든다
이 글까지를 기준으로 보면,
쿠버네티스의 기본 흐름과 운영 관점은 한 번 훑은 셈이다.
다음 글에서는
조금 방향을 바꿔서
로컬 개발 환경에서 쿠버네티스를 어떻게 연습하면 좋은지,
minikube, kind 같은 도구를 중심으로 정리해볼 예정이다.