본문 바로가기
클라우드/쿠버네티스

🏙️ 쿠버네티스 도시 건설! 핵심 건물 4가지 만나보기 (Pod, Service, Deployment, Namespace)

by gasbugs 2025. 9. 3.

안녕하세요! 쿠버네티스라는 거대한 도시에 막 도착하신 여러분을 환영합니다. 👏 이 도시는 '컨테이너'라는 조립식 블록으로 애플리케이션을 짓는, 아주 현대적이고 효율적인 곳이에요. 하지만 처음 오면 어떤 건물이 무슨 역할을 하는지 헷갈리기 마련이죠.

오늘은 이 쿠버네티스 도시를 지탱하는 가장 중요한 핵심 건물 4가지를 함께 둘러보려고 합니다. 바로 Pod(파드), Service(서비스), Deployment(디플로이먼트), Namespace(네임스페이스)입니다. 이 네 가지만 확실히 이해해도 쿠버네티스 도시의 절반은 구경한 셈이랍니다! 자, 그럼 시티투어 버스에 탑승해볼까요? 🚌


🏡 Pod (파드): 우리 앱이 사는 '집'

가장 먼저 들를 곳은 도시의 가장 기본 단위인 '집', 바로 Pod입니다.

Pod(파드): 쿠버네티스에서 생성하고 관리할 수 있는 가장 작은 배포 단위입니다.

쿠버네티스 도시에서는 모든 애플리케이션(컨테이너)이 '집(Pod)' 안에 살아야 해요. 이 집은 아주 특별한 특징을 가지고 있습니다.

  • 하나 이상의 방(컨테이너)을 가질 수 있어요: 하나의 집(Pod) 안에 방(컨테이너)이 하나만 있을 수도 있고, 아주 긴밀하게 협력해야 하는 룸메이트처럼 여러 개의 방(컨테이너)이 함께 있을 수도 있습니다. 📦+📦
  • 자원을 공유해요: 한 집에 사는 룸메이트(컨테이너)들은 같은 주방과 화장실을 쓰겠죠? 마찬가지로 한 Pod 안의 컨테이너들은 네트워크(IP 주소)와 저장 공간(볼륨)을 공유합니다. 서로 localhost로 통신할 수 있을 만큼 가깝다는 뜻이에요! 🤝
  • 영원하지 않아요 (Ephemeral): 이게 가장 중요한 특징이에요! Pod라는 집은 영원하지 않습니다. 문제가 생기면 가차 없이 허물어지고(삭제), 새로운 집이 그 자리를 대체합니다. 즉, Pod가 재시작되면 IP 주소 같은 정보가 바뀐다는 의미입니다. 마치 이사 가면 집 주소가 바뀌는 것과 같아요.

한마디 요약: Pod는 컨테이너를 감싸는 가장 작은 실행 단위이며, 언제든 사라지고 새로 생길 수 있는 임시 주택과 같습니다.


📮 Service (서비스): 절대 바뀌지 않는 '우편 주소'

방금 Pod가 이사를 자주 다녀서 집 주소(IP)가 계속 바뀐다고 했죠? 그럼 친구(다른 Pod)들은 어떻게 이사 간 Pod를 찾아갈 수 있을까요? 여기서 도시의 '우체국' 역할을 하는 Service가 등장합니다!

Service(서비스): 여러 Pod에 대한 안정적인 네트워크 엔드포인트(고정된 주소)를 제공하는 방법입니다.

Service는 계속해서 바뀌는 Pod들의 IP 주소 문제를 해결해주는 아주 고마운 존재예요.

  • 고유한 주소를 부여해요: Service는 자기만의 고정된 IP 주소와 DNS 이름을 가집니다. 마치 my-app.default.svc.cluster.local처럼 절대 바뀌지 않는 '도메인 주소'를 만들어주는 거죠. 🌐
  • 알아서 배달해줘요 (로드 밸런싱): Service는 특정 꼬리표(Label)가 붙은 Pod들을 항상 주시하고 있습니다. 외부에서 "이 꼬리표를 가진 Pod에게 편지 보내줘!"라고 요청하면, Service는 해당 꼬리표를 가진 여러 Pod 중 하나에게 알아서 요청을 전달해줍니다. 한 Pod에 일이 몰리지 않게 교통정리를 해주는 셈이죠. 🎯
  • 내부/외부 통신을 담당해요: 클러스터 내부의 Pod들끼리 통신하게 해주는 것(ClusterIP)은 기본이고, 설정에 따라 도시 외부의 사용자들이 접근할 수 있도록 항구(NodePort)나 공항(LoadBalancer)을 열어주는 역할도 합니다.

한마디 요약: Service는 여러 개의 Pod를 대표하는 하나의 고정된 창구이자, 요청을 알맞게 분배해주는 스마트한 교통 경찰입니다.


🤖 Deployment (디플로이먼트): 똑똑한 '아파트 관리소장'

이제 집(Pod)도 있고, 주소(Service)도 생겼습니다. 그런데 만약 집 하나가 무너지면 어떡하죠? 주민들이 더 필요해서 집을 10채로 늘리고 싶으면요? 일일이 손으로 집을 짓고 관리하는 건 너무 힘들겠죠. 그래서 우리는 Deployment라는 아주 유능한 '아파트 관리소장'을 고용합니다.

Deployment(디플로이먼트): Pod의 배포와 업데이트를 원하는 상태(desired state)로 관리하는 컨트롤러입니다.

우리는 관리소장(Deployment)에게 원하는 바를 설명하기만 하면 됩니다.

  • "아파트 3채를 항상 유지해주세요!" (Replica 관리): Deployment에게 "Pod 3개를 항상 실행시켜줘"라고 명령하면, 무슨 일이 있어도 Pod 3개를 유지합니다. Pod 하나가 죽으면 즉시 새로운 Pod를 만들고, 누군가 몰래 Pod를 4개로 늘리면 하나를 없애버리죠. 이것이 바로 자가 치유(Self-healing) 능력입니다.
  • "새로운 버전으로 리모델링해주세요!" (배포 및 업데이트): 아파트 전체를 최신 버전으로 리모델링해야 할 때, Deployment는 아주 똑똑하게 일합니다. 모든 집을 한 번에 부수는 게 아니라, 하나씩 새 버전으로 교체하고 문제가 없는지 확인하며 점진적으로 업데이트합니다(롤링 업데이트). 🔄 덕분에 서비스 중단 없이 업데이트가 가능하죠.
  • "예전 인테리어가 더 좋았어요!" (롤백): 만약 리모델링에 문제가 생겼다면? "이전 버전으로 되돌려줘!" 한마디면 Deployment는 즉시 이전 버전으로 아파트를 원상복구 시켜줍니다.

한마디 요약: Deployment는 우리가 원하는 Pod의 개수와 버전을 선언하면, 알아서 그 상태를 유지하고 관리해주는 자동화 매니저입니다.


🏢 Namespace (네임스페이스): 잘 구획된 '행정 구역'

도시가 점점 커지고 여러 팀(개발팀, 운영팀, 테스트팀)이 함께 살게 되면 어떻게 될까요? 서로의 건물 이름을 헷갈리거나 자원을 마구잡이로 사용해서 충돌이 일어날 수 있습니다. 이럴 때 필요한 것이 바로 도시를 나누는 '행정 구역', Namespace입니다.

Namespace(네임스페이스): 하나의 물리적인 클러스터를 여러 개의 가상 클러스터로 나누어 사용하는 논리적인 격리 단위입니다.

Namespace는 거대한 쿠버네티스 도시를 논리적으로 분리하여 질서를 부여합니다.

  • 이름 충돌 방지: '개발구'에 있는 my-db와 '운영구'에 있는 my-db는 이름이 같아도 서로 다른 건물로 취급됩니다. 덕분에 여러 팀이 같은 리소스 이름을 사용해도 충돌이 일어나지 않아요. 📂
  • 자원 할당 및 격리: "개발구는 메모리를 10GB 이상 쓰지 마세요", "운영구는 CPU를 8코어까지 쓸 수 있습니다" 와 같이 구역별로 사용할 수 있는 자원의 양(ResourceQuota)을 제한할 수 있습니다.
  • 접근 권한 제어: A팀은 'A구역'에만 건물을 지을 수 있고, B팀은 'B구역'만 들여다볼 수 있도록 역할 기반으로 접근을 제어(RBAC)할 수 있습니다. 🔐

한마디 요약: Namespace는 하나의 클러스터를 여러 팀이 안전하고 효율적으로 나눠 쓸 수 있게 해주는 칸막이이자 가상 작업 공간입니다.


✨ 함께 작동하는 모습

자, 이제 모든 건물이 어떻게 유기적으로 움직이는지 상상해볼까요?

개발자는 Namespace(행정 구역) 🏢 안에, Deployment(관리소장) 🤖에게 "최신 버전 앱이 담긴 Pod(집) 🏡 3채를 지어줘!"라고 요청합니다. Deployment는 즉시 Pod 3개를 짓고 관리하기 시작합니다. 그리고 우리는 Service(우편 주소) 📮를 만들어 이 3개의 Pod를 대표하는 고정 주소를 부여합니다. 이제 다른 서비스나 외부 사용자는 이 Service 주소만 알면 언제든지 우리 앱에 안정적으로 접근할 수 있게 되는 것입니다!

 

어떠셨나요? 쿠버네티스 도시의 핵심 건물들이 이제 조금은 친숙하게 느껴지시나요? 이 네 가지 개념은 앞으로 여러분이 쿠버네티스 도시에서 멋진 애플리케이션을 건설해나가는 데 가장 튼튼한 기반이 될 것입니다.