본문 바로가기
Web/Infra

[Kubernetes] Pod, 쿠버네티스의 가작 작은 단위

by EricJeong 2020. 10. 4.

Pod의 개념

도커에서의 가장 작은 단위가 컨테이너라면 쿠버네티스의 가장 작은 단위는 Pod입니다. Pod는 도커에서 말하는 컨테이너를 하나 이상 묶은 단위입니다. 즉, Pod는 컨테이너의 그룹입니다. 그리고 이 Pod는 컨테이너 애플리케이션을 배포하기 위한 기본 단위가 됩니다.

 

Pod라는 이름의 유래를 살펴본다면 고래 떼(pod of whales)나 콩꼬투리(pea pod)를 이름의 유래로 가지고 있습니다. 이렇게 묶인 컨테이너 그룹인 Pod는 다음과 같은 특징을 가지고 있습니다.

  • 스토리지와 네트워크를 공유합니다
  • 컨테이너 구동에 대한 명세를 가지고 있습니다
  • 내부 콘텐츠를 함께 배치하고 실행하며 스케줄합니다
  • 공유 콘텍스트에서 실행합니다

파드는 그 자체로 어느 정도의 격리된 환경을 제공합니다. 파드 내부의 모든 컨테이너는 네트워크와 스토리지를 공유합니다. 즉, 파드 내부의 컨테이너들은 네트워크와 같은 리눅스 네임 스페이스를 공유합니다.

 

Pod 내부 컨테이너 개수에 따른 성격

파드는 컨테이너의 그룹입니다. 그렇기 때문에 하나의 파드에 하나의 컨테이너를 넣을 수 있고, 하나의 파드에 두 개 이상의 컨테이너를 넣을 수도 있습니다.

 

단일 컨테이너로 구성된 파드

쿠버네티스 사용 시 가장 많이 구성하는 파드의 형태입니다. 위 그림처럼 하나의 파드에 웹 서버 컨테이너를 올린다면 그 자체로 하나의 배포 단위인 파드가 완성됩니다. 웹 서버는 그 자체로 구동할 수 있다는 특징을 가지고 있는데, 이러한 애플리케이션을 완전한 애플리케이션이라고 부를 수 있습니다. 

복수의 컨테이너로 구성된 파드

웹 서버는 그 자체로 구동할 수 있다는 특징을 가지고 있는데, 이러한 애플리케이션을 완전한 애플리케이션이라고 부를 수 있습니다. 이러한 완전한 애플리케이션을 파드 내부에 복수의 컨테이너로 지정하는 것은 바람직하지 않습니다. 여러 웹 서버가 필요하다면 복수의 파드를 생성하면 됩니다.

 

그렇다면 파드 내부에 복수의 컨테이너를 설정할 때는 어떤 때일까요? 그 이유는 완전한 애플리케이션에 부가적인 기능을 필요로 할 때입니다. 웹 서버에 남는 로그를 기록하는 로깅 애플리케이션을 추가적으로 파드 내부에 설정할 수 있습니다. 이는 웹 서버와 함께 실행되어야 하기 때문에 주 컨테이너는 Web Server, 보조 컨테이너를 Logging으로 볼 수 있습니다. 이렇게 파드 내부에 부가적으로 정의된 컨테이너를 사이드카(sidecar) 컨테이너라고 부릅니다.

 

다시 한번 강조하지만, 사이드카 컨테이너는 각 컨테이너가 밀접하게 연결된 특정 인스턴스에만 사용해야 합니다. 파드는 단일 애플리케이션의 배포 단위이기 때문에 단순히 애플리케이션의 수평 확장을 위하여 파드 내부에 여러 컨테이너를 정의하는 것보다는 복수의 파드를 생성하여 사용하는 것이 바람직합니다.

 

파드의 생성

Pod 템플릿

파드를 생성하는 yaml파일은 아래와 같이 구성할 수 있습니다.

apiVersion: v1
kind: Pod
metadata:
  name:  my-pod
spec:
  containers:
  - name: my-nginx-container
    image: nginx:latest
    ports:
    - containerPort: 80
      protocol: TCP

apiVersion

쿠버네티스 오브젝트의 API 버전을  나타냅니다. 오브젝트의 종류, 개발단계에 따라 apiVersion이 달라질 수 있습니다.

kind

오브젝트 리소스의 종류를 나타냅니다. 현재 Pod를 생성하고 있기 때문에 kine: Pod 형식으로 입력할 수 있습니다. 추후 다른 오브젝트를 생성할 때 이 위치에 오브젝트의 종류가 들어갑니다. (ReplicaSet 등)

metadata

label, annotaion, name 등 리소스의 부가 정보를 입력합니다.

spec

리소스의 상세 정보를 이곳에서 입력해야 합니다. 컨테이너를 생성하기 위한 이미지, 포트 등 상세 스펙을 정의할 수 있습니다.

 

 

쿠버네티스에서 대부분의 오브젝트를 생성할 때는 주로 yaml 파일을 사용합니다. yaml파일을 생성한 후 다음과 같은 명령어로 쿠버네티스에서 파드를 생성할 수 있습니다.

  1. my-pod.yaml 생성
  2. 쉘에 kubectl apply -f my-pod.yaml 입력

실제 명령어를 입력한 후, 쿠버네티스에서 파드의 상태를 확인하는 kubectl get pods 를 입력해본다면 다음과 같은 상태를 확인할 수 있습니다.

 

References

kubernetes.io/ko/docs/concepts/workloads/pods/

 

파드

운영 수준의 컨테이너 오케스트레이션

kubernetes.io

http://www.yes24.com/Product/Goods/84927385

 

시작하세요! 도커/쿠버네티스

본서는 도커를 처음 접하는 개발자를 위한 도커 컨테이너와 이미지의 기본적인 개념을 먼저 설명한 뒤, 도커 컴포즈와 스웜 모드를 통해 컨테이너 애플리케이션을 YAML 파일로 작성하고 클러스��

www.yes24.com

 

댓글