로컬 쿠버네티스 실습 ②: ConfigMap과 리소스 설정으로 운영 구조 만들기
로컬 쿠버네티스 실습 ② 운영에 가까운 형태로 확장해보기
지난 글에서는
Deployment와 Service만으로 가장 기본적인 배포 흐름을 따라가봤다.
이번에는 그 구조를 조금만 확장해서,
운영 환경에서 실제로 쓰이는 형태에 더 가깝게 만들어본다.
이번 실습의 핵심은 다음 세 가지다.
- 설정을 이미지에서 분리한다
- 리소스 사용 범위를 명확히 한다
- 배포가 어떻게 교체되는지 직접 확인한다
이번 실습에서 추가할 요소들
이전 실습 대비 추가되는 요소는 다음이다.
- ConfigMap으로 설정 분리
- requests / limits 설정
- 롤링 업데이트 과정 확인
여전히 예제 애플리케이션은 단순하지만,
쿠버네티스를 쓰는 이유가 드러나는 지점을 직접 확인하는 게 목표다.
1. 설정을 이미지에서 분리해야 하는 이유
이전 실습에서는
애플리케이션 설정이 이미지 안에 있다고 가정했다.
하지만 운영 환경에서는 다음 문제가 생긴다.
- 환경(dev/prod)마다 이미지 재빌드 필요
- 설정 하나 바꾸려면 배포 전체 재수행
- 설정 변경 이력 관리가 어렵다
그래서 쿠버네티스에서는
설정은 ConfigMap으로 분리하는 것이 기본 패턴이다.
2. ConfigMap 추가하기
ConfigMap에는 보통 이런 값들이 들어간다.
- 서버 포트
- 환경 이름
- 기능 플래그
- 외부 API 주소


이제 Deployment에서는
이미지 자체가 아니라 외부 설정을 참조하게 된다.
실제로 써보면 이 시점부터
“아, 이미지와 설정이 분리됐구나”라는 느낌이 든다.
3. ConfigMap 변경 후 무엇이 달라질까
중요한 포인트가 하나 있다.
- ConfigMap을 수정해도
- 이미 실행 중인 Pod에는 자동 반영되지 않는 경우가 많다
그래서 보통은 다음 중 하나를 선택한다.
- Pod 재시작
- Deployment 재배포
이 동작을 직접 해보면,
“왜 설정 변경 시 재배포가 필요한지”가 자연스럽게 이해된다.
4. requests와 limits 추가하기
이제 리소스 설정을 추가해본다.
이전 실습에서는
Pod가 얼마나 리소스를 써도 되는지 정의하지 않았다.
운영 환경에서는 이 상태가 가장 위험하다.
resources:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "512Mi"
이 설정 하나로 다음이 명확해진다.
- 최소 보장 리소스
- 최대 사용 가능 범위
- 스케줄링 기준


실제로 적용해보면
Pod가 배치되는 Node가 달라질 수도 있다.
5. 리소스 설정 후 확인해볼 것들
설정 후에는 꼭 다음을 확인해본다.
kubectl describe pod <pod-name>
여기서 확인할 포인트는 다음이다.
- requests / limits 값이 제대로 반영됐는지
- OOMKilled 같은 이벤트가 발생하지 않는지
이 과정을 통해
“리소스 설정은 선언이지 희망사항이 아니다”라는 걸 체감하게 된다.
6. 이미지 버전 변경으로 롤링 업데이트 체험하기
이제 Deployment의 이미지 태그를 변경해본다.
이 작업 하나로
쿠버네티스는 자동으로 다음을 수행한다.
- 기존 Pod를 하나씩 종료
- 새 이미지로 Pod 생성
- 지정된 전략에 따라 교체


중요한 건,
이 과정에서 Service는 계속 살아 있다는 점이다.
7. 롤링 업데이트 중에 확인하면 좋은 것들
업데이트 중에는 다음을 함께 보면 좋다.
kubectl get pod -w
- Pod가 하나씩 교체되는지
- 동시에 모두 내려가지는 않는지
- 새 Pod가 정상 상태가 된 후 기존 Pod가 내려가는지
이 장면을 직접 보면,
무중단 배포라는 말이 추상적이지 않게 느껴진다.
8. 문제가 생기면 어떻게 될까
만약 새 이미지에 문제가 있다면,
- 새 Pod가 정상 상태가 되지 못하고
- 이전 Pod가 계속 유지되거나
- 롤백이 필요해진다
이 흐름을 이해하고 있으면,
실제 운영에서 배포가 멈췄을 때도
당황하지 않고 상황을 해석할 수 있다.
실제로 해보면 느끼는 변화
이번 실습까지 해보면
이전과 비교해 인식이 달라진다.
- 단순 실행 → 운영 구조
- 컨테이너 실행 → 상태 관리
- 배포 → 교체 전략
쿠버네티스가 왜 복잡해 보이는지,
그리고 왜 그 복잡함이 필요한지도 함께 보이기 시작한다.
정리하며
이번 글에서는
이전 실습을 기반으로 운영에 가까운 형태로 구조를 확장해봤다.
- ConfigMap으로 설정 분리
- requests / limits로 리소스 통제
- Deployment의 롤링 업데이트 체험
이 단계까지 직접 해봤다면,
쿠버네티스의 기본적인 사용 흐름은
“알고 있다”가 아니라 “써봤다”에 가까워진다.
다음 글에서는
이 실습 환경에 Ingress를 추가해서 외부 접근 구조를 만들고,
도메인 기반 라우팅 흐름을 한 번 더 정리해볼 예정이다.