쿠버네티스 기본 오브젝트 - Pod

Created
March 5, 2022
Created by
D
DaEun Kim
Tags
Kubernetes
Property

Pod

Pod 관련하여 더 자세한 내용은 여기를 참고.

  • pod는 같은 리소스를 공유하는 1개 이상의 컨테이너를 캡슐화 해놓은 단위다.
  • 같은 리소스를 공유하는 컨테이너들의 묶음이기 때문에 pod는 스토리지, IP주소, 컨테이너를 실행하는 정책 등을 포함한다.
  • pod 의 컨테이너 런타임으로 도커가 제일 많이 쓰인다.
  • pod 안에 컨테이너들은 동일한 namespace 와 volume 을 공유한다.
  • pod 가 죽었다가 재생성 되면 k8s 클러스터는 pod 에게 새로운 private IP 를 할당한다.
  • pod 하나에 2개 이상의 컨테이너를 두는 경우 : 메인 기능을 하는 컨테이너에 부가적인 작업이 필요할 때
  • 예) Nginx + Nginx reloader

Pod spec

label

  • 목적에 따라 오브젝트를 분류하는 데 쓰인다.
  • 한 오브젝트에 여러 라벨을 달 수 있다.

컨테이너 리소스 관리

더 많은 내용은 여기 참고.

nodeSelector

  • pod가 어느 node에 생성될 지 직접 지정할 때 쓰인다.

resources

  • spec.containers.resources 에 컨테이너가 사용할 최소/최대 리소스 양을 설정할 수 있음.
  • requests.memory: 2Gi → 최소 2G를 요구한다.

    limits.memory: 3Gi → 컨테이너가 메모리를 3G 이상 점유할 경우 pod를 종료시킨다.

    requests.cpu: 50m → 최소 1코어의 5% 를 점유하도록 요구한다.

    limits.cpu: 100m → 최소 1코어의 10% 를 점유하도록 요구한다.

  • 메모리 사용량이 limit을 초과하면 pod 를 종료시키지만 CPU 점유율이 limit을 초과하면 requests 에 정의된만큼 점유하도록 해서 pod 가 종료되는건 아니지만 프로세스가 느려짐.
resources:
  requests:
    memory: 50Mi
    cpu: 50m
  limits:
    memory: 100Mi
    cpu: 100m

The unit suffix mstands for “thousandth of a core,” so this resources object specifies that the container process needs 50/1000 of a core (5%) and is allowed to use at most 100/1000 of a core (10%). Likewise 2000mwould be two full cores, which can also be specified as 2or 2.0.

출처 : understanding resource limits in cpu time

image

Pod 를 사용하는 이유 - namespace

Pod는 같은 네임스페이스를 공유하는 여러 컨테이너들을 추상화한다.

(Pod 안에 있는 컨테이너들은 동일한 네트워크 환경을 가짐.)

예) 아래 yaml 로 pod 를 생성하고 ubuntu-sidecar-container 에 접속하여 localhost 에 HTTP 요청하면 nginx-container 에 실행중인 nginx 가 주는 응답을 받음.

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

  - name: ubuntu-sidecar-container
    image: alicek106/rr-test:curl
    command: ["tail"]
    args: ["-f", "/dev/null"]

참고자료