[wanted Docker Series] 10.kubernetesresources
October 10, 2024
Resources
Pod, Service, Deployment, ReplicaSet
- Pod: 컨테이너의 실행 단위, 가장 작은 배포 단위
- ReplicaSet: 틀정 개수의 Pod가 항상 실행되도록 보장
- Deployment: Pod와 ReplicaSet을 관리하며, 애플리케이션 상태를 정의하고, 무중단 업데이트, 롤백 등의 기능을 제공
- Service: Pod의 네트워크 접근을 관리하고, 로드 밸런싱 및 고정된 네트워크 엔드포인트를 제공
Pod
- 배포되고 관리되는 가장 작은 단위, 컨테이너들의 논리적 그룹
- 주요 특징:
- 단일 컨테이너 또는 여러 컨테이너로 구성될 수 있다.
- Pod 내 모든 컨테이너는 같은 네트워크 IP 주소를 공유한다.
- 짧은 생명 주기를 가지며, Pod 자체는 불안정하고 휘발성임
- 추가 사항 : 주 컨테이너, 사이드카 컨테이너가 하나의 Pod로 묶이는 경우가 많음
Service

- 서비스는 Pod들의 네트워크 접근을 관리
- Pod의 수명에 의한 가변성을 추상화
- Pod가 생성되거나 종료되더라도 항상 고정된 네트워크 접근을 제공하며, Pod에 대한 네트워크 요청을 로드밸런식하여 효율적으로 관리함
주요 특징
- 고정된 IP 주소와 DNS 이름 제공
- k8s Pod는 생성될 때마다 새로운 IP를 할당 받음
- 서비스는 이런 Pod의 특성과 달리 고정된 IP, DNS를 제공하며 일관된 네트워크 접근을 가능하게 한다.
- DNS 기반 서비스 디스커버리를 사용하며, 고정된 DNS 이름을 통해 다른 서비스를 접근할 수 있다.
- 라벨 셀렉터
- 서비스틑 라벨 셀렉터를 사용하여, 특정 레이블을 가진 Pod들을 자동으로 찾고 이를 백엔드로 연결
- Label은 Pod와 같은 k8s 리소스를 태그를 추가해서 관리하는 방식이다.
- 서비스는 이 라벨을 기준으로 Pod를 그룹화하고, 트래픽을 해당 그룹에 전달한다.
- 애플리케이션 업데이트 시에도 서비스는 새로운 Pod로 자동으로 트래픽을 라우팅할 수 있다.
- 클러스터 내부 및 외부 서비스
- 클러스터 내부 또는 외부 네트워크에서 접근 가능하도록 설정할 수 있다.
- ClusterIP : 클러스터 내부에서만 접근 가능한 IP
- NodePort : 각 노드의 고정도니 포트를 열어서 외부에서 노드 IP와 포트를 통해서 직접 접근 가능하게 한다.
- LoadBalancer : 클라우드 제공자의 로드밸런서를 자동으로 설정하여 외부 클라이언트가 서비스에 접근할 수 있도록 한다.
- 로드 밸런싱
- 서비스는 Pod의 네트워크 요청을 로드밸런싱하여 트래픽을 효율적으로 분산한다.
- 동일한 서비스를 제공하는 여러 Pod로 트래픽이 균등하게 분배되어 과도한 부하가 걸리는 것을 방지
- 외부 로드밸런서와 k8s의 내부 로드밸런서가 협력하여 트래픽으 ㄹ최저고하
서비스 타입
- ClusterIP
- 특징
- 기본 서비스 타입: 기본적으로 설정되는 서비스 타입으로 외부에서 접근할 수 없고 클러스터 내부의 다른 Pod이 서비스에 연결할 수 있도록 설정한다.
- 내부 통신에 최적화 : 애플리케이션 간 내부 통신을 위해서 설계됐다.
- DNS 이름 제공 : ClusterIP는 서비스의 고정된 IP 주소와 DNS 이름을 제공한다. Pod가 클러스터 내에서 서비스를 발견하고 통신할 수 있도록 한다.
- NodePort
- 특징
- 고정된 포트 사용 : 30000 ~ 32767
- 클래스터 내 모든 노드에서 접근 가능 : 모든 노드에서 동일한 포트가 열리며, 외부 클라이언트는 클러스터의 어떤 노드 IP를 통해서도 해당 포트로 접근이 가능
- ClusterIP 서비스와 연결: NodePort는 내부적으로 ClusterIP를 생성하며, 외부에서 온 트래픽은 ClusterIP를 통해서 전파된다.
- 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을 생성할 필요는 거의 없다.
관계성
- Deployment는 사용자가 애플리케이션의 상태를 정의하는 리소스 ReplicaSet을 생성하며 복제된 Pod가 항상 정의된 수만큼 실행되도록 보장
- ReplicaSet: 복제된 Pod가 항상 정의된 수만큼 실행되도록 보장
- Pod: 컨테이너의 실행 단위
- Service: Pod들이 동적으로 변동되더라도, 고정된 네트워크 엔드 포인트를 제공