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
m
stands 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 2000m
would be two full cores, which can also be specified as 2
or 2.0
.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"]
참고자료