Kubernetes (37) - Kustomize로 환경별 매니페스트 구성 관리하기
같은 애플리케이션을 개발 환경과 운영 환경에 배포하면 YAML 파일이 조금씩 달라진다. 개발 환경은 Pod를 1개만 실행하고, 운영 환경은 3개를 실행할 수 있다. Ingress 주소, 이미지 태그, 리소스 제한도 환경마다 다를 수 있다. 이 차이 때문에 YAML을 통…
같은 애플리케이션을 개발 환경과 운영 환경에 배포하면 YAML 파일이 조금씩 달라진다. 개발 환경은 Pod를 1개만 실행하고, 운영 환경은 3개를 실행할 수 있다. Ingress 주소, 이미지 태그, 리소스 제한도 환경마다 다를 수 있다. 이 차이 때문에 YAML을 통…
Spring Kafka (1)에서는 KafkaTemplate 으로 메시지를 보내고 @KafkaListener 로 받는 가장 기본적인 흐름을 정리했다. 하지만 실제 서비스에서 "DB에 데이터를 저장하고, 그 사실을 Kafka로 알린다"는 요구사항을 곧이곧대로 구현하면 문…
새 버전을 배포하는 일은 단순히 Pod 이미지를 바꾸는 것보다 넓은 문제다. 기존 버전과 새 버전을 얼마나 오래 함께 실행할지, 어떤 기준으로 트래픽을 넘길지, 문제가 생겼을 때 얼마나 빨리 되돌릴지를 함께 결정해야 한다. 이 글에서는 Deployment의 기본 업데이…
Kafka를 애플리케이션에 연결하려면 Producer와 Consumer의 클라이언트 설정, 직렬화 방식, 리스너 실행 등을 준비해야 한다. Spring Kafka는 이 과정을 Spring의 빈과 애노테이션으로 구성할 수 있게 해 주는 프로젝트다. 이번 글에서는 Spri…
일반적인 Pod는 API 서버에 매니페스트를 제출하고, 스케줄러와 컨트롤러를 거쳐 노드에서 실행된다. 반면 Static Pod는 특정 노드의 kubelet이 로컬 파일을 직접 읽어 실행·관리하는 Pod다. 이 방식은 API 서버가 아직 준비되지 않은 상황에서도 노드에서…
HPA가 부하에 맞춰 Pod 수를 늘려도, 모든 노드에 빈자리가 없다면 새 Pod는 실행되지 못하고 Pending 상태에 남는다. 이때 필요한 것은 Pod가 아니라 Pod를 실행할 노드 를 늘리는 일이다. Cluster Autoscaler는 스케줄되지 못한 Pod와 노…
앞 글에서 HPA는 부하에 따라 Pod 개수 를 조절한다고 살펴봤다. 하지만 Pod의 CPU·메모리 requests 자체가 실제 워크로드에 맞지 않으면, Pod가 불필요하게 많이 배치되지 않거나 반대로 자원을 낭비할 수 있다. Vertical Pod Autoscaler…
웹 요청이 늘어날 때 Pod를 사람이 직접 늘리고, 한가해지면 다시 줄이는 일은 반복적이고 늦기 쉽다. Horizontal Pod Autoscaler(HPA)는 관측한 지표를 바탕으로 Deployment 같은 워크로드의 복제본 수를 자동으로 조절한다. HPA는 컨테이너…
앞 글에서 컨테이너마다 requests 와 limits 를 직접 설정했다. 하지만 팀원이 많아지면 누군가 설정을 빠뜨리거나, 지나치게 큰 값을 넣는 일을 매번 리뷰만으로 막기 어렵다. LimitRange 와 ResourceQuota 는 네임스페이스 단위로 기본값과 총량…
컨테이너는 파일을 쓸 수 있다. 로그 파일, 압축 해제 파일, 임시 캐시처럼 컨테이너가 사용하는 로컬 디스크도 결국 Kubernetes 노드의 디스크 공간을 차지한다. 이런 임시 디스크 사용량을 관리하는 리소스가 ephemeral storage 다. 데이터를 오래 보존…