서버 개발

쿠버네티스 개념 정리 - (1) 오브젝트

_금융덕후_ 2025. 8. 23. 07:00
728x90
반응형

파드 (Pod)

파드의 정의

  • 애플리케이션을 배포하기 위한 기본 단위
  • 1개 이상의 컨테이너로 구성된 컨테이너 집합

파드와 컨테이너

  • 파드는 여러 컨테이너 소유 가능
  • 파드 내 컨테이너들은 네트워크와 같은 리눅스 네임스페이스를 공유
  • 파드는 여러 리눅스 네임스페이스를 공유하는 컨테이너를 추상화된 집합으로 사용하기 위함
  • 사이드카 컨테이너: 부가적인 기능을 하는 컨테이너

레플리카셋 (ReplicaSet)

  • 일정 개수의 파드를 유지하는 컨트롤러

레플리카셋의 역할

  • 정해진 수의 동일한 파드가 항상 실행되도록 관리
  • 파드를 사용할 수 없다면 다른 노드에서 파드 재생성
  • 장애 발생, 접근 불가시 특정 갯수의 파드를 유지하도록 관리하는 기능

동작 원리

  • 파드와 레플리카셋은 라벨설렉터를 통해 느슨한 연결을 유지하고, 연결되지는 않음
  • 라벨은 생성 후 적용해도 기 생성된 파드에 레플리카셋 적용 가능
apiVersion: apps/v1
kind: ReplicaSet # 레플리카셋 정의
…
spec:
    replicas: 3
    selector:
        matchLabels:
            app: my-pods-label # 레플리카셋의 레이블 정의
    template:
        metadata:
            name: my-pod
            label:
                app: my-pods-label # 파드에 레이블 적용
…

디플로이먼트 (Deployment)

  • 레플리카셋, 파드의 배포를 관리

디플로이먼트의 역할

  • 현실 운영에서는 레플리카셋 보다는 디플로이먼트를 사용
  • 디플로이먼트는 레플리카셋의 상위 오브젝트, 디플로이먼트 생성시 레플리카셋도 함께 생성
  • 디플로이먼트 → 레플리카셋 → 파드s를 생성/삭제 하는 구조
apiVersion: apps/v1
kind: Deployment # 디플로이먼트 정의
metadata:
    name: my-deployment
spec:
    replicas: 3
    selector:
        matchLabels:
            app: my-app # 레플리카셋과 동일한 레이블 정의
...

디플로이먼트를 사용하는 이유

  • 컨테이너 앱을 배포하고 관리하는 역할
  • 리비전을 통한 롤백, 롤링 업데이트 등의 기능을 지원

서비스 (Service)

컨테이너 서비스 노출시 주의점

  • 파드의 IP는 영속적이지 않아 항상 변할 수 있음
  • 여러 디플로이먼트를 하나의 앱으로 연동하려면 Discovery 방법이 필요

서비스의 역할

  • 파드를 연결하고 외부에 노출
  • 파드에 접근하기 위한 규칙을 정의
  • 여러개의 파드에 쉽게 접근할 수 있도록 고유한 도메인 이름을 부여
  • 여러개의 파드에 접근시 로드밸런싱을 수행
  • 로드밸런서, 클러스터 노드의 포트 등을 통해 파드를 외부로 노출

서비스의 종류

  • ClusterIP 타입
    • 외부에 파드를 노출하지 않고, 쿠버네티스 내부에서만 파드에 접근할때 사용
  • NodePort 타입
    • 클러스터의 모든 노드에 동일한 포트를 개방
    • 외부에서 접근 가능하며, 포트는 랜덤배정 하거나 선택도 가능
  • LoadBalancer 타입
    • 로드밸런서를 동적으로 프로비저닝해 파드에 연결
    • 외부에서 접근 가능하며, 일반적으로 AWS 등의 클라우드에서 활용
  • ExternalName 타입
    • 외부 시스템과 연동할때 사용
    • 서비스가 외부 도메인을 가리키도록 설정 가능
apiVersion: apps/v1
kind: Service
metadata:
    name: host-nodeport
spec:
    ports: # 포트로 서비스 노출
        - name: web-port
          port: 8080
          targetPort: 80
    selector:
        app: webserver
    type: NodePort # 서비스 종류

 
 

728x90
반응형