현장 데이터 서비스 구축기 10편
Pod, Node, Namespace, Ingress, Service, Secret 같은 쿠버네티스 용어를 쇼핑몰에 빗대 정리했다. 인프라 담당자와 대화해야 하는 기획자와 PI 담당자, 처음 배포를 맡은 개발자를 위한 글이다.
이 글의 순서
왜 비유가 필요한가
인프라 담당자와 배포 이야기를 하다 보면 "Pod가 재시작돼요", "Namespace 쿼터가 찼어요", "Ingress에서 404 나요" 같은 말이 쏟아진다. 처음 쿠버네티스를 만났을 때는 단어 하나하나가 벽이었다. 공식 문서는 정확하지만, 처음 보는 사람에게는 무엇이 무엇을 담고 있는지 그림이 안 그려진다.
이해하는 데 가장 도움이 된 건 쇼핑몰 비유였다. 완벽한 비유는 아니지만 관계를 잡는 데는 충분하다. 아래 그림에서 용어를 누르면 해당 부분이 표시된다.
쇼핑몰 한 장으로 보는 쿠버네티스
손님브라우저에서 service.example.com 접속
정문 안내데스크Ingress
쇼핑몰Cluster
A 브랜드 구역임대 한도 메모리 4Gi
대표 전화번호Service
운영 지침: 매장 2개 유지Deployment
매장 1주방 (Container)2층
매장 2주방 (Container)3층
금고Secret
운영 지침서ConfigMap
창고Volume
B 브랜드 구역
다른 팀 서비스서로 간섭하지 않음
본사 물류센터: 매장 표준 키트Image (이미지 저장소)
용어 대응표
| 용어 | 쇼핑몰 | 실제로는 |
|---|---|---|
| Cluster | 쇼핑몰 건물 전체 | 여러 서버를 묶은 하나의 운영 단위 |
| Node | 층 | 실제 서버 한 대. 매장(Pod)은 어느 층에든 배치된다 |
| Namespace | 브랜드 전용 구역 | 팀·서비스별로 나눈 논리 공간. 권한과 자원 한도를 구역 단위로 준다 |
| Pod | 매장 하나 | 앱이 실제로 도는 최소 단위. 언제든 닫히고 새로 열린다 |
| Container | 매장 안 주방 | Pod 안에서 일하는 프로그램. 보통 Pod 하나에 하나 |
| Deployment | 본사 운영 지침 | "매장 2개 유지"처럼 원하는 상태. 매장이 닫히면 새로 열고, 업데이트 때 순서대로 교체한다 |
| Service | 대표 전화번호 | Pod가 바뀌어도 그대로인 고정 주소. 열려 있는 매장으로 연결한다 |
| Ingress | 정문 안내데스크 | 도메인을 보고 어느 Service로 보낼지 정한다. HTTPS도 여기서 처리한다 |
| Secret | 금고 | 비밀번호, 인증서, API 키 |
| ConfigMap | 운영 지침서 | 환경별 설정값 |
| Volume | 창고 | 매장이 새로 열려도 남아야 하는 파일. 첨부파일 같은 것 |
| Image | 매장 표준 키트 | 앱과 실행 환경을 묶은 패키지. 같은 키트면 어느 층에서든 같은 매장이 열린다 |
| ResourceQuota | 구역 임대 한도 | Namespace가 쓸 수 있는 CPU·메모리 상한 |
주의매장 안에 물건을 두면 매장이 닫힐 때 같이 사라진다. Pod 안에 저장한 파일도 Pod가 재시작되면 사라진다. 남아야 하는 파일은 반드시 창고(Volume)에 둔다.
배포 한 번은 이렇게 흘러간다
코드 push정해진 브랜치
CI 빌드새 키트(Image) 제작
이미지 저장소물류센터에 보관
배포 설정 갱신운영 지침의 키트 버전 변경
롤링 업데이트새 매장 열고 옛 매장 닫기
새 매장이 문을 연 다음 옛 매장을 닫는다. 그래서 잠깐은 매장이 하나 더 있다.
자주 듣는 말 번역
| 들은 말 | 쇼핑몰로 바꾸면 |
|---|---|
| Pod가 계속 재시작돼요 | 매장이 문을 닫았다 다시 여는 걸 반복한다. 매장 안에서 문제가 생기고 있다 |
| OOMKilled예요 | 매장이 계약 면적(메모리 한도)을 넘겨서 강제로 닫혔다 |
| 쿼터 초과로 배포가 안 돼요 | 구역 임대 한도가 차서 새 매장을 열 자리가 없다 |
| IP로 들어가면 404가 떠요 | 안내데스크는 상호(도메인)를 보고 안내한다. 주소만 대면 어느 매장인지 모른다. 정상이다 |
| Secret이 없어서 못 떠요 | 매장 열쇠가 금고에 없다 |
| 예전 버전이 계속 떠요 | 운영 지침의 키트 버전이 안 바뀌었거나 옛 키트를 계속 받아 오고 있다 |
정리
- 쇼핑몰(Cluster) 안에 층(Node)이 있고, 매장(Pod)은 층 어딘가에 열린다.
- 브랜드 구역(Namespace)은 논리적인 구분이고, 자원 한도는 구역 단위로 붙는다.
- 손님은 안내데스크(Ingress)와 대표번호(Service)를 거쳐 매장에 닿는다.
- 매장은 언제든 새로 열린다. 남아야 하는 건 창고(Volume), 비밀은 금고(Secret)에 둔다.
이전 편9편. 인사이트 문장은 사람이 쓰고, 노출은 데이터가 정한다
다음 편11편. Flask 앱을 Kubernetes로 옮길 때 체크리스트: 옛 코드 배포, OOM, 쿼터 초과