DevOps/Kubernetes

[K8S] k8s 정리 - (5) Kubernetes Object (Pod, Service, Volume, Namespace)

yubi5050 2022. 9. 7. 15:52

이전 글들에서는 Kubernetes 동작 Flow 에 대해 알아보았다. 

https://yubi5050.tistory.com/168
 

[K8S] k8s 정리 - (4) Kubernetes 동작 Flow

이전 글들에서는 Kubernetes Architecture에 대해 알아보았다. https://yubi5050.tistory.com/167 [K8S] k8s 정리 - (3) Kubernetes Architecture - worker, addon Kubernetes Component 쿠버네티스를 구성하는 C..

yubi5050.tistory.com

Kubernets의 리소스 단위는 크게 Object와 Controller로 구성되는데, 이번 글에서는 그 중 주요 Object들에 대해 알아 보려고 한다. 각각의 Object에 대한 세부내용은 차후 다른 글에서 각각을 다루기로 하고 (내용이 무척 많다) , 이번 글에서는 기본 특징 위주로만 알아보려고 한다.

 

Object 란?

Object란 Kubernets의 가장 기본적인 구성단위로 yaml 스펙 정의의 표준이며, 주요 종류로는 파드(pod), 서비스(service), 네임스페이스(namespace), 볼륨(volume) 등이 있다.

 

Pod

Pod 구조

Pod는 쿠버네티스의 가장 기본적인 배포 단위이다. 그럼 왜 쿠버네틱스에서 단위를 파드로 사용할까? 

 

이유는 컨테이너 묶음에 대해 추상화하여 사용하기 위함 

 

예로 한 서비스의 비즈니스 로직을 수행하는 컨테이너 외에 부가적으로 정의된 컨테이너를 사이드카 (Sidecar) 컨테이너들(특정 컨테이너의 설정 파일의 변경사항을 갱신해주는 설정 리로더(reloader) 프로세스 컨테이너 / 로그 수집 컨테이너 등)을 포함한 하나의 구성을 파드라고 추상화 한 것

물론 Pod는 생성 후, 외부에서 접근할 수 있도록 노출된 상태는 아니며, Service 란 Object가 필요하다.

 

Pod에 대한 생명 주기나, 여러 특징에 대해서는 다른 글에서 다루려고 한다.

 

👉 파드(Pod) 주요 특징

  • 파드라는 단위로 컨테이너를 묶어서 관리
    ex) 외부에서 파드에 접근시 192.168.x.x라는 IP로 접근, 내부 컨테이너의 포트로 접근
  • 파드 내의 컨테이너 끼리는 localhost 통신이 가능
  • Pod 내에 배포된 컨테이너간 디스크 볼륨 공유 가능
    동일 Pod내 컨테이너들끼리는 볼륨을 공유할 수 있어 애플리케이션의 로그 수집기 적용 가능

 

Service

여러개의 Pod와 볼륨을 이용하여 컨테이너 정의하여 외부에서 클러스터 내부에 접근 가능하게 하는 수단

👉 서비스(Service) 주요 특징

  • 라벨 셀럭터리를 통한 특정 라벨을 가지고 있는 Pod 선택하여 Service로 묶음
  • 주로 네트워크와 관련된 오브젝트로 Pod를 외부 네트워크와 연결
  • 여러 개의 Pod를 바라보는 내부 로드 밸런서를 생성시 사용.
  • 종류 : ClusterIP, NodePort, LoadBalancer, ExternalName

 

Service의 종류별 특징은 다른 글에서 다루기로 함

 

 Namespace

클러스터 내의 사용되는 리소소들을 구분해서 관리하는 논리적인 분리 단위를 뜻하며, 하나의 서비스 혹은 복수의 서비스로 이루어 질 수 있다. (서비스들은 다수의 파드를 포함) 

 

namespace 구조

👉 네임스페이스 (Namespace) 주요 특징

  • Pod나 Service등이 네임 스페이스 별로 생성 이나 관리 사용자 권한 부여 가능
    ex) 공통된 결제 프로그램(서비스+파드)을 홈쇼핑용, 백화점용, 면세점용으로 구분하여 다르게 구성하여 사용
    ex) 하나의 클러스터 내에 dev, production, test 환경 namespace로 나누어 운영 
  • 장점으로는 해당 Namespace 에서만 사용되는 Pod, Service 정보를 Debugging 할 수 있어 관리하기 편리
  • namespace를 삭제하면 모든 내부 구성이 삭제됨.

 

 Volume

Pod나 Container에 문제가 생기더라도, 데이터 유실을 방지하기 위한 기능

👉 Volume의 종류

  • 내부 호스트의 디스크를 볼륨으로 사용 : emptyDir, hostPath, local
  • 클라우드 서비스 제공 볼륨 서비스 : EBS(awsElastcBlockstore) / azureDisk / azureFile
  • 오픈소스 스토리지 서비스 : glusterfs, cephfs
  • 쿠버네티스 내부 오브젝트 : configmap, secret

 

Volume의 종류별 생성 방법과 특징 비교는 다른 글에서 다루기로 함

 

 마무리 

이번 글에서는 Pod의 기본적인 4가지 Object에 대해 알아보았다. 다음 글에서는 Kubernetes의 Controller에 대해 정리 해 보려고 한다.