Pod

[kubernetes io 정리] Pod

Pod는 쿠버네티스 애플리케이션의 기본 실행 단위이다. 쿠버네티스 객체 모델 중 만들고 배포할 수 있는 가장 작고 간단한 단위이다. 파드는 클러스터에서의 Running 프로세스를 나타낸다.

파드는 애플리케이션 컨테이너, 저장소 리소스, 특정 네트워크 IP, container가 동작하기 위해 만들어진 옵션들을 캡슐화 한다. 파드는 배포의 단위를 말한다.

쿠버네티스 클러스터 내부의 파드는 주로 두 가지 방법으로 사용된다.

  1. Pods that run a single container

    한 개의 파드가 단일 컨테이너를 감싸고 있다

  2. Pods that run multiple containers

    파드는 강하게 경합되어 있고 리소스 공유가 필요한 다중으로 함께 배치된 컨테이너로 구성되어 잇다.

네트워킹

각각의 파드는 유일한 IP주소를 할당 받는다. 한 파드 내부의 모든 컨테이너는 네트워크 네임스페이스와 IP주소 및 네트워크 포트를 공유한다. 파드 안에 있는 컨테이너는 다른 컨테이너와 localhost 를 통해서 통신할 수 있다. 특정 파드 안에 있는 컨테이너가 파드 밖의 요소들과 통신하기 위해서는, 네트워크 리소스를 어떻게 쓰고 있는지 공유 해야 한다. (포트 등..)

저장소

파드는 공유 저장소 집합은 Volumes을 명시할 수 있다. 파드 내부의 모든 컨테이너는 공유 볼륨에 접근할 수 있고, 그 컨테이너끼리 데이터를 공유하는 것을 허용한다. 또한 볼륨은 컨테이너가 재시작되어야 하는 상황에도 파드 안의 데이터가 영구적으로 유지될 수 있게 한다.

파드와 컨트롤러

컨트롤러는 다중 파드를 생성하고 관리해 주는데, 클러스터 범위 내에서의 레플리케이션 핸들링, 롤아웃 그리고 셀프힐링 기능 제공을 한다.

파드 템플릿

1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo 안녕하세요 쿠버네티스! && sleep 3600']

Pod란 무엇인가

파드의 공유 컨텍스트는 Linux 네임 스페이스, cgroup 및 도커 컨테이너를 격리하는 것과 같이 잠재적으로 다른 격리 요소들이다. 파드의 컨텍스트 내에서 개별 응용 프로그램은 추가적으로 하위 격리가 적용된다.

파드 안의 컨테이너들은 IP주소와 포트 공간을 공유하고, 서로를 localhost를 통해 찾을 수 있다.

일반적으로 사용자는 파드를 직접 만들 필요가 없다. 싱글톤이라도 대부분 디플로이먼트와 같은 컨트롤러를 사용한다. 컨트롤러는 클러스터 범위에서 복제와 롤아웃 관리 뿐만 아니라 자가치료 기능도 제공한다. StatefulSet과 같은 컨트롤러는 상태를 저장하는 파드에도 위와 같은 기능 제공을 할 수 있다.