Resources

Pod, Service, Deployment, ReplicaSet

  • Pod: 컨테이너의 실행 단위, 가장 작은 배포 단위
  • ReplicaSet: 틀정 개수의 Pod가 항상 실행되도록 보장
  • Deployment: Pod와 ReplicaSet을 관리하며, 애플리케이션 상태를 정의하고, 무중단 업데이트, 롤백 등의 기능을 제공
  • Service: Pod의 네트워크 접근을 관리하고, 로드 밸런싱 및 고정된 네트워크 엔드포인트를 제공

Pod

  • 배포되고 관리되는 가장 작은 단위, 컨테이너들의 논리적 그룹
  • 주요 특징:
    • 단일 컨테이너 또는 여러 컨테이너로 구성될 수 있다.
    • Pod 내 모든 컨테이너는 같은 네트워크 IP 주소를 공유한다.
    • 짧은 생명 주기를 가지며, Pod 자체는 불안정하고 휘발성임
  • 추가 사항 : 주 컨테이너, 사이드카 컨테이너가 하나의 Pod로 묶이는 경우가 많음

Service

service.png

  • 서비스는 Pod들의 네트워크 접근을 관리
  • Pod의 수명에 의한 가변성을 추상화
  • Pod가 생성되거나 종료되더라도 항상 고정된 네트워크 접근을 제공하며, Pod에 대한 네트워크 요청을 로드밸런식하여 효율적으로 관리함

주요 특징

  1. 고정된 IP 주소와 DNS 이름 제공
    • k8s Pod는 생성될 때마다 새로운 IP를 할당 받음
    • 서비스는 이런 Pod의 특성과 달리 고정된 IP, DNS를 제공하며 일관된 네트워크 접근을 가능하게 한다.
    • DNS 기반 서비스 디스커버리를 사용하며, 고정된 DNS 이름을 통해 다른 서비스를 접근할 수 있다.
  2. 라벨 셀렉터
    • 서비스틑 라벨 셀렉터를 사용하여, 특정 레이블을 가진 Pod들을 자동으로 찾고 이를 백엔드로 연결
    • Label은 Pod와 같은 k8s 리소스를 태그를 추가해서 관리하는 방식이다.
    • 서비스는 이 라벨을 기준으로 Pod를 그룹화하고, 트래픽을 해당 그룹에 전달한다.
    • 애플리케이션 업데이트 시에도 서비스는 새로운 Pod로 자동으로 트래픽을 라우팅할 수 있다.
  3. 클러스터 내부 및 외부 서비스
    • 클러스터 내부 또는 외부 네트워크에서 접근 가능하도록 설정할 수 있다.
      • ClusterIP : 클러스터 내부에서만 접근 가능한 IP
      • NodePort : 각 노드의 고정도니 포트를 열어서 외부에서 노드 IP와 포트를 통해서 직접 접근 가능하게 한다.
      • LoadBalancer : 클라우드 제공자의 로드밸런서를 자동으로 설정하여 외부 클라이언트가 서비스에 접근할 수 있도록 한다.
  4. 로드 밸런싱
    • 서비스는 Pod의 네트워크 요청을 로드밸런싱하여 트래픽을 효율적으로 분산한다.
    • 동일한 서비스를 제공하는 여러 Pod로 트래픽이 균등하게 분배되어 과도한 부하가 걸리는 것을 방지
    • 외부 로드밸런서와 k8s의 내부 로드밸런서가 협력하여 트래픽으 ㄹ최저고하

서비스 타입

  1. ClusterIP
    • 특징
      • 기본 서비스 타입: 기본적으로 설정되는 서비스 타입으로 외부에서 접근할 수 없고 클러스터 내부의 다른 Pod이 서비스에 연결할 수 있도록 설정한다.
      • 내부 통신에 최적화 : 애플리케이션 간 내부 통신을 위해서 설계됐다.
      • DNS 이름 제공 : ClusterIP는 서비스의 고정된 IP 주소와 DNS 이름을 제공한다. Pod가 클러스터 내에서 서비스를 발견하고 통신할 수 있도록 한다.
  2. NodePort
    • 특징
      • 고정된 포트 사용 : 30000 ~ 32767
      • 클래스터 내 모든 노드에서 접근 가능 : 모든 노드에서 동일한 포트가 열리며, 외부 클라이언트는 클러스터의 어떤 노드 IP를 통해서도 해당 포트로 접근이 가능
      • ClusterIP 서비스와 연결: NodePort는 내부적으로 ClusterIP를 생성하며, 외부에서 온 트래픽은 ClusterIP를 통해서 전파된다.
  3. LoadBalancer
    • 특징
      • 외부 트래픽 노출: LoadBalancer는 외부에서 애플리케이션에 접근할 수 있도록 클라우드에서 관리되는 로드 밸런서를 생성한다. PublicIP를 제공하며, 외부 클라이언트가 서비스에 접속할 수 있게 한다.
      • 트래픽 분산: 여러 노드의 Pod로 분산하여 애플리케이션의 부하를 효율적으로 처리
      • NodePort, ClusterIP와 연동 : LoadBalancer는 NordPort 및 ClusterIP를 사용한다.

Deployment

  • Pod와 ReplicaSet을 관리하는 상위 개념으로, 애플리케이션의 상태를 정의하고 무중단 배포, 업데이트, 롤백 등의 기능을 제공한다.
  • 지속적 배포를 위해서 사용되며, k8s 클러스터에서 애플리케이션의 버전 관리와 확장을 자동화한다.
  • 특징
    • Deployment를 통해 Pod와 ReplicaSet을 정의할 수 있다.
    • Deployment에서 Pod의 template을 정의하고 Pod가 몇 개의 복제본으로 실행될지 설정할 수 있다.
    • RollingUpdate를 통해서 점진적으로 업데이트 할 수 있다.
    • Rollback을 할 수 있다.
    • 자동 확장을 설정할 수 있다.

ReplicaSet

  • 특정 개수의 Pod가 항상 실행 중임을 보장하는 k8s 리소스
  • 특징
    • 실행할 Pod의 수를 설정할 수 있으며, ReplicaSet은 이 설정을 기반으로 Pod의 수를 자동으로 조정
    • Pod가 실패하거나 종료되면 ReplicaSet이 이를 감지하고, 새로운 Pod를 생성하여 DesiredState를 유지
    • Deployment에 의해 자동으로 생성되며, 사용자가 직접 ReplicaSet을 생성할 필요는 거의 없다.

관계성

  1. Deployment는 사용자가 애플리케이션의 상태를 정의하는 리소스 ReplicaSet을 생성하며 복제된 Pod가 항상 정의된 수만큼 실행되도록 보장
  2. ReplicaSet: 복제된 Pod가 항상 정의된 수만큼 실행되도록 보장
  3. Pod: 컨테이너의 실행 단위
  4. Service: Pod들이 동적으로 변동되더라도, 고정된 네트워크 엔드 포인트를 제공