본문 바로가기
쿠버네티스

쿠버네티스 기본 오브젝트 - 파드, 레플리카셋, 서비스

by zero-stack 2025. 11. 8.

쿠버네티스를 들어가며

클라우드 시대가 오면서 단순히 EC2에 직접 서비스를 올려서 인프라를 구성하는 방법보다 컨테이너 환경을 이용해서 

보다 쉽게 서비스를 배포 및 관리를 하는 회사들이 많아졌다.

 

이전 회사에서 NCP(Naver Cloud Platform) 클라우드 환경에서 서비스를 운영해본 경험은 있었지만 단순 VPC 환경에 EC2 인스턴스를 구성하고 서비스를 올려 운영하는 방식이였지 컨테이너를 이용해서 서비스를 운영해본 경험은 없었다.

그래서 더욱 컨테이너 환경에 대해 경험해보고 싶어서 공부하기로 마음 먹었다.

 

해당 카테고리에 있는 포스트는 쿠버네티스를 공부하며 남기는 포스이며 Docker에 대한 개념은 별도로 다루지는 않을 예정이다.

그럼 첫번째 포스트로 쿠버네티스의 기본 오브젝트에 대해서 공부해보자

 

쿠버네티스 기본 오브젝트 

1. 파드(Pod)

  • 쿠버네티스 클러스터 스케줄링에서 가장 작은 원자 단위
  • 하나 이상의 실행 중인 컨테이너로 구성
  • 파드의 모든 컨테이너가 클러스터에서 동일한 시스템을 차지하도록 보장
  • 파드는 모두 동일한 네트워크 네임스페이스를 공유하며 컨테이너 사이에서 많은 자원을 공유
  • 프로세스와 프로세스 간 통신 네임스페이스를 공유하며 공유 메모리나 시그널링 같은 툴을 사용하여 다른 컨테이너에서 파드의 프로세스를 제어할 수 있다.
  • 파드는 yaml 파일로 정의 후 배포 할 수 있다.
nginx-pod.yaml
apiVersion: v1 # Pod 생성 시 v1이라고 기재
kind: Pod # 리소스의 종류 중 Pod를 생성

metadata: # 기본 정보 작성
  name: nginx-pod # Pod에 이름 붙이는 기능
  
spec: # 파드의 대한 세부 정보 작성
  containers: # 컨테이너의 대한 정보 작성
    - name: nginx-container # 컨테이너의 이름
      image: nginx # 컨테이너를 생성할 때 사용할 Docker 이미지
      ports:
        - containerPort: 80 # 해당 컨테이너가 어떤 포트를 사용하는 지 명시적으로 표현
        # -> 가독성을 위한 정보이지 nginx가 실행 될 때의 port 설정하는데 영향이 없다

2. 레플리카셋

  • 하나의 파드의 복제본을 '레플리카'라고 칭한다.
  • 레플리카(파드의 복제본)을 묶는 단위
  • 스케일 아웃으로 부하에 대응하여 애플리케이션을 쉽게 확장할 수 있다. 
  • 주어진 파드 정의에서 시스템에 여러 개의 레플리카가 존재하을 보장
  • 실제 복제는 쿠버네티스 컨트롤러 관리자가 처리하며 스케줄러에서 예약한 파드 오브젝트를 생성
apiVersion: apps/v1
kind: ReplicaSet

# 기본 정보
metadata:
  name: spring-replicaset #이름

# 세부 정보
spec:
  replicas: 3 # 생성할 파드의 복제본 개수
  selector:
    matchLabels:
      app: backend-app # 아래에서 정의한 Pod 중 'app: backend-app'이라는 값을 가진 파드를 선택

  # 배포할 Pod 정의
  template:
    metadata:
      labels: # 레이블 (= 카테고리)
        app: backend-app
    spec:
      containers:
        - name: spring-container # 컨테이너 이름
          image: spring-server # 컨테이너를 생성할 때 사용할 이미지
          imagePullPolicy: IfNotPresent # 로컬에서 이미지를 먼저 가져온다. 없으면 레지스트리에서 가져온다.
          ports:
            - containerPort: 8080  # 컨테이너에서 사용하는 포트를 명시적으로 표현

 

 

3. 서비스

  • 여러 레플리카에 트래픽을 분산시키는 로드 밸런서 역할을 하는 기능
  • TCP나 UDP 로드 밸런싱 서비스를 나타낸다.
  • 고정 IP 주소를 가진다. 
  • 쿠버네티스 클러스터 DNS 항목을 가진다. 
  • 트래픽을 프록시하는 로드 밸런싱 규칙을 가진다.
apiVersion: v1
kind: Service

# Service 기본 정보
metadata:
  name: spring-service # Service 이름
  
# Service 세부 정보
spec:
  type: NodePort # Service의 종류
  selector:
    app: backend-app # 실행되고 있는 파드 중 'app: backend-app'이라는 값을 가진 파드와 서비스를 연결
  ports:
    - protocol: TCP # 서비스에 접속하기 위한 프로토콜
      port: 8080 # 쿠버네티스 내부에서 Service에 접속하기 위한 포트 번호
      targetPort: 8080 # 매핑하기 위한 파드의 포트 번호
      nodePort: 30000 # 외부에서 사용자들이 접근하게 될 포트 번호

 

 

'쿠버네티스' 카테고리의 다른 글

쿠버네티스 - 컨피그맵(ConfigMap), 시크릿(Secret)  (0) 2025.11.10