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
반응형