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

Created
Mar 5, 2022
Created by
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.
 
notion 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"]
 
 
참고자료